线上出现:java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space [2016-05-12 16:55:49.272] [DubboServerHandler-10.252.115.167:20880-thread-180] [ERROR] com.alibaba.dubbo.rpc.filter.ExceptionFilter:90 x:(_cid=a:5bf5c0|t:117|s:1463043299969) - [DUBBO] Got unchecked and undeclared exception which called by 10.117.22.115. service: com.sfebiz.logistics.api.LogisticsCallbackService, method: bspcallback, exception: java.lang.OutOfMemoryError: PermGen space, dubbo version: 2.5.3-notification-fix, current host: 10.252.115.167 java.lang.OutOfMemoryError: PermGen space
第一时间查看Perm区大小,发现JVM启动参数没有配置,默认情况下是82M左右,原因是运维同学在脚本修改的时候漏了XX参数设置,加上Perm参数,并重启应用。
但系统监控中的Perm区:呈现缓慢增长
查看历史Perm区的数据信息:
能造成Perm缓慢增长的方式一般有以下几种:
- 常量池的膨胀,比如String.intern调用,但是一般会通过GC回收;(JDK7之前常量池位于Perm区,JDK7及8常量池重Perm区迁移到了Heap中)
- 动态Java类创建,比如使用Cglib创建类、Gson对象转换、Jaxb对象转换等。
Advertisements