很多服务端开发的同事和新手运维都来和我讨论过如何诊断linux系统的性能瓶颈,今天统一说明。
查找瓶颈有一个基本的流程,不外乎借助系统工具来给系统做一个全面的检查,最后根据结果来确定问题出在哪方面。
基本流程:
1、使用top查看系统的总体运行情况;
Top的输出结果那些是很有用的信息呢?我已经全部用红线框起来了,具体如下:
:load average 这行表示系统最近1分钟,5分钟,15分钟的平均负载。那么怎样的负载才是可以接受的呢?有个简单的办法,在top命令中,再按‘1’键,会列出系统使用的cpu的数量,以负载的值不要超过cpu数量最合适。
:Tasks 这行反应的是当前系统的任务状态,主要看running和zombie进程的数量,一个健康的系统zombie(僵死进程)的数量一定是为0的,否则肯定系统已经出不小的问题了。
:Cpu(s)这行反应当前cpu的工作状态,us表示用户进程占整个cpu运行时间的百分比,sy表示系统进程的占用时间百分比;id表示cpu当前的空闲时间百分比,wa表示等待时间百分比,这几个概念是最重要的。下面有个实际的列子会再详细分析。
:Mem这行反应当前系统内存使用状况
:Swap 这行就是系统交换分区使用状态,一个性能优越的系统,交换分区使用量一定是为0的,交换分区只是一种应对在系统内存不足时的一种紧急机制,用到交换分区,说明可以考虑增加内存或者裁减现有内存数据大小了。毕竟交换分区就是硬盘,速度和内存差了太多。
2、看硬盘容量,硬盘容量如果爆满的话,那么什么诡异的情况都可能出现,这个已经非常危急了,具体的命令:df;
3、看带宽;这里如果细分的话就复杂了,比如是否有网络攻击,封包数量和特征是否异常等,zabbix是其中的佼佼者,这里我们只要看目前的带宽有没有接近网卡的上限,命令: dstat -n;
这台机器是千兆网卡,现在最大才跑到2.7mbyte/s *8 ~ 20mbit/s,远远没到,带宽这个很少有机会用到网卡峰值的80%左右,但是在业务繁忙的时候,这个也是非常重要的监控对象。
4、一个具体的实例。昨天一个新同学说应用很卡,延迟较大。内存还有很多不使用,就如上面top图显示那样,还有接近3G可以使用的内存。我等录上去看了看,使用vmstat:
可以看到过段时间就会发现有些进程处于阻塞状态,原因内是因为cpu处于等待的时间变长了,cpu是空闲的很,等着进程进来运算,而进程迟迟没有到达,这个肯定就是数据在交换分区了,存取太慢导致的卡和延迟,后来关闭了交换分区,并且整理内存之后,一切就正常了。
一个初步的系统性能诊断按照基本流程就几步,只是开始接触linux的同学不知道按照一个流程来操作。所以需要多看多动手。当然现在监控软件很多,可以监控的性能指标也很多。