Linux 系统性能分析工具图解读(转:http://oilbeater.com/linux/2014/09/08/linux-performance-tools.html)php
最近看了 Brendan Gregg 大神著名的 Linux Performance Observability Tools,这么好的资料很差好学习一下实在是浪费了,又找到了大神的 ppt 和 演讲(需爬墙),因而把相关的命令和概念连预习,学习,复习走了一遍。html
图片加载失败,点击重试linux
首先学习的是大神提出的 Basic Tool 有以下几个:ios
uptimegit
top (htop)github
mpstat算法
iostatshell
vmstat数据库
free缓存
ping
nicstat
dstat
uptime 比较重要的能显示当前系统的负载状态,可是这个负载到底是什么意思呢?查了一些资料负载指的是当前可运行的程序加上正在运行的程序再加上等待 IO 的程序,好比如今运行着一个,一个等待运行,还有一个等待 IO 那么负载就是3. uptime 后面三个数分别是 1min, 5min 和 15min 的负载平均值,因为内核用了一个指数平滑的平均算法,这个值不能直接反应当前等待的进程数。此外这个值没对多核进行 normalization 因此单核状况下当负载是 1 的时候说明 cpu 满载了,可是对于 4 核 cpu 刚到满负载的 25%。 通常状况下这个值越大就说明等待 CPU 的进程越多,若是大于核数就说明有进程在等待 CPU,须要看一下程序的问题或者考虑加机器了。另外即便负载过载了也不必定说明 CPU 的利用率高,由于极可能是大量的请求 IO 的进程在等待,像一些数据库服务,因此看完负载后还要针对应用场景综合考量。
top 实际上是一个至关全面的分析了仍是事实的,其余不少命令能拿到的数据,top 一个命令就能够拿到。可是他的一个问题就是自己的 overhead 比较大,若是系统负载自己就很大那么可能就会卡住了。此外 top 可能会忽视掉那些生命周期很短的程序。top 的 manual 里详细介绍了每一个指标的意义,翻看一下仍是颇有收获的。其中比较要关注的有 wa(io wait),查看是否是你的 IO 是瓶颈,还有 st (time stolen from this vm by the hypervisor) 这个指标会出如今虚拟机里的系统中,表示的是你的虚拟机在等待真实物理机的 CPU 资源的时间。若是这个值很高的话说明你的服务提供商的 CPU 资源有限你没抢过别人,颇有可能使服务商超卖了。碰到这种状况要么打客服投诉,或者多掏点银子找个靠谱的运营商吧。
htop 是 top 的改进版,带着各类颜色表示和百分比进度条,以及更丰富的功能,小伙伴们能够尝试一下。
mpstat 能够显示出每一个 CPU 核心的工做状况,其实也能够在 top 里输入 1 看到。经过这个命令咱们能够观察是否是存在负载不均的现象,某个核心跑满了,另外一个还在闲着,形成总体性能的降低。
加上 -x 参数后能够看到几乎所有的 io 指标,包括 tps, 请求 queue 的平均长度,平均处理时间, 磁盘带宽利用率等等。每一个指标 manual 中都有详细的解释。
vmstat 是一个展现内存总体使用状况的命令,其中要关注一下 swpd 和 swap 的 in/out 。若是这一部分的数值过大,会频繁的 IO 形成性能降低,要么看看是否是程序内存泄露了,要么就加内存吧。 memory 里的 buffer 指的是写磁盘缓冲区, 而 cache 能够当成是读文件的缓冲区。free也是相似的功能,不过只展现内存部分的内容。
这个相对来讲简单一些,主要反映了主机间的延迟和连通性,不少时候也只能告诉咱们这些了。能够尝试一下 hping 有着指定端口,高级 tracerout 的功能。
一个和 iostat 相似,不过是针对网卡的命令。
一个综合了cpu、 memory、 IO、 network 的工具,能够事实展现当前的系统资源利用状况。
以上就是最基础的命令了,高级一些的命令有:
sar
netstat
pidstat
strace
tcpdump
blktrace
iotop
slabtop
sysctl
/proc
图片加载失败,点击重试
第一篇在这里
第一篇讲了一些最基础的命令了,接下来在研究研究高级的命令:
sar
netstat
pidstat
strace
tcpdump
blktrace
iotop
slabtop
sysctl
/proc
sar 是 System Activity Reporter 的意思,这是一个强大到发指的工具,在第一篇中提到的那些工具的功能(cpu、 mem、 disk、 net),基本上 sar 均可以覆盖到,不信的话能够试一下 sar -A 1 1 看一下它都统计了哪些东西。此外 sar 能够周期性的执行统计,不少系统级别的监控都是经过 sar 来作的。淘宝还专门本身开发了一个 tsar 在原有的系统级别的监控上增长了对应用的监控。
这个命令也是和网络相关的,能够查看 socket 的链接信息,好比创建了哪些 TCP 链接,他们的状态是怎样的,一个进程有多少连接。一般这个命令后面都会跟着 grep 或者 awk 的命令进行进一步处理。以致于有的 awk 的教程都会以 netstat 的输出处理做为样例,好比耗子叔叔的 awk 简明教程。此外这个命令还有一个 -s 的参数能够统计不一样的协议的数据包信息。
其实要不是看到大神说有这个命令,我还觉得这个命令是 ps 的全称。其实展现的东西也和 ps 相似,主要的区别在于 ps 只是一次提供系统进程状态的一个快照,pidstat# 能够指定进程提供定时屡次的统计信息,至关于你能够更细粒度的 ps 了。这也是作监控的一个很好的工具,能够针对特殊进程特殊关照。
其实感受 strace 是一个更偏针对应用的性能工具,他能够统计出进程进行了哪些系统调用,处理了哪些信号。也所以 strace 是一个分析程序实现的一个很好的工具,好比说你想知道 pidstat 中的信息都是从哪里得到的就 strace pidstat |& grep open 就能够知道它是打开了哪些文件获取到信息的。因为 strace 会将输出打到标准错误中因此管道处理要记得加上 & 。这个命令是很强大,但问题是也及其消耗性能,通常状况下慢一个数量级仍是会有的,因此只是分析的时候用一下,正常执行就不要了。
大名鼎鼎的 tcpdump 能够将通过网卡的数据包保存下来一份以供 wireshark 这类软件进一步进行分析。若是愿意的话开启网卡混杂模式也能够捕获同一网络上其余机器的数据包,也是黑客很喜欢的工具。和 strace 相似, tcpdump 的功能很强大,即便开了 filter 功能也很消耗性能,通常的生产机若是流量大的话开启 tcpdump仍是吃不消的。固然有一些神秘的组织是须要获取网络包的完整备份的,他们大概是用专门的硬件完成的吧。
其实这个命令用 btrace 展现会更好一些,看名字就知道是 strace 的 io 版,能够实时的展现每次磁盘 IO 请求的内容,耗时,发生位置等等不少东西,不过带 trace 的命令通常都比较耗性能。
和上个命令相似,一看就是 top 的 io 版,简洁明了,包括展现都和 top 很相似,试一下就知道是怎么回事了。
其实只要知道 slab 是个什么东西,这个命令就很好理解了。slab 是对象缓冲池,将一些经常使用的小的对象结构再释放后缓存起来,而不是直接交给系统回收,这样能够避免频繁的小对象找系统申请内存形成性能降低,知道这个再看 这条命令就很轻松了。
这里面是一些颇有讲究的系统参数的设置,不少参数的设置都会对服务器的性能产生很大的影响。这也是个水很深的配置文件,好比 tcpreuse、tcprecycle 这些服务器的重要配置都在这里面。这里面的配置估计也能讲上个几天几夜。仍是先 sysctl -a 看一下感觉感觉吧。
其实上述诸多的工具都是从这个文件加下面读取文件作展现的,不过真要本身解析这里面的文件仍是蛮耗功夫的,因此仍是好好用一下上面的那些命令吧。不过若是你对那些命令是如何实现的能够配合着 strace 来探索这里面的奥秘。
Reference