从以下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