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內存映像工具。