如何60秒内分析Linux性能

当你登陆一台 linux 服务器之后,因为一个问题要做性能分析时:你会在第 1 分钟内做哪些检测呢?
在 Netflix,我们有很多 EC2 的 Linux 机器,并且也需要很多性能分析工具来监控和检查它们的性能 。包括有针对云上的监控工具 Atlas,和按需要进行实例分析的 Vector 。虽然这些工具能帮助我们解决大多数问题,但是我们有时候还需要登陆机器实例去运行一些标准的 Linux 性能分析工具 。
最开始的 60 秒:总结在这篇文章中,Netflix 的性能分析工程师团队会给你展示在最开始的 60 秒内,如何在命令行模式下使用已有的 Linux 标准工具进行性能优化检测 。在 60 秒内只需要通过运行下面的 10 个命令就可以对系统资源使用和运行进程有一个很高程度的了解 。寻找错误信息和饱和度指标,并且可以显示为请求队列的长度,或者等待时长 。因为它们都很容易理解,然后就是资源利用率 。饱和度是指一个资源已经超过了它自己的负荷能力 。
uptimedmesg | tailvmstat 1mpstat -P ALL 1pidstat 1IOStat -xz 1free -msar -n DEV 1sar -n TCP,ETCP 1top有些命令需要安装 sysstat 工具包 。这些命令展示的指标会帮助你完成一些 USE(Utilization,Saturation,Errors) 方法:定位性能瓶颈的方法论 。包括了检查使用率(Utilization),饱和度(Saturation),所有资源(比如 CPU,内存,磁盘等)的错误指标(Errors) 。同样也要关注你什么时候检查和排除一个资源问题,因为通过排除可以缩小分析范围,同时也指导了任何后续的检查 。
下面的章节将会通过一个生产系统中的例子来介绍这些命令 。要了解更多这些工具的信息,也可以查看它们的帮助手册 。
1. uptime$ uptime23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02这是一个快速展示系统平均负载的方法,这也指出了等待运行进程的数量 。在 Linux 系统中,这些数字包括等待 CPU 运行的进程数,也包括了被不可中断 I/O(通常是磁盘 I/O)阻塞的进程 。这给出了资源负载的很直接的展示,可以在没有其它工具的帮助下更好的理解这些数据 。它是唯一快捷的查看系统负载的方式 。
这三个数字是以递减的方式统计了过去 1 分钟,5 分钟和 15 分钟常数的平均数 。这三个数字给我们直观展示了随着时间的变化系统负载如何变化 。例如,如果你被叫去查看一个有问题的服务器,并且 1 分钟的所代表的值比 15 分钟的值低很多,那么你可能由于太迟登陆机器而错过了问题发生的时间点 。
在上面的例子中,平均负载显示是在不断增加的,1 分钟的值是 30,相比 15 分钟的值 19 来说是增加了 。这个数字这么大就意味着有事情发生了:可能是 CPU 需求;vmstat 或者 mpstat 会帮助确认到底是什么,这些命令会在本系列的第 3 和第 4 个命令中介绍 。
2. dmesg | tail$ dmesg | tail[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0[...][1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request.  Check SNMP counters.这里展示的是最近 10 条系统消息日志,如果系统消息没有就不会展示 。主要是看由于性能问题导致的错误 。上面这个例子中包含了杀死 OOM 问题的进程,丢弃 TCP 请求的问题 。
所以要记得使用这个命令,dmesg 命令值得一用 。
3. vmstat 1$ vmstat 1procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu----- r  b swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st34  0    0 200889792  73708 591828    0    0     0     5    6   10 96  1  3  0  032  0    0 200889920  73708 591860    0    0     0   592 13284 4282 98  1  1  0  032  0    0 200890112  73708 591860    0    0     0     0 9501 2154 99  1  0  0  032  0    0 200889568  73712 591856    0    0     0    48 11900 2459 99  0  0  0  032  0    0 200890208  73712 591860    0    0     0     0 15898 4840 98  1  1  0  0^C


推荐阅读