Tomcat之—— linux/centos 解决Tomcat内存溢出
轉(zhuǎn)載請注明出處:http://blog.csdn.net/l1028386804/article/details/78346677
?Tomcat本身不能直接在計算機上運行,需要依賴于操作系統(tǒng)和一個JAVA虛擬機。JAVA程序啟動時JVM會分配一個初始內(nèi)存和最大內(nèi)存給APP。當(dāng)APP需要的內(nèi)存超出內(nèi)存的最大值時虛擬機就會提示內(nèi)存溢出,并且導(dǎo)致應(yīng)用服務(wù)崩潰。
一、常見的Java內(nèi)存溢出有以下三種
1. java.lang.OutOfMemoryError: Java heap space????? 即JVM Heap溢出
解釋說明:JVM在啟動的時候會自動設(shè)置JVM Heap的值,JVM堆的設(shè)置是指java程序運行過程中JVM可以調(diào)配使用的內(nèi)存空間的設(shè)置。其初始空間默認是物理內(nèi)存的1/64,最大空間不可超過物理內(nèi)存。JVM提供-Xmn -Xms -Xmx等選項來進行設(shè)置。
出錯場景:在JVM中,如果98%的時間是用于GC,且可用的Heap size不足2%時,將會出現(xiàn)JVM Heap溢出
解決方法:修改JVM Heap的大小。?????????
2. java.lang.OutOfMemoryError: PermGen space??????? 即PermGen space溢出
解釋說明:PermGen space是指內(nèi)存的永久保存區(qū)域。這個區(qū)域主要存放Class和Meta信息,Class在被Load時就會被放入PermGen space。
出錯場景:如果APP載入很多CLASS,就可能會出現(xiàn)PermGen space溢出。(因為sun的GC不會在程序運行時對PermGen space進行清理),常見于web服務(wù)器對JSP進行pre compile的時候
解決方法:修改MaxPermSize大小
3. java.lang.StackOverflowError???????????????????? 即棧溢出
解釋說明:JVM采用的是棧式的虛擬機,函數(shù)的調(diào)用過程都體現(xiàn)在堆棧和退棧上。
出錯場景:通常棧的大小是1-2MB的,如果調(diào)用構(gòu)造函數(shù)的 “層”太多,則會出現(xiàn)棧溢出
解決方法:修改程序
二、Tomcat的JVM內(nèi)存溢出解決方法
??? 在生產(chǎn)環(huán)境中,tomcat內(nèi)存設(shè)置不好很容易出現(xiàn)JVM內(nèi)存溢,解決方法就是修改Tomcat中的catalina.sh文件。
在catalina.sh文件中,找到cygwin=false,在這一行的前面加入?yún)?shù),具體如下:
1.“m”說明單位是MB,否則默認是KB
2.一般使用物理內(nèi)存的80%作為堆大小
3.一般把-Xms和-Xmx設(shè)為一樣大
4.一般把-Xmn設(shè)置為-Xmx值的1/4
5.一般將堆的總大小的50%到60%分配給新生成的池
三、jvm參數(shù)說明
-server???????????????? 一定要作為第一個參數(shù),啟用JDK的server版本,在多個CPU時性能佳
-Xms??????????????????? java Heap初始大小。 默認是物理內(nèi)存的1/64。
-Xmx??????????????????? java heap最大值。建議均設(shè)為物理內(nèi)存的80%。不可超過物理內(nèi)存。
-Xmn??????????????????? java heap最小值,一般設(shè)置為Xmx的3、4分之一。
-XX:PermSize??????????? 設(shè)定內(nèi)存的永久保存區(qū)初始大小,缺省值為64M。
-XX:MaxPermSize???????? 設(shè)定內(nèi)存的永久保存區(qū)最大大小,缺省值為64M。
-XX:SurvivorRatio=2???? 生還者池的大小,默認是2。如果垃圾回收變成了瓶頸,您可以嘗試定制生成池設(shè)置
-XX:NewSize???????????? 新生成的池的初始大小。 缺省值為2M。
-XX:MaxNewSize????????? 新生成的池的最大大小。 缺省值為32M。
+XX:AggressiveHeap????? 讓jvm忽略Xmx參數(shù),瘋狂地吃完一個G物理內(nèi)存,再吃盡一個G的swap。
-Xss??????????????????? 每個線程的Stack大小
-verbose:gc???????????? 現(xiàn)實垃圾收集信息
-Xloggc:gc.log????????? 指定垃圾收集日志文件
-XX:+UseParNewGC??????? 縮短minor收集的時間
-XX:+UseConcMarkSweepGC 縮短major收集的時間
-XX:userParNewGC??????? 可用來設(shè)置并行收集(多CPU)
-XX:ParallelGCThreads?? 可用來增加并行度(多CPU)
-XX:UseParallelGC?????? 設(shè)置后可以使用并行清除收集器(多CPU)
總結(jié)
以上是生活随笔為你收集整理的Tomcat之—— linux/centos 解决Tomcat内存溢出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android win10驱动安装失败,
- 下一篇: linux检查swap配置,Linux环