关闭

Tomcat的JVM内存溢出解决方法

4468人阅读 评论(0) 收藏 举报
分类:
Tomcat的JVM内存溢出解决方法
在生产环境中,tomcat内存设置不好很容易出现JVM内存溢,解决方法就是修改Tomcat中的catalina.sh文件。


在catalina.sh文件中,找到cygwin=false,在这一行的前面加入参数,具体如下
# vi TOMCAT_HOME/bin/catalina.sh
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"


其他说明:
1.“m”说明单位是MB,否则默认是KB
2.一般使用物理内存的80%作为堆大小
3.一般把-Xms和-Xmx设为一样大
4.一般把-Xmn设置为-Xmx值的1/4
5.一般将堆的总大小的50%到60%分配给新生成的池

 

Tomcat 7最大并发连接数的正确修改方法


所以两者的默认值分别是200和100,要调整Tomcat的默认最大连接数,可以增加这两个属性的值,并且使acceptCount大于等于maxThreads:


    <Connector port="8080" protocol="HTTP/1.1"
              connectionTimeout="20000"
              redirectPort="8443" acceptCount="500" maxThreads="400" />
 


查看tomcat的内存大小
conf/tomcat-user.xml 
<?xmlversion='1.0'encoding='utf-8'?> 
<tomcat-users> 
<rolerolename="manager"/> 
<userusername="tomcat"password="s3cret"roles="manager"/> 
</tomcat-users>


登录后即可看到TOMCAT当前的空闲内存和最大内存。
 

Tomcat把JDBC驱动强行注销的有关问题
异常:A web application registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped.


tomcat 6.0.25以后引入了内存泄露侦测,对于垃圾回收不能处理的对像,它就会做日志。老外提出的办法是要么用旧版本的tomcat,要么就在tomcat的server.xml文件中,把
<!– Prevent memory leaks due to use of particular java/javax APIs–>
<Listener className=”org.apache.catalina.core.JreMemoryLeakPreventionListener”/>;


这个监听给关了。


我试了把这个监听关了,就不会再报上面那个信息,但是这样子运行tomcat会不会有其他的问题,我就不得而知了。

  

tomcat无故停止解决
============================
2015-6-9 17:11:45 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
严重: The web application [/XXTServer] 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.
2015-6-9 17:11:45 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
严重: The web application [/XXTServer] appears to have started a thread named [commons-pool-EvictionTimer] but has failed to stop it. This is very likely to create a memory leak.
2015-6-9 17:11:45 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
严重: The web application [/XXTServer] appears to have started a thread named [net.sf.ehcache.CacheManager@4391f0] but has failed to stop it. This is very likely to create a memory leak.
2015-6-9 17:11:45 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
严重: The web application [/XXTServer] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak.
2015-6-9 17:11:45 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
严重: The web application [/XXTServer] 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.


  


tomcat常常运行一段时间后自动停止,也不闪退,就卡在那儿……启动时正常;关闭的时候显示没有响应,强行结束进程后日志中报错。 


网上好多人说这是数据库连接没有释放,得从程序上改。我纳闷的是为什么本地开发的时候从来没有这样的问题,独独发布到服务器上就成这样了?!


后来抱着死马当活马医的心态修改了tomcat的内存设置,它好了…… 






Xms256m是最小内存,-Xmx512m是最大内存,其中的256与512可根据你自己的内存做相应调整,PermSize/MaxPermSize最小/最大堆大小.一般报内存不足时,都是说这个太小,堆空间剩余小于5%就会警告,建议把这个稍微设大一点,不过要视自己机器内存大小来设置,我自己的文件如下:


1)linux下
#!/bin/sh
JAVA_OPTS='-server -Xms1024m -Xmx4096m -XX:PermSize=512m -XX:MaxPermSize=2048m'
# -----------------------------


2)windows下
编辑tomcat的catalina.bat文件,在第一行的后面增加一句:
set JAVA_OPTS=-server -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M

注意:没有单引号



================================================
原文:http://blog.csdn.net/cyjch/article/details/51543329
作者:超越
超越的主页:http://blog.csdn.net/cyjch
================================================

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:117070次
    • 积分:3022
    • 等级:
    • 排名:第12813名
    • 原创:193篇
    • 转载:23篇
    • 译文:0篇
    • 评论:5条