当你登录到一台存在性能问题的Linux服务器上时,在头一分钟,你会检查什么? 我们看看Netflix的性能工程师是怎么做的。 Netflix大量使用EC2 Linux服务器,很多时候是用一些较为高层的工具做云或实例层次的分析。不过有时仍然需要登录到某个实例上,运行一些标准的Linux性能工具。 在最开始的一分钟内,可以先利用手头的标准Linux工具大致了解性能状况。借助如下10条命令(有些命令需要安装sysstat包),了解系统资源使用状况和正在运行的进程。先检查错误(errors)和饱和度(saturation),再检查资源利用率(resource utilization)。饱和度指的是负载已经超过处理能力,像请求队列的长度,等待时间等。
这里要提一下定位性能瓶颈的USE方法。在Brendan Gregg的《System Performance: Enterprise and the Cloud》(中译本:《性能之巅:洞悉系统、企业与云计算》)一书中有具体的描述。 如果手头有这本书的中译本,可以看一下36页:
下面具体看一下这10条命令。
快速查看平均负载(任务对CPU资源的需求)。输出中的“load average:”后面的三个数字,是系统在1分钟、5分钟和15分钟内的平均负载。表示负载随时间的变化情况。 它给出的只是一个较为高层的情况,往往需要借助其他工具进一步确认性能问题,有时候需要通过其他一些指标来了解CPU负载,例如vmstat或mpstat。 2. dmesg | tail 查看最后10条系统消息。查找可能会引发性能问题的错误。千万不要漏掉这一步。 3. vmstat 1 统计虚拟内存信息。参数1指的是打印1秒内的统计信息。 要检查的列:
将用户态时间和系统态时间相加,可以判断CPU是否忙碌。如果一直有等待I/O,表明存在磁盘瓶颈。因为任务阻塞等待磁盘I/O,此时CPU是空闲的。可以将等待I/O看作另一种形式的CPU空闲。 I/O处理一定会消耗系统态时间。如果系统时间平均占比很高,比如说超过20%,或许可以深入研究一下:可能是内核处理I/O的效率不高。 4. mpstat -P ALL 1 打印每个CPU的状况。可以检查各CPU的负载是否均衡。比如,如果一个CPU很热,可能是单线程应用造成的。 5. pidstat 1 pidstat按进程打印CPU的使用情况。循环输出活动进程的信息。可用于观察模式随时间的变化情况。用户也可以把观察到的信息记录下来,以供分析研究。 像图中的例子,可以看到有2个Java进程消耗了大部分CPU时间。“%CPU”这一列是所有CPU的整体情况,“1591%”这个值表明这2个Java进程几乎占用了16个CPU。 6. iostat -xz 1 这是了解块设备的一个极佳工具,能看到实际负载和性能信息。
如果存储设备是后面有多块磁盘支撑的逻辑磁盘,即使设备使用率是100%,后端磁盘也可能远没有饱和,而是还能处理更多工作。 7. free -m 主要看最右边的两列:
我们只需要检查这两个值,如果它们接近0,则会导致更高的磁盘I/O(可以使用iostat确认),性能更糟。图中的例子,这个状况看上去还不错。 8. sar -n DEV 1 使用该工具检查网络接口的吞吐量,以rxkB/s和txkB/s为手段测量负载。 9. sar -n TCP,ETCP 1 这是一些关键TCP指标的总结。其中包括:
active和passive连接数通常用于粗略地测量服务器负载。方便起见,可以把active看作向外的连接,把passive看作向内的连接;不过也有不严格之处,比如考虑从localhost到localhost的连接。 重传数是网络或服务器问题的一个信号:可能是网络不可靠;也可能是服务器过载和丢包。像图中的例子,每秒只有一个新的TCP连接。 10. top top命令包含很多前面检查过的指标。可以用个命令来检查是不是有指标和之前命令的输出差距很大。 top命令有个缺点,很难看出某个指标随时间的变化模式,这种情况下用像vmstat和pidstat这样的命令可能更清楚,它们能提供滚动输出。间歇性问题的一些迹象,如果不能足够快地暂停输出(Ctrl-S暂停,Ctrl-Q继续),可能会错过。 后续分析 可以借助更多命令继续深入挖掘。重点推荐Brendan Gregg的《性能之巅:洞悉系统、企业与云计算》)一书。 本文根据Netflix的技术博客编译整理,结合自己读书的一些心得写就。更多细节,可以点击阅读原文,查看相关博客,或者阅读《性能之巅》一书。 |
|
来自: 昵称28748685 > 《待分类》