Linux服务器性能评估与优化是一项长期的工作,需要随时关注网站服务器的运行状态,及时作出相应的调整,以下为Linux服务器性能评估及优化方案。
1)Linux系统整体性能评估。
uptime命令主要用于查看当前服务器整体性能,例如CPU、负载、内存等值的总览,以下为uptime命令应用案例及详解。
load average负载有3个值,分别表示最近1min、5min、15min系统的负载,3个值的大小一般不能大于系统逻辑CPU核数的2倍,例如Linux操作系统有4个逻辑CPU,如果load average的3个值长期大于8时,说明CPU很繁忙,负载很高,可能会影响系统性能,但是偶尔大于8时,可以不用担心,一般不会影响系统性能。
如果load average的输出值小于CPU逻辑个数的2倍,则表示CPU还有空闲的时间片,例如案例中CPU负载为6.22,表示CPU或者服务器是比较空闲的。基于此参数不能完全确认服务器的性能瓶颈,需要借助其他工具进一步判断。
(2)CPU性能评估。
利用vmstat命令监控系统CPU,该命令可以显示关于系统各种资源之间相关性能的简要信息,主要用它来查看CPU负载及队列情况。如图所示,为vmstat命令在某个系统的输出结果。
vm stat工具查看系统CPU资源
vm stat输出结果详解如下:
•□ r:该列表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU。
•□ b:该列表示在等待资源的进程数,比如正在等待I/O或者内存交换等。
•□ us:该列显示了用户进程消耗的CPU时间百分比,us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期大于50%,就需要考虑优化程序或算法。
•□ sy:该列显示了内核进程消耗的CPU时间百分比,sy的值较高时,说明内核消耗的CPU资源很多。
•□ us+sy:参考值为80%,如果us+sy大于80%说明可能存在CPU资源不足。
强大的sar命令
利用sar命令监控系统CPU,sar功能很强大,可以对系统的每个方面进行单独的统计,但是使用sar命令会增加系统开销,不过这些开销是可以评估的,对系统的统计结果不会有很大影响。如图所示,为sar命令对某个系统的CPU统计输出。
sar输出结果详解如下:
•□ %user:该列显示了用户进程消耗的CPU时间百分比。
•□ %nice:该列显示了运行正常进程所消耗的CPU时间百分比。
•□ %system:该列显示了系统进程消耗的CPU时间百分比。
•□ %iowait:该列显示了I/O等待所占用的CPU时间百分比。
•□ %idle:该列显示了CPU处在空闲状态的时间百分比。
•□ %steal:列显示了在内存相对紧张的环境下pagein强制对不同的页面进行的steal操作。
但需要注意centos自身不带sar命令。所以要自己安装。
安装sar
#yum -y install sysstat #或者 yum install sysstat (自己按y)
#whereis sar #查看sar的路径
#whereis iostat #查看iostat的路径
如果都有的话即安装完成。
/每隔一秒往屏幕输出一次cpu使用信息,共输出5次:
#sar 1 5 #或者 sar -u 1 5
//每2秒采样1次,共10次,把CPU使用数据保存到/opt/cpu.log文件中。
#sar 2 10 > /opt/cpu.log
//当前所有核心的数据显示。#sar -P ALL 1 1
//每隔1秒记录CPU的使用情况,直到11点02分,数据将保存到/opt/cpu.log文件中。(-e 参数表示结束时间,注意时间格式:必须为hh:mm:ss格式)
#sar 1 -u -e 11:02:00 > /opt/cpu.log
//每隔1秒记录内存使用情况,直到11点02分,数据将保存到/opt/memory.log文件中。
#sar 1 -r -e 11:02:00 > /opt/memory.log
//每隔1秒记录网络使用情况,直到11点02分,数据将保存到/opt/network.log文件中。
#sar 1 0 -n DEV -e 11:02:00 > /opt/network.log
附注:
一般格式:
sar [ options… ] [ [ ] ]
常用选项:
-A :包括绝大多数选项。
-b :报告I/O和传输速率统计。
-B :报告分页统计。
-c :报告进程创建活动。
-d :报告每个活动的块设备。(指磁盘)
-e [ hh:mm:ss ] :设置sar命令执行的结束时间,时间为24小时制格式。
-I { irq | SUM | ALL | XALL } :报告给定中断的统计。
-n { DEV | EDEV | NFS | NFSD | SOCK | ALL } :报告网络统计。
-P { cpu | ALL } :报告每个处理器的统计信息,可以统计指定或全部处理器。
-q :报告队列长度和平均负载。
-r :报告内存和交换空间的利用情况统计。
-R :报告内存统计。
-u :报告CPU利用率。
interval :两次输出之间的间隔时间。
count :按照这个时间间隔统计的次数。
(3)内存性能评估。
利用free指令监控内存,free是监控Linux内存使用状况最常用的指令,如图所示为服务器内存使用情况。
一般而言,服务器内存可以通过以下方法判断是否空余。
•□ 应用程序可用内存/系统物理内存大于70%时,表示系统内存资源非常充足,不影响系统性能;
•□ 应用程序可用内存/系统物理内存小于20%时,表示系统内存资源紧缺,需要增加系统内存;
•□ 20%<应用程序可用内存/系统物理内存小于70%时,表示系统内存资源基本能满足应用需求,暂时不影响系统性能
(4)磁盘I/O性能评估。
利用iostat评估磁盘性能,监控磁盘I/O读写及带宽,如图所示
iostat输出结果详解如下:
•□ Blk_read/s:表示每秒读取的数据块数。
•□ Blk_wrtn/s:表示每秒写入的数据块数。
•□ Blk_read:表示读取的所有块数。
•□ Blk_wrtn:表示写入的所有块数。
可以通过Blk_read/s和Blk_wrtn/s的值对磁盘的读写性能有基本的了解,如果Blk_wrtn/s值很大,表示磁盘的写操作很频繁,可以考虑优化磁盘或者优化程序,如果Blk_read/s值很大,表示磁盘直接读取操作很多,可以将读取的数据放入内存中进行操作。
利用sar评估磁盘性能,通过sar-d组合,可以对系统的磁盘I/O做基本的统计,如图所示。
sar输出结果详解如下:
•□ await:表示平均每次设备I/O操作的等待时间(以ms为单位)。
•□ svctm:表示平均每次设备I/O操作的服务时间(以ms为单位)。
•□ %util表示1s中有百分之几的时间用于I/O操作。
磁盘I/O性能,评判标准为正常情况下svctm应该是小于await值的,而svctm的大小和磁盘性能有关CPU、内存的负荷也会对svctm值造成影响,过多的请求也会间接地导致svctm值的增加。
await值的大小一般取决于svctm的值和I/O队列长度以及I/O请求模式,如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘来解决问题。
%util项的值也是衡量磁盘I/O的一个重要指标,如果%util接近100%,表示磁盘产生的I/O请求太多,I/O系统已经满负荷的在工作,该磁盘可能存在瓶颈。长期下去,势必影响系统的性能,可以通过优化程序或者通过更换更高、更快的磁盘来解决此问题。
(5)网络性能评估。
•□ 通过ping命令检测网络的连通性;
•□ 通过netstat -i组合检测网络接口状况;
•□ 通过netstat -r组合检测系统的路由表信息;
•□ 通过sar -n组合显示系统的网络运行状态。
通过iftop -i eth0可以查看网卡流量,详细参数如下,详情如图所示。
□ <=:客户端流入的流量。
•□ =>:服务器端流出的流量。
•□ TX:发送流量。
•□ RX:接收流量。
•□ TOTAL:总流量。
•□ cumm:运行iftop到目前时间的总流量。
•□ peak:流量峰值。
•□ rates:分别表示过去2s、10s、40s的平均流量。
但iftop命令centos上默认是没有的,需要自己安装,iftop安装过程如下
1、安装依赖包
yum install -y gcc flex byacc libpcap ncurses ncurses-devel libpcap-devel tcpdump
2、安装iftop
下载源码并编译安装
cd /usr/local/src
wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz
tar xvf iftop-0.17.tar.gz
cd iftop-0.17
./configure --prefix=/usr/local/iftop
make
make install
chmod 700 /usr/local/iftop/sbin/iftop #修改IFTOP权限
使用方法
/usr/local/iftop/sbin/iftop
/usr/local/iftop/sbin/iftop -i eth0 -n 就可以看到eth0网卡的流量状况
如果安装iftop时没有自定义路径,那么直接运行iftop就可以查看流量统计了,例如:iftop或者iftop -i eth0 -n