内存溢出_关于PermGen Space内存溢出解决方案
内存溢出分为Heap Space和PermGen Space两种异常。正巧的是我这次就碰到了PermGen space异常,为了解决这个异常花了我 半天的时间,所以今天写这个方案就是做一种笔记。
刚开始碰到这个内存溢出的问题的时候,我一直没有去管他,因为开发时间紧我不得不放弃这些系统抛出的异常。
废话不多说了,先来看看这次内存溢出到底是怎么一回事。
启动tomcat没有问题,并且还能够访问,但是当你访问的页面越来越多的时候,会突然间蹦出一个PermGen space内存溢出的异常。其实这个问题看起来是很简单的,只要修改一下永久域的大小就可以了。于是我的同事就发给我一段修改永久域大小的代码:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=128m"(Xms堆内存初始值,Xmx堆内存最大值,为什么Xms和Xmx要设置一样大呢,因为如果你设置Xms初始值和Xms不一样,那么每次内存增大的时候都需要重新分配内存给堆,这样的每次增大都会相应的浪费时间。所以干脆设置Xms和Xmx一样。Xx:permsize是永久域的初始值,xx:maxpersize是最大分配的永久域空间,xx:maxnewsize是新域最大值)
把这段代码放到tomcatbin目录下的catalina.bat文件(Linux修改catalina.sh)的第一行就可以了。弄好之后以为ok了。结果,结果。。。。
还是报PermGen Space内存溢出,我在想是不是空间还不够大,于是把XX:PermSize设置512M,XX:MaxPermSize设置1024M。
满怀信心的一式结果崩溃了,还是报内存溢出,我还在想是不是内存空间分配的不够大啊,于是我又加大内存,结果一次次的失败。
于是我就在想到底是哪里需要分配这么大的内存,于是我换了一条思路,我来找哪里消耗的内存最大,于是找到一种工具就是jvm自带的,打开cmd然后输入jconsole,会弹出一个对话框,如图:
我选择远程进程,如何来设置这个远程进程连接呢:
打开Catalina.bat文件,然后找到rem -----Execute The Requested Command
在这个下面加入以下代码:
set JAVA_OPTS= %JAVA_OPTS% -Djava.rmi.server.hostname=xxx.xx.xx.xx (ip)
set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.port=xxxx(端口)
set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.ssl=false
set JAVA_OPTS= %JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate=false(如果为true就需要账号密码,这里为false简单点)
现在把ip和端口输入jconsole里面进行远程连接:
选择“内存”---“Ps Perm Gen”发现分配的内存还是只有80多M,我不是已经分配了2个G的内存给permGen space吗,为什么这里还是80多m呢。
猛然间想到是不是分配内存的代码错了
于是乎开始寻找新的内存分配代码这一次就有了下面这一段代码:
set JAVA_OPTS=-Xms800m -Xmx800m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m
给永久域初始值分配128M,然后再用jconsole来查看,发现permGen space不报内存溢出了。哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈哈哈啊
内存溢出_关于PermGen Space内存溢出解决方案相关推荐
- PermGen space内存溢出
PermGen space内存溢出是tomcat发出的报错,解决方法如下: 1.双击tomcat:>>2.点击 Open launch configuration >>3.点击 ...
- 解决eclipse报PermGen space内存溢出异常的问题
异常问题如下所示: 1.点击Eclipse->Window->Preferences,如下所示: 2.点击Server->Runtime Environments,选择Apache ...
- 内存溢出数值jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space...
废话就不多说了,开始... 每日一道理 站在历史的海岸漫溯那一道道历史沟渠:楚大夫沉吟泽畔,九死不悔:魏武帝扬鞭东指,壮心不已:陶渊明悠然南山,饮酒采菊--他们选择了永恒,纵然谄媚诬蔑视听,也不随其流 ...
- myeclipse 内存不够用报错PermGen space 和 An internal error has occurred.
最近项目中又增加了新的模块,项目的代码又多了不少.运行的时候总是报如下错误 Exception in thread "http-apr-80-exec-6" java.lang.O ...
- jvm内存结构_浅谈JVM内存结构
JVM 可以分为 5 个部分,分别是: 类加载器(Class Loader):加载字节码文件到内存. 运行时数据区(Runtime Data Area):JVM 核心内存空间结构模型. 执行引擎(Ex ...
- unity如何检测内存泄漏_如何排查Java内存泄漏?看懂这一篇就够用了
原文:https://www.toptal.com/java/hunting-memory-leaks-in-java 作者:Jose Ferreirade Souza Filho 译者:Emma来源 ...
- 全面理解java内存模型_深入理解Java内存模型(八)——总结
处理器内存模型 顺序一致性内存模型是一个理论参考模型,JVM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照.JVM和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序 ...
- java if在内存中_全面理解Java内存模型
Java 内存模型的抽象 在 java 中,所有实例域.静态域和数组元素存储在堆内存中,堆内存在线程之间共享(本文使用"共享变量"这个术语代指实例域,静态域和数组元素).局部变量( ...
- linux内存管理_浅谈Linux内存管理
1. 扫盲篇 1.1 操作系统存储层次 常见的计算机存储层次如下: 寄存器:CPU提供的,读写ns级别,容量字节级别. CPU缓存:CPU和CPU间的缓存,读写10ns级别,容量较大一些,百到千节. ...
最新文章
- elasticsearch 基础语句
- 【考试战报】ORACLE OCP 19C考试通过
- Android 原生通知Notification 写法
- win10 安装程序错误,the setup files are corrupted.please obtain a new copy of the program
- 【C语言】单链表的相关热点面试题(包括:从尾到头打印,逆置,冒泡,寻找中间节点,倒数k节点)
- txt形式进行传输WebShell图文演示!
- php时间日期函数转字符串,php自定义时间转换函数示例
- Socket编程之TCP实例(附C/C++代码详解)
- 十二、流程控制之条件运算符
- PHP 中华如何用命令连接数据库,教你如何用php pdo连接数据库
- Google Gson API 介绍与使用
- 最长山脉 python
- k8s core-dns 解析域名异常
- 南京计算机徐宪忠,nakaga
- 机票订票b系统的服务器,飞机订票系统分析与总结
- 支付宝微信个人收款支付系统解决方案
- html5网页制作心得体会,网页设计课程学习心得总结
- 3D美术人员Technical Artist(TA技术美术)的学习之旅(2)
- 企业邮箱价格多少钱?邮箱购买价格多少钱?
- 通信工程保研历程--选择比努力重要
热门文章
- Docker swarm mode
- Spark任务提交后是如何完成提交过程的?源码解析!
- leetcode 496, 503, 556. Next Greater Element I, II, III | 496, 503, 556. 下一个更大元素 I,II,III(单调栈)
- JS 创建自定义对象的方法
- 【HTML】HTML+CSS复习笔记
- 【MVC模式】Front前端控制器模式、Jsp Model1 和 Jsp Model2、MVC思想
- Spring Cloud的架构
- 数据结构(3) -- 栈和队列
- 【已解决】Class not found: “com.bjpowernode.MyTest“
- 【超时原因】1047 Student List for Course (25 分)