`
zjh0588
  • 浏览: 64719 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Tomcat内存释放不了

    博客分类:
  • java
阅读更多
   今天公司CMS的tomcat又挂掉了,之前挂了一次.出现以下错误,后来把tomcat的内存增大到1024
严重: Exception initializing page context
java.lang.OutOfMemoryError: Java heap space
 
  在tomcat\bin\catalina.bat的set CURRENT_DIR=%cd% 前面添加
      set JAVA_OPTS =-Xms512m -Xmx1024m
      意思:设置最小虚拟内存512,最大1024.

  今天tomcat又挂了,一查之下,发现内存只升不降,久而久之,系统就挂死了.另外你可以用java的一个管理工具查看内存使用情况.在jdk1.6.0\bin\jconsole.exe.
 
   总结下内存只升不降的几个原因:
   1.在java中虽然有垃圾回收器,但是对rs等通过jdbc访问数据库的所产生的垃圾,它并不回收!
    2.是否是循环套接层数太多导致资源得不到释放,或者存在死循环,后者的可能性恨大。
    3.Tomcat 不支持EJB组件的开发,做j2ee项目时,最好还是用weblogic服务,而且在做基本的sql语句时,最好用连接池,不要多用jdbc,odbc桥,因为在建立连接时最耗时间

     解决方法是让tomcat自己管理内存,在startup.bat的@echo off下面添加以下代码:
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="%CATALINA_HOME%\conf\logging.properties"

     然后再启动startup.bat,tomcat就会自己管理内存了.
    
     另外事实上,这是一个优化。因为对于操作系统,请求内存的系统调用会占用大量的cpu时间,所以频繁的请求、释放内存将会导致性能的严重下降。所以对于jvm,最好的方式就是尽量多占用内存作为heap,少释放甚至不释放空闲的heap给操作系统以减少消耗在内存请求、释放操作上的cpu时间。
       PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决方法也一定是加大内存。说说为什么会内存益出:这一部分用于存放Class和Meta的信息,Class在被Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。

改正方法:-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

对于-XX:MaxNewSize=256m -XX:MaxPermSize=256m有疑问的朋友可以到了解下:http://hi.baidu.com/charlesyy/blog/item/b89b5dee30cfdaf9b2fb95d5.html
分享到:
评论

相关推荐

    Tomcat的内存释放

    Tomcat 的内存释放 操作说明 大V从吧别到时份范德萨的范德萨发

    tomcat内存溢出总结

    在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存原因是不一样的,当然处理方式也不一样。 这里根据平时遇到的情况和相关资料进行一个总结

    tomcat溢出解决建议方案

    在windows server2003操作系统(32bit)下运行tomcat的web App经常发生内存溢出,其规律是发生溢出后重新启动tomcat,再过一个多月仍旧发生,一般来说,造成内存溢出原因是不一样的,当然处理方式也不一样。...

    nginx+tomcat在windows下做负载均衡

    由于Tomcat自身对内存的占用有控制,当对内存的占用达到最大值时便会出现内存溢出,对网站的访问严重超时等现象,这时便需要重新启动Tomcat以释放占用的内存,这样做便会阻断网站运行。 所以对Tomcat做负载均衡便很...

    Nginx+Tomcat在Windows下做负载均衡

    Tomcat 服务器作为一个 ...由于 Tomcat 自身对内存的占用有控制,当对内存的占用达到最大值时便会出现内存溢出,对网站的访问严重超时等现象,这时便需要重新启动 Tomcat 以释放占用的内存,这样做便会阻断网站运行。

    tomcat重启脚本

    Tomcat 默认是无法自动释放内存,可以通过可执行文件结合任务计划,定时对tomcat进行重启。达到释放内存的目的。

    tomcat6、7、8、9, maven3.5

    Tomcat的6的用户应该知道,Tomcat的团队已经公布了 的生命日期为Tomcat 6.x的结束。Tomcat 6.x的用户应该计划在Tomcat 6.x到达生命周期之前进行升级。 Apache Tomcat 5.x 的Apache Tomcat 5.x的是可以从档案下载。...

    tomcat 7.0 + websocket demo

    tomcat 7.0 + websocket 简单的小dome

    jvm.zip_jvm_knownobc_tomcat

    关于tomcat的JVM设置参数,可以有效地管理内存,释放内存。

    JDK1.5.11 tomcat

    1年多了,才发现tomcat内存使用不断增长的原因,JDK的版本的问题,大家不妨试下,只要你的应用程序没有不释放资源的话,用这个版本肯定你应用程序的内存使用不会有变化,不会有内存泄露问题

    男孩的天职nginx+tomcat集群+redis存储session

    nginx反向代理tomcat集群,请求轮训给集群的tomcat,session存储在redis里面,集群的tomcat都从redis里面获取用户的session,session失效,redis自动删除,释放内存。记录于2015-11-26 完美支持tomcat8

    JVM内存模型架构图-新生代-老年代-永久代

    永久区:存储的是java的运行环境或类信息,这个区域不存在垃圾回收,关闭jvm就会释放内存 一个启动类加载大量的jar包。tomcat部署太多应用。内存满了就oom jdk1.6之前:永久代,常量池是在方法区 jdk1.7去...

    超级有影响力霸气的Java面试题大全文档

    内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的...

    java 面试题 总结

    内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的...

    java面试题

    52.4. 连接池内连接的使用与释放 26 52.5. 配置连接池 26 52.6. 配置tomcat 6.0.10连接池 26 52.7. Hibernate实现数据库的连接不同方式: 28 52.8. 有几种开源的数据库连接池: 29 53. 描述一下JVM加载class文件的...

    Loadrunner报错日志

    即在最后一个端口还没有用到时,前面已经有端口在释放了。 1,这里的TcpTimedWaitDelay默认值应该中是30s,所以这里,把这个值调小为5s(按需要调整)。 2,也可以把MaxUserPort调大(如果这个值不是最大值的话)。 ...

    服务器性能测试报告.docx

    测试主要关注点如下: 服务器资源的使用与释放:主要是CPU、内存等; 程序页面数据量的合理分配; 识别系统性能瓶颈; 4、测试内容 本次性能测试选取了用户使用最终频繁的操作和对服务器会造成较大影响的内容,主要...

    Java开发技术大全 电子版

    3.2.7对象的释放和垃圾收集机制108 3.3成员变量的定义与使用109 3.3.1成员变量的定义109 3.3.2成员变量的访问权限110 3.3.3实例成员变量和静态成员变量114 3.4方法的定义和实现116 3.4.1方法的声明117 3.4.2...

Global site tag (gtag.js) - Google Analytics