进程信息
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