Jvm内存调优常用命令

从以下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 " 线程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

原文地址:https://www.cnblogs.com/shawn-sun/p/13970396.html