作者:赵高欣 . Robbin http://www.drupal001.com/2012/07/linux-server-monitor/

在网站性能优化中,我们经常要检查服务器的各种指标,以便快速找到害群之马。大多情况下,我们会使用cacti、nagois或者zabbix之类的监控软件,但是这类软件安装起来比较麻烦,在一个小型服务器,我们想尽快找到问题所在,还是要使用Linux提供的一些命令。

1. 内存检查:free -m
free-m.jpg

注意,重点看的是第二行,-/+ buffers/cache行,第一个数字是实际消耗的内存,第二个是实际空闲的内存。

2. 系统进程监控 top
Top命令注意看输出的第二、第三行。第二行(Tasks)表示系统运行的进程数,这个数值一般不能太大,比如超过300、甚至400-500,这个比较容易理解,我们一般开启的服务、进程外加系统进程都不会太多,太多肯定有问题。第三行表示CPU的使用情况。
Top可以按 M按内存使用排序,P按CPU使用情况排序。

top-linux.jpg

3. 进程监控加强版 htop
htop提供了比top更强大的功能,推荐安装。能排序、查找、显示进程树等功能。
htop还有一个强大的功能的,就是strace,按s可以直接对选中进程进行strace。
htop.jpg

strace效果图如下:

strace.jpg

 

4. 找出害群之马 (ps命令)
如果通过top、htop、free以及iostat、vmstat(后面会讲)对系统分析后,我们接下来就要找系统的问题进程了。在top、htop中我们一般可以直观的看出到底是那个进程出问题了,不过有时这两个命令不能完全确定,我们还要使用ps确认系统中的最差进程。

自定义输出格式 -o 可以定义我们想要显示的列,列名基本和输出的表头一样,只是要小写,如下:
ps -A -o %mem, %cpu

找到实例运行过多的进程(服务器监测特别有用)
uniqc.jpg

可以看到httpd进程比较多,(uniq可能是只要各行的,不再计重复行,重新数),因此我们可以再加个sort (k表示按那一列排序),如下:

ps-sort.jpg

这样httpd进程可以看到18个,有助于我们找到异常的服务器行为。如果要区分用户,可以加一个output,如:

ps-A-o user,comm|sort-k2|uniq-c|sort-k1-rn

找到内存使用最多的进程

ps-eo rss,pmem,pcpu,vsize,args |sort-k1-r-n

top-rss.jpg

同理,找到CPU消耗最多的进程

ps-eo rss,pmem,pcpu,vsize,args |sort-k2-r-n

(其实主要的是理解sort -k和ps -o就可以)

4. IO监控iostat
iostat也是系统监控常用的命令,可以看到各个磁盘的IO情况,其他参数不再赘述,主要说明一个参数。iostat -x会输出 %util列。
定义:
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
一般情况下,%util应该越小越好,10%以下正常,30%IO比较繁忙。50%以上一般是有问题的。可以配合%idle,该值过小系统肯定是有问题的。
iostat.jpg

5. vmstat 系统监控
vmstat和IO差不过,不过重点是监控cpu、内存等系统资源。
对内存监控,我们比较关心swpd、free、si、so。一般系统不繁忙的状态下,我们看到swpd,so的值不会持续很高,经常为0。如果swpd过高,那么就是系统内存经常不够用。
对CPU监控,我们可以查看r(运行进程数)、us、sy、id(空闲CPU),如果r的数字大于系统CPU个数,则面临CPU不够用的危险,通过id(CPU空闲比例)分析,如果过小,则可以判断是CPU不足。
其他参数不再赘述。
vmstat.jpg

6. 网络流量监控 iftop
最后我们谈一下网络流量的监控,网络流量对于系统来说也是很重要的。请安装iftop来监控网络浏览资源。由于界面缩放比较困难,从网上找了一张图参考:
iftop-interface.jpg

中间的这两个左右箭头,表示的是流量的方向。
TX:发送流量
RX:接收流量
TOTAL:总流量
Cumm:运行iftop到目前时间的总流量
peak:流量峰值
rates:分别表示过去 2s 10s 40s 的平均流量

其中有几个命令比较有用,按t切换显示格式为2行/1行/只显示发送流量/只显示接收流量;按T切换是否显示每个连接的总流量;按p切换是否显示端口信息。其他的命令可以按h进入帮助查看。

Linux的基本监控到此为止,其他的相关方面我们后续再讨论。

追加一个命令,nethogs, iftop是端口和主机查询流量,但是当需要查询具体进程的网络流量的时候,iftop就有些力不从心了。nethogs官方说nethogs = nettop,也就是找出按流量的占用列出所有进程,可以帮助我们找到使用带宽最多的进程。
请参考 http://wowubuntu.com/nethogs.html