常用的linux性能监控命令总结


先总结一下

uptime,top,free,vmstat,mpstat,netstat,iostat,pidstat,dstat,jstack,jmap,jstat,strace,sar,ps,perf,pstree

vmstat 命令

每一秒输出一次,共输出10次,这是一个很综合的命令

 r: 运行队列中进程数量

 b: 等待IO的进程数量

 swpd: 使用虚拟内存大小

  free: 可用内存大小

  buff: 用作缓冲的内存大小

  cache: 用作缓存的内存大小

  si: 每秒从交换区写到内存的大小

  bi: 每秒读取的块数

  bo: 每秒写入的块数

bi+bo 参考值为 1000,如果超过 1000,而且 wa 值比较大,表示系统磁盘 IO存在瓶颈

in: 每秒中断数,包括时钟中断。【interrupt】

使用cat /proc/interrupts查看中断的详情进行进一步分析

cs: 每秒上下文切换数。        【count/second】

 us: 用户进程执行时间(user time)

  sy: 系统进程执行时间(system time)

  id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。

  wa: 等待IO时间

mpstat 命令

与top类似,可以动态跟踪cpu的情况

pidstat 命令

pidstat -p 【pid】 -w 1 10 看进程的主动和被动切换。

 1)如果主动切换(cswch/s)过高,说明可能IO,内存资源可能不足
2)如果被动切换(nvcswch/s)过高,说明进程过多,cpu时间片不足

iostat命令

重点关注这几个指标

avgqu-sz: 是平均请求队列的长度。队列长度越短越好
await: 平均每次 IO 请求等待时间(包括等待时间和处理时间,毫秒为单位)。一般地系统IO响应时间应该低于5ms
svctm: 平均每次 IO 请求的处理时间(毫秒为单位)
%util: 1 秒中有百分之多少的时间用于 I/O 操作。该参数表示了设备的繁忙程度

瓶颈分析:
1:CPU会拿出一部分时间来等待IO(iowait)。如果磁盘的利用率已经满了(util%),即使CPU使用率不高,但是系统整体QPS已经上不去了,如果继续加大流量,会导致单次iowait持续增加(IO请求都堵在队列里),从而使整体性能塌方。
2:高iowait并不代表磁盘的瓶颈。唯一能说明磁盘是系统瓶颈的方法是很高的svctm(IO请求的处理时间),一般来说超过20ms,就代表了不太正常的磁盘性能。只要大于20ms,就必须考虑是否磁盘读写的次数太多,导致磁盘性能降低。
3:svctm 一般要小于 await。svctm的大小和磁盘性能有关,请求过多也会导致 svctm 的增加。await 的大小一般取决于svctm 以及 I/O 队列的长度。如果 svctm 接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明I/O队列太长,应用的响应时间变慢,如果响应时间超过了用户可以容许的范围,需要考虑更换更快的磁盘;

jstack,jmap,jstat的使用说明详见博客其他文章

strace命令

strace常用来跟踪进程执行时的系统调用和所接收的信号。 通过strace可以知道应用程序打开了哪些文件,以及读写了什么内容,包括消耗的时间以及返回值等。在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

sar命令

sar(System ActivityReporter系统活动情况报告)是目前Linux上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等

pstree命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁

 

 ps命令

最常用的就是ps -ef|grep java进行进程查找