我觉得是内存不断泄露,猜测是数据库连接那块,用memoryAnalyzer分析的,看不出来 SEVERE: The web application [/NetworkTeachPlatform] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. 八月 24, 2014 4:16:51 下午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads SEVERE: The web application [/NetworkTeachPlatform] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.
如果你不管改多大的值,仍然运行一段时间就out of memory,那几乎可以肯定是内存泄漏out of memory的时候tomcat应该会生成heapdump和java core,找到这两个文件,用专门的工具看你的代码里面哪些类有内存泄漏的嫌疑工具方面有很多,IBM的HeaAnalyze是一款不错的内存调优/泄漏检测的工具,同样优秀的还有JRorket
用jconsole或者jvisualvm连上你的应用看看哪里问题,可能是链接没关闭吧
用了看不出来,就是c3p0连接数据库,线程比较多,我上传的图片和spring配置能不能看出来?
某段代码?我用的是HibernateTemplate操作数据库的,业务逻辑很简单,增删改查,
你看下spring配置
这么复杂的问题,光看配置文件,恐怕没几个人答得上。。 permgen space 是JAVA存放class和一些常量的地方,这个问题多数是因为类动态加载导致存放的类过多,最终溢出了。 你需要找到是哪个类过多。 推荐一个文章。 http://java.chinaitlab.com/JDK/793557.html
补充一点,自己的开发环境的话,尽量避免热部署,频繁的热部署,很容易导致OutOfMemoryError: PermGen space 尽量做到修改文件,停掉服务器,然后重启
1、如果你是在Eclipse中运行,应该修改Eclipse里面启动tomcat的参数,而不是修改在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行。这样添加只有单独启动tomcat的时候有作用。 Eclipse VM arg eg: -Dcatalina.base="E:\TMS\apache-tomcat-7.0.52" -Dcatalina.home="E:\TMS\apache-tomcat-7.0.52" -Dwtp.deploy="E:\TMS\apache-tomcat-7.0.52\webapps" -Djava.endorsed.dirs="E:\TMS\apache-tomcat-7.0.52\endorsed" -XX:PermSize=64m -XX:MaxPermSize=256m 2、OutOfMemoryError: PermGen space :出现这个的原因是 tomcat的类加载太多,应该和数据库连接之间没有太大的关系。
-XX:PermSize=256m
楼主设置的参数是堆内存的大小。 永久代是这个。-XX:PermSize=256m
而且这个问题的关键是只是内存不够 调大点即可,还是有内存在不停地泄露?
要是内存泄露,那调大永久代大小只能延缓报错的时间,不能从根本上解决问题的。 可能要通过分析DUMP来找出哪里有问题了。
SEVERE: The web application [/NetworkTeachPlatform] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
八月 24, 2014 4:16:51 下午 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/NetworkTeachPlatform] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.
用了看不出来,就是c3p0连接数据库,线程比较多,我上传的图片和spring配置能不能看出来?
这么复杂的问题,光看配置文件,恐怕没几个人答得上。。
permgen space 是JAVA存放class和一些常量的地方,这个问题多数是因为类动态加载导致存放的类过多,最终溢出了。
你需要找到是哪个类过多。 推荐一个文章。
http://java.chinaitlab.com/JDK/793557.html
尽量做到修改文件,停掉服务器,然后重启
Eclipse VM arg eg:
-Dcatalina.base="E:\TMS\apache-tomcat-7.0.52" -Dcatalina.home="E:\TMS\apache-tomcat-7.0.52" -Dwtp.deploy="E:\TMS\apache-tomcat-7.0.52\webapps" -Djava.endorsed.dirs="E:\TMS\apache-tomcat-7.0.52\endorsed" -XX:PermSize=64m -XX:MaxPermSize=256m
2、OutOfMemoryError: PermGen space :出现这个的原因是 tomcat的类加载太多,应该和数据库连接之间没有太大的关系。
3、出现这个原因 楼主可以用 jconsole 或者jvisualvm 来查看到底是哪儿出问题了。
tomcat7和Eclipse vm都改了也不行,期初tomcat下放了几个项目,大概一共有一百多个jar,很容易发生PermGen,后来只留一个项目还是发生,正如21#所说,我发现我只要clean up项目就发现PermGen,修改文件,一会就会发生,Eclipse是自动编译、部署,应该就是这个原因,避免频繁的热部署,而是重启服务器。