【现象】:应用更新新版本后,其中一台机出现了较多的重启现象。
【原因分析】:
分析应用日志,发现有OutOfMemoryError:PermGen space,此报错说明 PermSize 设置过小,没有足够的内存使用。
【解决方案】:
修改JVM配置,配置上
<jvm-arg>-XX:PermSize=128m</jvm-arg>
<jvm-arg>-XX:MaxPermSize=128m</jvm-arg>
说明:JVM的Perm区主要用于存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space,这个区域成为年老代,GC在主程序运行期间不会对年老区进行清理,默认是64M大小的,当程序需要加载的对象比较多时,超过64M就会报这部分内存溢出了,需要加大内存分配,一般128m足够。
还有一种直接报java.lang.OutOfMemoryError的,这种情况一般是jvm最大和最小内存分配配置有问题,最小内存分配过小,GC频率高,降低jvm性能,但最小内存也不能无限增大,最小内存增大,GC频率低了,但其执行时间会加长,GC执行期间,java程序是不处理其他请求的,因此将最小内存xms和最大内存xmx设置一样大,xmn值设置约为xmx的1/3.
原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/195866.html