文档章节

10条命令,一分钟分析Linux性能问题

fzxu_05
 fzxu_05
发布于 2015/12/11 11:55
字数 2095
阅读 449
收藏 23

当你登录到一台存在性能问题的Linux服务器上时,在头一分钟,你会检查什么?


我们看看Netflix的性能工程师是怎么做的。


Netflix大量使用EC2 Linux服务器,很多时候是用一些较为高层的工具做云或实例层次的分析。不过有时仍然需要登录到某个实例上,运行一些标准的Linux性能工具。


在最开始的一分钟内,可以先利用手头的标准Linux工具大致了解性能状况。借助如下10条命令(有些命令需要安装sysstat包),了解系统资源使用状况和正在运行的进程。先检查错误(errors)和饱和度(saturation),再检查资源利用率(resource utilization)。饱和度指的是负载已经超过处理能力,像请求队列的长度,等待时间等。


uptime

dmesg | tail

vmstat 1

mpstat -P ALL 1

pidstat 1

iostat -xz 1

free -m

sar -n DEV 1

sar -n TCP,ETCP 1

top


这里要提一下定位性能瓶颈的USE方法。在Brendan Gregg的《System Performance: Enterprise and the Cloud》(中译本:《性能之巅:洞悉系统、企业与云计算》)一书中有具体的描述。


如果手头有这本书的中译本,可以看一下36页:


USE方法(utilization、utilization、errors)应用于性能研究,用来识别系统瓶颈。一言以蔽之,就是:


对于所有的资源,查看它的使用率、饱和度和错误。


这些术语定义如下。


  • 资源:所有服务器物理元器件(CPU、总线……)。某些软件资源也能算在内,提供有用的指标。

  • 使用率:在规定的时间间隔内,资源用于服务工作的时间百分比。虽然资源繁忙,但是资源还有能力接受更多的工作,不能接受更多工作的程度被视为饱和度。

  • 饱和度:资源不能再服务更多额外工作的程度,通常有等待队列。

  • 错误:错误事件的个数。


……


USE方法会将分析引导到一定数量的关键指标上,这样可以尽快地核实所有的系统资源。在此之后,如果还没有找到问题,那么可以考虑采用其他的方法。


下面具体看一下这10条命令。


  1. uptime




快速查看平均负载(任务对CPU资源的需求)。输出中的“load average:”后面的三个数字,是系统在1分钟、5分钟和15分钟内的平均负载。表示负载随时间的变化情况。


它给出的只是一个较为高层的情况,往往需要借助其他工具进一步确认性能问题,有时候需要通过其他一些指标来了解CPU负载,例如vmstat或mpstat。


2. dmesg | tail




查看最后10条系统消息。查找可能会引发性能问题的错误。千万不要漏掉这一步。


3. vmstat 1




统计虚拟内存信息。参数1指的是打印1秒内的统计信息。


要检查的列:


  • r:运行队列的长度(这个参数的解释,建议参考《性能之巅》一书)。可以更好地确定CPU的饱和度。“r”值大于CPU数则为饱和。

  • free:以kb为单位的空闲内存。如果这个值很大,说明有足够的空闲内存。下面将介绍的第7条命令——“free -m”,可以更好地解释空闲内存的状态。

  • si, so:换入的内存和换出的内存。如果它们不为0,说明内存已经耗尽。

  • us, sy, id, wa, st:CPU时间的不同组成部分,是所有CPU的平均数。分别表示用户态时间、系统态时间(内核)、空闲、等待I/O以及窃取时间(stolen time,虚拟化环境下,CPU在其他租户上的开销)。


将用户态时间和系统态时间相加,可以判断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




这是了解块设备的一个极佳工具,能看到实际负载和性能信息。


  • r/s, w/s, rkB/s, wkB/s:分别表示每秒发给磁盘设备的读请求数,每秒发给磁盘设备的写请求数,每秒从磁盘设备读取的KB数,每秒向磁盘设备写入的KB数。可以使用它们表示负载特性。性能问题可能就是由过多的负载造成的。

  • await:平均I/O响应时间,单位为毫秒。包括排队时间和服务时间。如果它大于预期的平均时间,可能是设备已经饱和,也可能是设备存在问题。

  • avgqu-sz:提交到设备的平均请求数。如果大于1,设备可能已经饱和。

  • %util:设备使用率。设备忙于处理请求的百分比。如果大于60%,通常会导致较差的性能(可以在await中看出来),不过也与具体的设备有关。如果接近100%,通常意味着设备已经饱和。


如果存储设备是后面有多块磁盘支撑的逻辑磁盘,即使设备使用率是100%,后端磁盘也可能远没有饱和,而是还能处理更多工作。


7. free -m




主要看最右边的两列:


  • buffers:用于块设备I/O的缓冲区高速缓存的大小。

  • cached:文件系统使用的页缓存大小。


我们只需要检查这两个值,如果它们接近0,则会导致更高的磁盘I/O(可以使用iostat确认),性能更糟。图中的例子,这个状况看上去还不错。


8. sar -n DEV 1




使用该工具检查网络接口的吞吐量,以rxkB/s和txkB/s为手段测量负载


9. sar -n TCP,ETCP 1




这是一些关键TCP指标的总结。其中包括:


  • active/s:每秒本地发起的TCP连接数(比如通过connect())。

  • passive/s:每秒远端发起的TCP连接数(比如通过accept())。

  • retrans/s:每秒TCP重传数。


active和passive连接数通常用于粗略地测量服务器负载。方便起见,可以把active看作向外的连接,把passive看作向内的连接;不过也有不严格之处,比如考虑从localhost到localhost的连接。


重传数是网络或服务器问题的一个信号:可能是网络不可靠;也可能是服务器过载和丢包。像图中的例子,每秒只有一个新的TCP连接。


10. top




top命令包含很多前面检查过的指标。可以用个命令来检查是不是有指标和之前命令的输出差距很大。


top命令有个缺点,很难看出某个指标随时间的变化模式,这种情况下用像vmstat和pidstat这样的命令可能更清楚,它们能提供滚动输出。间歇性问题的一些迹象,如果不能足够快地暂停输出(Ctrl-S暂停,Ctrl-Q继续),可能会错过。


后续分析


可以借助更多命令继续深入挖掘。重点推荐Brendan Gregg的《性能之巅:洞悉系统、企业与云计算》)一书。

本文转载自:

fzxu_05
粉丝 43
博文 165
码字总数 84201
作品 0
朝阳
程序员
私信 提问
性能不好怎么办?对着清单撸一遍[转]

Brendan Gregg是Netflix的资深性能架构师,著名性能调优专家。著有《性能之巅:洞悉系统、企业与云计算》)一书,可以说是性能调优领域的集大成之作。 前不久,Brendan Gregg在SREcon16上分享...

sunsky303
2018/01/22
0
0
性能不好怎么办?对着清单撸一遍

性能不好怎么办?对着清单撸一遍 2016-07-21 开发资讯Brendan Gregg是Netflix的资深性能架构师,著名性能调优专家。著有《性能之巅:洞悉系统、企业与云计算》)一书,可以说是性能调优领域的...

Yomut
2016/07/27
53
0
60,000毫秒内对Linux的性能诊断

60,000 毫秒内对 Linux 的性能诊断 当你为了解决一个性能问题登录到一台 Linux 服务器:在第一分钟你应该检查些什么? 在 Netflix,我们有一个巨大的 EC2 Linux 云,以及大量的性能分析工具来...

菲戈
2016/01/14
6.5K
10
10条命令 一分钟分析Linux性能问题

当你登录到一台存在性能问题的Linux服务器上时,在头一分钟,你会检查什么? 我们看看Netflix的性能工程师是怎么做的。 Netflix大量使用EC2 Linux服务器,很多时候是用一些较为高层的工具做云...

Yomut
2016/08/03
52
0
用十条命令在一分钟内检查 Linux 服务器性能

如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行...

oschina
2015/12/19
21.1K
25

没有更多内容

加载失败,请刷新页面

加载更多

一、docker 入坑(win10和Ubuntu 安装)

前言 终究还是绕不过去了,要学的知识真的是太多了,好在我们还有时间,docker 之前只闻其声,不曾真正的接触过,现在docker 越来越火,很多公司也都开始使用了。所以对于我们程序员而言,又...

quellanan2
25分钟前
4
0
AutoCompleteTextView

小技巧按菜单键 当菜单打开之前会调用onMenuOpened(int featereId,Menu menu),可以重写这个方法,弹出对话框或者Popmenu 再布局中添加控件AutoCompleteTextView. <AutoCompleteTextVie...

逆天游云
29分钟前
4
0
谷歌软件商店:推出5美元会员 可用数百个软件

腾讯科技讯,谷歌和苹果是全球两大智能手机操作系统的运营者,两家公司旗下分别拥有占据行业垄断地位的谷歌软件商店和苹果软件商店。据外媒最新消息,手机软件商店的商业模式正在发生一些变化...

linuxCool
51分钟前
3
0
RocketMQ 多副本前置篇:初探raft协议

Raft协议是分布式领域解决一致性的又一著名协议,主要包含Leader选举、日志复制两个部分。 温馨提示: 本文根据raft官方给出的raft动画进行学习,其动画展示地址:http://thesecretlivesofda...

中间件兴趣圈
51分钟前
3
0
elasticsearch 6.8.0 添加认证

1. 修改elasticsearch-6.8.0/config/elasticsearch.yml 最后添加一行:xpack.security.enabled: true 2. 初始化用户和密码 ./bin/elasticsearch-setup-passwords interactive 我这里初始化为......

coord
53分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部