内存溢出问题解决方案与Visualvm监听添加
来源:互联网 发布:中山大学网络教育官网 编辑:程序博客网 时间:2024/06/07 12:25
故障现象:
由内存溢出(OutOfMemoryError: PermGen space)
故障原因:
1. 本身比较庞大,系统初始加载的类超过9000个,JDK1.8(不含)之前的JDK通过分配永久保存区域(Permanent Generation space)加载class,系统默认设置约64M,不能满足系统加载的要求,系统运行一段时间后,永久保存区域占满就出现内存溢出。
2.PermGen space的全称是PermanentGeneration space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中,它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGenspace进行清理,所以如果你的应用中有很CLASS的话,就很可能出现PermGen space错误,这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小那么就会产生此错误信息了。但目前的hibernate和spring项目中也很容易出现这样的问题。可能是由于这些框架会动态class,而且jvm的gc是不会清理PemGen space的,超过了jvm默认的大小,导致内存溢出。
解决方案:
首先:
将绿色的Tomcat 注册为服务
1. 进入到tomcat 的目录所在
a) 在cmd 下
Cd D:\ProgramFiles\apache-tomcat-7.0.40>cd bin (也可以一级一级进入目录)
b) 注册 service.bat install serviceName (服务名),发下是成功提示
c) 删除 服务 sc delete Tomcat7,以下是成功提示
d) Tomcat以Windows服务的方式启动的情况下,通过Tomcat7w.exe打开启动参数设置界面,在JAVA标签页下的启动参数部分设置PermSize、MaxPermSize,加大内存
在 CMD 下进入到Tomcat Bin目录执行以下命令
会弹出以下对话窗口
e) 在对话窗口的 “JAVA”选项卡下 / “Java Options” 下的完整内容如下:
/**** 原有内容Start ***/-Dcatalina.base=D:\ProgramFiles\apache-tomcat-7.0.40-Dcatalina.home=D:\ProgramFiles\apache-tomcat-7.0.40-Djava.endorsed.dirs=D:\ProgramFiles\apache-tomcat-7.0.40\endorsed-Djava.io.tmpdir=D:\ProgramFiles\apache-tomcat-7.0.40\temp-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager-Djava.util.logging.config.file=D:\ProgramFiles\apache-tomcat-7.0.40\conf\logging.properties</span><span style="color:#538135;">/****原有内容 End ***//****听设置内容 Start ***/</span><span style="color:#333333;">-Djava.rmi.server.hostname=0.0.0.0-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port="9090" -Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote.ssl="false"</span><span style="color:#538135;">/****听设置内容 End ***//****服务启动设置内在内容 Start ****/-XX:PermSize=256M-XX:MaxPermSize=256M/****服务启动设置内在内容 Start ****/
说明:注释只起到说明作用,添加时不要添加注释部分内容
1. 以startup.bat方式命令
行方式启动的情况下,在Tomcat/bin/catalina.bat内设置保区内存大小
在“echo"Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行
JAVA_OPTS="-server-XX:PermSize=128M -XX:MaxPermSize=128m
2. JDK1.8以上版本说明
使用JDK1.8以上版本,可规避此问题,jdk1.8之后使用元空间Metaspace代替了PermGen space,默认情况下,类元数据分配受到可用的本机内存容量的限制,因此不会出现保存区内存溢出的问题了,系统无需做其它设置。
辅助工具:
Visualvm可监控JVM运行期间的内存占用情况,可观察Tomcat进程内存占用和保存区占用/元数据空间的内容占用曲线,可以有效分析系统运行状态,可确认设置是否生效
下载地址:https://visualvm.java.net/
tomcat日志查看 系统内存溢出
解决步骤:
1、停止tomcat服务
2、cmd 打开命令窗口,进到tomcat的bin目录下
3、输入命令tomcat7w.exe//ES//sbba (注:sbba是注册到服务中的tomcat服务名)打开tomcat的Properties(属性)如图附件20图一,点击java查看tomcat的端口
4、查看Java Options-Dcom.sun.management.jmxremote.port="9090"
5、打开visualvm_138文件目录bin下创建的快捷方式开始监控tomcat项目耗费资源的曲线图(VisualVM可生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和CPU分析,同时它还支持在MBeans上进行浏览和操作),从第4步得知tomcat项目所占用的端口是9090 ,所以新建JMX端口为9090 如图附件下图
打开创建的监听,就可以看到TOMCAT 相关的端口了
重启服务器,等待tomcat项目自启动后,可正常访问系统了
- 内存溢出问题解决方案与Visualvm监听添加
- android 内存溢出问题解决方案
- eclipse内存溢出问题解决方案
- Sun VisualVM项目 开源Java问题解决方案
- android 图片内存溢出问题解决与优化
- 针对于jetty部署iMatrix平台内存溢出问题解决方案
- 关于Winform中rdlc报表内存溢出问题解决方案
- bitmapfactory.decodefile 内存溢出(OOM)问题解决方案
- MyEclipse运行项目的内存溢出问题解决方案
- Java VisualVM分析JVM内存溢出
- Tomcat内存溢出问题解决
- ppm内存溢出问题解决
- jvm内存溢出问题解决
- Myeclipse内存溢出问题解决
- tomcat内存溢出问题解决
- Tomcat6内存溢出问题解决
- tomcat内存溢出问题解决
- eclipse内存溢出问题解决 tomcat内存溢出
- 通过CoordinatorLayout制作高级滚动特效
- 后台运用html格式导出Excel文件
- Android Launcher T9搜索APP实现
- Android ActionBar使用笔记
- 自动循环滚动textview
- 内存溢出问题解决方案与Visualvm监听添加
- USB的VID和PID
- Java获取当前系统时间System.currentTimeMillis()
- java excel通过浏览器下载
- Using Flashback in a Data Guard Environment
- spring+cxf
- 46. Permutations
- android camera 根据加速器的变化实现自动对焦
- linux c ----互斥锁属性