共计 3030 个字符,预计需要花费 8 分钟才能阅读完成。
导读 | CPU 是操作系统稳定运行的根本,CPU 的速度与性能在很大程度上决定了系统整体的性能,因此,CPU 数量越多、主频越高,服务器性能也就相对越好。 |
一般互联网的项目都是部署在 linux 服务器上的,如果 linux 服务器出了问题,那么咱们平时学习的高并发,稳定性之类的是没有任何意义的,所以对 linux 性能的把握就显得非常重要,当然很多同学可能觉得这些是运维同学的事情,但是我不这么认为,不管你是架构师,还是 crud boy,对项目有个全局的掌控是一项非常重要的基本素质,所以总结了这篇文章,希望对您有用,如果您觉得我写的还不错,看完记得点个赞,点个再看哦。咱们废话不用多说,直接进入正题。
CPU 是操作系统稳定运行的根本,CPU 的速度与性能在很大程度上决定了系统整体的性能,因此,CPU 数量越多、主频越高,服务器性能也就相对越好。
内存的大小也是影响 Linux 性能的一个重要的因素,内存太小,系统进程将被阻塞,应用也将变得缓慢,甚至失去响应; 内存太大,导致资源浪费。
磁盘的 I / O 性能直接影响应用程序的性能,在一个有频繁读写的应用中,如果磁盘 I / O 性能得不到满足,就会导致应用停滞。好在现今的磁盘都采用了很多方法来提高 I / O 性能,比如常见的磁盘 RAID 技术。
Linux 下的各种应用,一般都是基于网络的,因此网络带宽也是影响性能的一个重要因素,低速的、不稳定的网络将导致网络应用程序的访问阻塞,而稳定、高速的网络带宽,可以保证应用程序在网络上畅通无阻地运行。幸运的是,现在的网络一般都是千兆带宽或光纤网络,带宽问题对应用程序性能造成的影响也在逐步降低。
这里需要注意的是:load average 这个输出值,这三个值的大小一般不能大于系统 CPU 的个数
查看系统 cpu 的信息
cat /proc/cpuinfo 中的信息
其中 cpu cores 即为 cpu 的核数
也可以用 cat /proc/cpuinfo |grep “cores”|uniq 直接查看
cat /proc/cpuinfo |grep "cores"|uniq | |
cpu cores : 2 |
r 表示运行和等待 cpu 时间片的进程数,这个值如果长期大于 cpu 的个数,则需要增加系统 cpu
b 表示等待资源的进程数
us 列显示了用户进程消耗 CPU 时间百分比,us 比较高的时候,说明用户进程消耗 cpu 的时间多,如果长期大于 50%,就需要优化程序和算法
sy 列显示了内核进程消耗的 cpu 时间百分比,sy 值较高的时候,说明内核消耗的 cpu 资源很多
根据经验,us+sy 的参考值为 80%,如果 us+sy 大于 80% 说明可能存在 CPU 资源不足。
sar 命令会增加系统开销 但是影响不大
安装 sar 命令:
yum install sysstat
u 显示系统所有 cpu 在采样时间内的负载状态 ) 图片 %user:用户进程消耗 cpu 的时间百分比:
sar -u 3 5
%nice:运行正常进程所消耗 cpu 的百分比
%system:系统消耗 cpu 时间百分比
%iowait:IO 等待所占用 cpu 时间百分比
%steal:内存在相对紧张的环境下 pagein 强制对不同页面进行的 steal 操作
%idle:cpu 处在空闲时间的百分比
free -m
查看以 M 为单位的内存使用情况
一般有这样一个经验公式:
应用程序可用内存 / 系统物理内存 >70% 时,表示系统内存资源非常充足,不影响系统性能。
应用程序可用内存 / 系统物理内存 <20% 时,表示系统内存资源紧缺,需要增加系统内存。
20%< 应用程序可用内存 / 系统物理内存 <70% 时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能。
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,则表示系统内存不足,需要增加内存
iostat -d 2 10
Blk_reads/s 每秒读取的数据块数
Blk_wrtn/s 每秒写入的数据块数
Blk_read 读取的所有块数
Blk_wrtn 写入的所有块数
这几个值没有标准 如果长期都很大 肯定是不正常的
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