tomcat 报“ java.lang.OutOfMemoryError: PermGen space ”、jconsole、visualvm、arthas 连接一直在加载,想排查一下是什么在占用内存,一直连接不了
1
chendy 2019-07-23 22:18:23 +08:00 1
一个笨方法:加 dump 参数,比如这样
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOGDIR}/ 然后把 dump 文件拉出来分析 |
2
Kahnn 2019-07-23 22:22:17 +08:00
连接不了是一直无响应,还是有报错?会不会是权限的原因
|
3
cheng6563 2019-07-23 22:24:24 +08:00 via iPhone
PermGen 存的是常量池之类的东西,是不是自定义了类加载器?或者是程序包太大了?
可以换到 Java8,Java8 没有专用 PermGen 内存了 |
5
NerverLibis 2019-07-24 09:13:44 +08:00 via iPhone
我们的 java 告诉我是 mysql 挂了
|
6
lff0305 2019-07-24 12:08:18 +08:00
jmap dump 下内存,然后在 MAT 里面分析
或者 重启后挂上 jconsole, jprofiler,等等 个人经验,PermGen 冒了一般是程序里面通过反射不停的创建大量的类引起的,常见于各种反序列化的过程(比如 xml -> 对象)。可以通过 jconsole 的 loaded class 部分来跟踪 |