包含诊断调优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命令
查看类的一些信息,如字节码的版本号、常量池等
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 <指定的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 |
|