乐趣区

关于php:看了这篇还不会Linux性能分析和优化你来打我

前言

个别互联网的我的项目都是部署在 linux 服务器上的,如果 linux 服务器出了问题,那么咱们平时学习的高并发,稳定性之类的是没有任何意义的,所以对 linux 性能的把握就显得十分重要,当然很多同学可能感觉这些是运维同学的事件,然而我不这么认为,不论你是架构师,还是 crud boy,对我的项目有个全局的掌控是一项十分重要的基本素质,所以总结了这篇文章,心愿对您有用,如果您感觉我写的还不错,看完记得点个赞,点个再看哦。咱们废话不必多说,间接进入正题。

影响 linux 服务器性能的因素

cpu

CPU 是操作系统稳固运行的基本,CPU 的速度与性能在很大水平上决定了零碎整体的性能,因而,CPU 数量越多、主频越高,服务器性能也就绝对越好。

内存

内存的大小也是影响 Linux 性能的一个重要的因素,内存太小,零碎过程将被阻塞,利用也将变得迟缓,甚至失去响应;内存太大,导致资源节约。

磁盘 IO

磁盘的 I / O 性能间接影响应用程序的性能,在一个有频繁读写的利用中,如果磁盘 I / O 性能得不到满足,就会导致利用停滞。好在现今的磁盘都采纳了很多办法来进步 I / O 性能,比方常见的磁盘 RAID 技术。

网络

Linux 下的各种利用,个别都是基于网络的,因而网络带宽也是影响性能的一个重要因素,低速的、不稳固的网络将导致网络应用程序的拜访阻塞,而稳固、高速的网络带宽,能够保障应用程序在网络上畅通无阻地运行。侥幸的是,当初的网络个别都是千兆带宽或光纤网络,带宽问题对应用程序性能造成的影响也在逐渐升高。

罕用的 linux 零碎性能监控的命令

uptime(零碎整体性能评估)

这里须要留神的是:load average 这个输入值,这三个值的大小个别不能大于零碎 CPU 的个数

那么如何查看 cpu 的个数呢?

查看零碎 cpu 的信息

cat /proc/cpuinfo 中的信息

其中 cpu cores 即为 cpu 的核数

也能够用 cat /proc/cpuinfo |grep “cores”|uniq 间接查看

[root@test ~]# cat /proc/cpuinfo |grep "cores"|uniq
cpu cores    : 2

cpu 的性能评估

利用 vmstat 命令监控 cpu

vmstat 2 10(每 2 秒监控一次 监控 10 次)

procs

r 示意运行和期待 cpu 工夫片的过程数,这个值如果长期大于 cpu 的个数,则须要减少零碎 cpu

b 示意期待资源的过程数

CPU

us 列显示了用户过程耗费 CPU 工夫百分比,us 比拟高的时候,阐明用户过程耗费 cpu 的工夫多,如果长期大于 50%,就须要优化程序和算法

sy 列显示了内核过程耗费的 cpu 工夫百分比,sy 值较高的时候,阐明内核耗费的 cpu 资源很多

依据教训,us+sy 的参考值为 80%,如果 us+sy 大于 80% 阐明可能存在 CPU 资源有余。

利用 sar 命令监控零碎 cpu

sar 命令会减少零碎开销 然而影响不大

yum install sysstat 装置 sar 命令

sar -u 3 5(u 显示零碎所有 cpu 在采样工夫内的负载状态)

%user:用户过程耗费 cpu 的工夫百分比

%nice:运行失常过程所耗费 cpu 的百分比

%system:零碎耗费 cpu 工夫百分比

%iowait:IO 期待所占用 cpu 工夫百分比

%steal:内存在绝对缓和的环境下 pagein 强制对不同页面进行的 steal 操作

%idle:cpu 处在闲暇工夫的百分比

内存性能评估

利用 free 指令监控内存

free -m #查看以 M 为单位的内存应用状况

个别有这样一个教训公式:

应用程序可用内存 / 零碎物理内存 >70% 时,示意零碎内存资源十分短缺,不影响零碎性能。

应用程序可用内存 / 零碎物理内存 <20% 时,示意零碎内存资源紧缺,须要减少零碎内存。

20%< 应用程序可用内存 / 零碎物理内存 <70% 时,示意零碎内存资源根本能满足利用需要,临时不影响零碎性能。

利用 vmstat 监控内存

swpd 示意切换到内存替换去的内存数量(k),如果 swpd 的值不为 0,或者比拟大,然而 si,so 的值长期为 0,这种状况不必放心,不会影响性能

free 示意闲暇的物理内存数量

buffer 示意 buffers cache 的内存数量,个别对设施的读写才须要缓冲

cache 示意 page cached 的内存数量。个别作为文件系统 cached,频繁拜访的文件都会被 cached,如果 cache 值较大,阐明 cached 的文件较多,如果此时 IO 中的 bi 比拟小,阐明文件系统效率比拟好

si 示意由磁盘调入内存,也就是内存进入内存替换区的数量

so 示意由内存调入磁盘,也就是内存替换区进入内存的数量
个别状况下,so si 的值都为 0。如果 si so 的值长期不为 0,则示意零碎内存不足,须要减少内存

磁盘 IO 性能评估

iostat

iostat -d 2 10

Blk_reads/s  每秒读取的数据块数

Blk_wrtn/s   每秒写入的数据块数

Blk_read     读取的所有块数

Blk_wrtn     写入的所有块数

这几个值没有规范 如果长期都很大 必定是不失常的

利用 sar 评估磁盘性能

sar -d 2 5

await 均匀每次设施 I / O 操作的等待时间(毫秒)

svctm 均匀每次设施 I / O 操作的服务工夫(毫秒)

%util 一秒中有百分之几的工夫用于 I / O 操作

评判规范

失常状况下 svctm 应该是小于 await 的,svctm 的值和磁盘性能,cpu 内存等都有关系

如果 svctm 的值和 await 的值相近示意简直没有 I / O 期待,磁盘性能很好,如果 await 的值远高于 svctm,示意 I / O 队列等待时间太长,零碎上的应用程序将变慢,此时能够通过更换更快的硬盘来解决问题

%util 越小越好,如果 %util 靠近 100% 示意磁盘产生的 I / O 申请太多,I/ O 零碎曾经满负载在工作,此时能够通过优化程序或者更换更快的磁盘来解决问题

网络性能评估

通过 ping 命令检测网络的连通性。
通过 netstat -i 组合检测网络接口情况。
通过 netstat -r 组合检测零碎路由表信息。
通过 sar -n 组合显示零碎的网络运行状态(sar -n DEV 5 3)。

罕用剖析:

查看 tcp 连贯数最多的 ip:

sudo netstat -pant | grep ":22" | awk '{print $5}' | awk -F":" '{print $4}' |sort|uniq -c|sort -nr

解释:

awk -F”:” ‘{print $4}’ 示意把后果的第 4 列用: 号宰割

sort -nr 排序,- n 以数值大小排序,- r 倒序,从大到小。

uniq -c 删除反复的行,- c 示意加上每行呈现的次数。

netstat 命令是一个监控 TCP/IP 网络的十分有用的工具,
它能够显示路由表、理论的网络连接以及每一个网络接口设施的状态信息。

netstat -pant

参数 -p:显示正在应用 Socket 的程序识别码和程序名称;

参数 -a:显示所有连线中的 Socket;

参数 -n:间接应用 ip 地址,而不通过域名服务器;

参数 -t:显示 TCP 传输协定的连线情况。

提取拜访 nginx 服务器最多的 10 个 ip。

cat access.log | awk ‘{print $1}’ | sort | uniq -c | sort -nr | head -n10

退出移动版