单机并发内存泄漏排查

date
Feb 23, 2023
slug
memory-leak
status
Published
tags
concurrent
JVM
summary
对服务器进行压力测试时内存占用率持续增加,导致服务器 OOM 宕机,对问题的排查记录
type
Post
Language

问题

使用 LoadRunner 进行压力测试时服务器内存占用率持续增加,导致服务器 OOM 宕机,主要表现为服务无法使用,SSH 无法连接

排查

Docker 容器配置 JVM 调试环境 注意:下载与 Docker 容器内相同版本的 JDK 8u202-b08
# 将 JDK 从宿主机复制到容器内
sudo docker cp ~/jdk-8u202-linux-x64.tar.gz <container-name>:/
# 解压
tar -zxvf jdk-8u202-linux-x64.tar.gz
# 移动 JDK 目录
mv jdk-8u202-linux-x64 /usr/local/jdk1.8
# 修改全局环境变量
vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
# 生效环境变量
source /etc/profile
# 查看 Java 版本号
java -version
使用 JVM 工具查找原因
# 进入 Docker 容器
sudo docker exec -it --privileged <container-name> bash
# 生效环境变量
source /etc/profile
# 查看 JVM 程序进程
jps
# 使用 JVM 内存转储工具生成快照
jmap -dump:live,format=b,file=heap.bin <pid>
# 退出容器
exit
# 从容器复制快照到宿主机
sudo docker <container-name>:/heap.bin .

© chobit blog 2025