(点击
上方公众号
,可快速关注)
来源:飒然Hang,
www.rowkey.me/blog/2017/03/23/java-profile-cheatsheet/
如有好文章投稿,请点击 → 这里了解详情
常用Shell命令
查看网络状况
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
使用top去获取进程cpu使用率;使用/proc文件查看进程所占内存。
#!/bin/bash
for i in `ps -ef | egrep -v "awk|$0" | awk '/'$1'/{print $2}'`
do
mymem=`cat /proc/$i/status 2> /dev/null | grep VmRSS | awk '{print $2" " $3}'`
cpu=`top -n 1 -b |awk '/'$i'/{print $9}'`
done
常用JDK命令
查看类的一些信息,如字节码的版本号、常量池等
javap -verbose classname
查看jvm进程
jps
jcmd -l
查看进程的gc情况
jstat -gcutil [pid] (显示总体情况)
jstat -gc [pid] 1000 10(每隔1秒刷新一次 一共10次)
查看jvm内存使用状况
jmap -heap [pid]
查看jvm内存存活的对象:
jcmd [pid] GC.class_histogram
jmap -histo:live [pid]
把heap里所有对象都dump下来,无论对象是死是活
jmap -dump:format=b,file=xxx.hprof [pid]
先做一次full GC,再dump,只包含仍然存活的对象信息:
jcmd [PID] GC.heap_dump [FILENAME]
jmap -dump:format=b,live,file=xxx.hprof [pid]
线程dump
jstack [pid] #-m参数可以打印出native栈的信息
jcmd Thread.print
kill -3 [pid]
查看目前jvm启动的参数
jinfo -flags [pid] #有效参数
jcmd [pid] VM.flags #所有参数
查看对应参数的值
jinfo -flag [flagName] [pid]
启用/禁止某个参数
jinfo -flag [+/-][flagName] [pid]
设置某个参数
jinfo -flag [flagName=value] [pid]
查看所有可以设置的参数以及其默认值
java -XX:+PrintFlagsInitial
第三方工具
========awesome-scripts========
安装:
curl -s "https://raw.githubusercontent.com/superhj1987/awesome-scripts/master/self-installer.sh" | bash -s
使用:
显示最繁忙的java线程: -c -p
opscipts show-busy-java-threads [-c] [-p]
使用greys跟踪方法耗时
opscripts greys [@IP:PORT]
ga?: trace [class] [method]