企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
[TOC] ## jmap 1. 安装 ``` # 查看java版本 java -version # 查看哪些rpm包提供jmap工具 yum -y whatprovides '*/jmap' # 安装jmap yum install -y java-1.8.0-openjdk-devel ``` 2. 获取java程序的内存快照 ``` jmap -dump:live,format=b,file=/root/jmaplogs/jmap-70892.bin 70892 ``` live子选项是可选的,假如指定live选项,那么只输出活的对象到文件。 3. 安装Memory Analyzer [下载地址](http://www.eclipse.org/mat/downloads.php) ## OOM 不要在线上使用jmap手动抓取内存快照,其一系统OOM时手工触发已经来不及,另外在生成dump文件时会占用系统内存资源,导致系统崩溃。只需要在JVM启动参数中设置如下参数,一旦OOM触发会自动生成对应的文件,用MAT分析即可。 ``` # 内存OOM时,自动生成dump文件 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/ ``` ## GC 如果Young GC比较频繁,5S内有打印一条,或者有Old GC的打印,代表内存设置过小或者有内存泄漏,此时需要抓取内存快照进行分享。 可以在jvm启动参数中设置如下参数,打印gc日志 ``` -Xloggc:/data/logs/gc.log ``` 也可以通过jstat -gcutil pid 1000查看GC频率,1000表示1秒输出一次。