JVM诊断调优命令
常用Shell命令
- 查看网络状况
1 | netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' |
常用JDK命令
- 查看jvm内存使用状况
1 | jmap -heap |
- 查看jvm内存存活的对象:
1 | jcmd GC.class_histogram |
- 把heap里所有对象都dump下来,无论对象是死是活
1 | jmap -dump:format=b,file=xxx.hprof |
- 先做一次full GC,再dump,只包含仍然存活的对象信息:
1 | jcmd GC.heap_dump |
- 查看jvm进程
1 | jps |
- 查看类的一些信息,如字节码的版本号、常量池等
1 | javap -verbose classname |
- 查看进程的gc情况
1 | jstat -gcutil [pid] (显示总体情况) |
- 查看目前jvm启动的参数
1 | jinfo -flags [pid] #有效参数 |
- 查看对应参数的值
1 | jinfo -flag [flagName] [pid] |
- 启用/禁止某个参数
1 | jinfo -flag [+/-][flagName] [pid] |
- 设置某个参数
1 | jinfo -flag [flagName=value] [pid] |
- 查看所有可以设置的参数以及其默认值
1 | java -XX:+PrintFlagsInitial |
- Java线程dump
1 | jstack [pid] #-m参数可以打印出native栈的信息 |
第三方工具:awesome-scripts
- 安装:
1 | curl -s "https://raw.githubusercontent.com/superhj1987/awesome-scripts/master/self-installer.sh" | bash -s |
- 使用:
1 | # 显示最繁忙的java线程: -c <要显示的线程栈数> -p <指定的Java Process> |
JVM配置示例
1 | -server #64位机器下默认 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 独特的留白!
评论