Linux相关指令
top
主要查看%CPU
、%MEM
,还有load average
。load average
后面的三个数字,表示系统1分钟、5分钟、15分钟的平均负载值。如果三者平均值高于0.6,则复杂比较高了。当然,用uptime
也可以查看。
vmstat
查看进程、内存、I/O等多个系统运行状态。2表示每两秒采样一次,3表示一共采样3次。procs
的r
表示运行和等待CPU时间片的进程数,原则上1核CPU不要超过2。b
是等待资源的进程数,比如磁盘I/O、网络I/O等。
[root@ ~]# vmstat -n 2 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 173188 239748 1362628 0 0 0 3 17 8 0 0 99 0 0
0 0 0 172800 239748 1362636 0 0 0 0 194 485 1 1 99 0 0
1 0 0 172800 239748 1362640 0 0 0 0 192 421 1 1 99 0 0
pidstat
查看某个进程的运行信息。
free
查看内存信息。
df
查看磁盘信息。
iostat
查看磁盘I/O信息。比如有时候MySQL在查表的时候,会占用大量磁盘I/O,体现在该指令的%util
字段很大。对于死循环的程序,CPU占用固然很高,但是磁盘I/O不高。
ifstat
查看网络I/O信息,需要安装。
CPU占用过高原因定位
先用top
找到CPU占用最高的进程,然后用ps -mp pid -o THREAD,tid,time
,得到该进程里面占用最高的线程。这个线程是10进制的,将其转成16进制,然后用jstack pid | grep tid
可以定位到具体哪一行导致了占用过高。
JVM性能调优和监控工具
jps
Java版的ps -ef
查看所有JVM进程。
jstack
查看JVM中运行线程的状态,比较重要。可以定位CPU占用过高位置,定位死锁位置。
jinfo/jstat
jinfo
查看JVM的运行环境参数,比如默认的JVM参数等。jstat
统计信息监视工具。
jmap
JVM内存映像工具。