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

posted on 2020-11-13 17:17  怂人不倦  阅读(800)  评论(0编辑  收藏  举报