(轉載)Tomcat的JVM內存溢出解決方法



原文作者: 我是超越
原文鏈接:https://blog.csdn.net/cyjch/article/details/51543329
版權聲明:本文爲CSDN博主「我是超越」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。



在生產環境中,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當前的空閒內存和最大內存。

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–>
;

這個監聽給關了。

我試了把這個監聽關了,就不會再報上面那個信息,但是這樣子運行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

================================================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章