Java调优CheatSheet
包含调优java程序的各种命令以及jvm配置示例。
常用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命令
-
查看jvm内存使用状况
jmap -heap
-
查看jvm内存存活的对象:
jcmd GC.class_histogram
jmap -histo:live
-
把heap里所有对象都dump下来,无论对象是死是活
jmap -dump:format=b,file=xxx.hprof
-
先做一次full GC,再dump,只包含仍然存活的对象信息:
jcmd GC.heap_dump
jmap -dump:format=b,live,file=xxx.hprof
-
查看jvm进程
jps
jcmd -l
-
查看类的一些信息,如字节码的版本号、常量池等
javap -verbose classname
-
查看进程的gc情况
jstat -gcutil [pid] (显示总体情况)
jstat -gc [pid] 1000 10(每隔1秒刷新一次 一共10次)
-
查看目前jvm启动的参数
jinfo -flags [pid] #有效参数
jcmd [pid] VM.flags #所有参数
-
查看对应参数的值
jinfo -flag [flagName] [pid]
-
启用/禁止某个参数
jinfo -flag [+/-][flagName] [pid]
-
设置某个参数
jinfo -flag [flagName=value] [pid]
-
查看所有可以设置的参数以及其默认值
java -XX:+PrintFlagsInitial
-
Java线程dump
jstack [pid] #-m参数可以打印出native栈的信息
jcmd Thread.print
kill -3 [pid]
第三方工具
======== awesome-scripts========
安装:
curl -s "https://raw.githubusercontent.com/superhj1987/awesome-scripts/master/self-installer.sh" | bash -s
使用:
-
显示最繁忙的java线程: -c <要显示的线程栈数> -p <指定的Java Process>
opscipts show-busy-java-threads [-c] [-p]
-
使用greys跟踪方法耗时
opscripts greys [@IP:PORT]
ga?: trace [class] [method]
-
显示当前cpu和内存使用状况,包括全局和各个进程的。
opscripts show-cpu-and-memory
-
进入jvm调试交互命令行,包含对java栈、堆、线程、gc等状态的查看
opscripts jvm [pid]
JVM配置示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | |