java项目运行中出现内存泄漏问题,报java.lang.OutOfMemoryError: PermGen space

公司有一个项目,运行一阵子总是会报java.lang.OutOfMemoryError: PermGen space

一开始我以为是内存不足导致的,但是查看服务器内存还有很多。所以不是内存问题。

然后查到java运行时涉及到资源分配的几个重要参数:

  • Xss:每个线程的stack大小(栈)
  • Xmx:JAVA HEAP的最大值、默认为物理内存的1/4
  • Xms:JAVA HEAP的初始值,server端最好Xms与Xmx一样
  • Xmn:JAVA HEAP young区的大小
  • XX:PermSize:设定内存的永久保存区域
  • XX:MaxPermSize:设定最大内存的永久保存区域

而我遇到的问题正是permsize设置过小导致的。由于项目后期开发会越来越大,涉及到的类也会越来越多,导致虚拟机分配的资源不够类加载的使用。

----PermGen space的全称是Permanent Generation space,是指内存的永久保存区域

这个参数一旦分配了就不会改变。所以只要设置到足够项目使用的资源分配值就能解决问题了。

在这个过程中,我们可以使用java提供的命令来查看项目使用资源的具体情况,从而设定合适的资源分配,而不是过大浪费资源。

1 使用     ps -ef | grep java | grep '项目名'  | awk  $'{print $2}'  命令查出项目的pid

2 根据pid号   jmap -heap pid 查看项目具体使用资源情况

配置

使用

很明显可以看出目前的PermGen space 的内存是足够使用的。

 

以上就是解决问题的整体思路,下面是解决办法

到tomcat的bin目录下,找到catalina.sh (linux系统)  或者 catalina.bat (windows系统)

添加   JAVA_OPTS="-server -XX:PermSize=90M  -XX:MaxPermSize=150m -Djava.awt.headless=true "

这里面的参数是根据你项目需求的资源分配的,不要分配过大,以免浪费资源,内存是宝贵的~

 

最后说一下就是jdk的这些参数都是需要做不同的优化的,一般情况下默认就可以运行了,但是为了后期项目的良好运行,最好能够对资源的分配做不同的调整。项目分开到独立的tomcat可以让项目的资源利用更加合理。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值