线上jvm调试命令小结

进程信息
jps
jps -l 输出应用程序main.class的完整package名或者应用程序jar文件完整路径名
jps -v 输出传递给JVM的参数

查看正在运行的java程序的扩展参数
jinfo 16439

线程信息
jstack

更多
https://www.cnblogs.com/duanxz/p/5487576.html

查看堆使用情况 ## 常用 ##
jmap -heap pid:
jmap -heap 16439

查看类实例内存使用情况 ## 常用 ##
jcmd pid GC.class_histogram

jcmd 16439 GC.class_histogram
jcmd 16439 GC.class_histogram | more

jmap -histo 16439

jcmd参数含义:

  • Thread.print, 打印线程栈信息
  • GC.class_histogram, 查看系统中类统计信息
  • GC.heap_dump, 导出堆信息,与jmap -dump功能一样
  • GC.run_finalization, 触发finalize()
  • GC.run, 触发gc()
  • VM.uptime, VM启动时间
  • VM.flags, 获取JVM启动参数
  • VM.system_properties, 获取系统Properties
  • VM.command_line, 启动时命令行指定的参数

实时监控jvm
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
vmid - VM的进程号,即当前运行的java进程号。
还有两个关于显示频率的选项:
interval–间隔时间,单位可以是秒或者毫秒,通过指定s或ms确定,默认单位为毫秒。
count-打印次数,如果缺省则打印无数次。

JVM中堆的垃圾收集情况
jstat -gc 16439 5s 10

新生代、老生代及持久代垃圾收集的情况
jstat -gcutil 16439 5s 10
更多
https://www.cnblogs.com/duanxz/archive/2012/11/03/2752166.html

堆转储 ## 常用 ##

手动转储
jcmd 16439 GC.heap_dump /usr/app/mock_dump.hprof

jcmd 16439 GC.heap_dump /usr/app/mock_dump.hprof

自动转储
OutOfMemoryError是不可预料的,我们很难确定应该何时获得堆转储。有几个JVM标志可以起到帮助。

-XX:+HeapDumpOnOutOfMemoryError该标志默认为false,打开该标志,JVM会在抛出OutOfMemoryError时创建堆转储。

-XX:HeapDumpPath=<path>该标志知道了堆转储将被写入的位置,默认为当前工作目录下生产java_pid<pid>.hprof文件。

-XX:+HeapDumpAfterFullGC 这会在运行一次Full GC后生成一个堆转储文件。

-XX:+HeapDumpBeforeFullGC 这会在运行一次Full GC之前生成一个堆转储文件。

例子:
nohup java -Xms2048M -Xmx4096M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./ -jar mock.jar &


堆转储文件分析工具 ## 常用 ##
推荐Java VisualVM、mat
更多
https://www.cnblogs.com/happy-rabbit/p/6232581.html

posted @ 2020-11-07 14:11  昕友软件开发  阅读(448)  评论(0编辑  收藏  举报
欢迎访问我的开源项目:xyIM企业即时通讯