從以下5個角度進行排查
1.CPU —— vmstat -n 2 3 命令
2.內存 —— free -m命令
3.硬盤 —— df -h命令
4.磁盤Io —— iostat -xdk 2 3命令
5.網絡Io —— ifstat命令
Jvm常用命令總結
一.CPU
1.查看cpu (每2s打印10次)
vmstat -n 2(秒) 10(次)
r:運行和等待進程數
b:阻塞進程數
r+b 如果大於系統的核數2倍表示性能降低
us:用戶消耗進程百分比 長期大於50,需要調優
sy:系統消耗進程百分比
us+sy 超過80,表示cpu不足
2.查看所有cpu核信息
mpstat -P All 2(每秒)
3.查看單個進程cpu信息
pidstat -u 1(秒) -p pid
pidstat -p pid -r 2(秒)
4.查詢線程數(可以查看當前java的線程數)
cat /proc/pid/status
二.進程
1.獲取進程的pid
ps -ef | grep 項目名稱
2.查看最耗費進程的cpu pid(進程ID)
ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid
3.打印CPU時間最長的線程
printf "%x\n" 線程ID 返回線程的十六進制值
4.輸出進程堆棧信息
jstack pid | grep 線程十六進制值
三.內存
1.進程堆內存使用情況,包括使用的GC算法、堆配置參數和各代中堆內存使用情況
jmap -heap pid
2.查看包路徑下存活的對象
jmap -histo:live pid|grep com.xxx.xxx.xx
3.查看堆內存部分使用量
jstat -gcutil pid 1000
4.導出 內存快照
jmap -dump:format=b,file=/tmp/heap.hprof pid
四.磁盤
磁盤分布查看(大批量的表存儲查詢會導致i/o不足)
iostat -xdk 2(秒) 3(次)
await i/o平均等待時間 值越小越好
svctm i/o平均服務時間
await > svctm 表示i/o等待時長,需優化
%util 1s中百分之幾時間用於i/o操作,接近100 表示磁盤帶寬跑滿
查找占用IO最高的程序
ps -e -L h o state,cmd | awk '{if($1=="R"||$1=="D"){print $0}}' | sort | uniq -c | sort -k 1nr
五.網絡
ifstat 查看網口的網絡情況
查看網絡IO情況
sar -n DEV 1 10
查看某個ip地址Socket鏈接數
netstat -nalp |grep ip地址 |wc -l
抓包
tcpdump -i eth0(網口) -w xxx.pcap &
六.文件
查看當前進程id的 文件操作狀況
lsof -p pid | wc -l
查看每個用戶允許打開的最大文件數
ulimit -a
設置用戶允許打開最大數
ulimit -n 4096