常用的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进行进程查找