标签归档:btrace

Perm区持续增长的问题排查

线上出现: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参数,并重启应用。 jvm-start-params-perm-set

但系统监控中的Perm区:呈现缓慢增长

current-logistics-jvm-perm-growing

 

查看历史Perm区的数据信息:

history-logistics-jvm-perm-growing

 

能造成Perm缓慢增长的方式一般有以下几种:
  1. 常量池的膨胀,比如String.intern调用,但是一般会通过GC回收;(JDK7之前常量池位于Perm区,JDK7及8常量池重Perm区迁移到了Heap中)
  2. 动态Java类创建,比如使用Cglib创建类、Gson对象转换、Jaxb对象转换等。

继续阅读

Advertisements