📑 文章章节大纲 (点击平滑直达)
一、调整 ActiveMQ JVM 内存参数
在业务消息量过大时,ActiveMQ 可能因 JVM 默认堆内存不足抛出 java.lang.OutOfMemoryError。
可以通过调整启动环境变量脚本扩大内存限制:
- 编辑配置文件:
bash vim /opt/tools/activemq/bin/env - 找到或添加
ACTIVEMQ_OPTS_MEMORY配置项:bash ACTIVEMQ_OPTS_MEMORY="-Xms256M -Xmx2G" - 重启 ActiveMQ 服务使新参数生效:
bash /opt/tools/activemq/bin/activemq restart
二、使用 jmap 排查 Java 内存状态
jmap 是 JDK 自带的内存诊断利器,可用于排查 JVM 堆内存占用与排查内存泄漏。
1. 查看堆内存分布情况(Heap Summary)
# 查看新生代(Eden/Survivor)、老年代及元空间的分配与使用率
jmap -heap <PID>
2. 输出对象统计直方图(Histogram)
# 统计堆中所有类别的实例数量与占用字节大小
jmap -histo <PID>
# 仅统计存活对象(会自动触发一次 Full GC)
jmap -histo:live <PID>