Centos7-低配情況下 Tomcat jvm內存溢出優化配置及JVM參數說明


很多同學剛開始做項目買了最低配置,但有時運行軟件好幾個,服務器就趴下來,以我的經驗可以這么搞,盡量運行必須要用的軟件,2G內存能干什么,所以還可以優化軟件本身,讓啟動時盡可能少占用內存空間,等用戶上來再升級配置也不遲。

TOMCAT優化
tomcat7默認內存配置,啟動后,大約會占四百多M內存,如果是java程序又比較大,可能會出現以下問題:
java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出
java.lang.OutOfMemoryError: PermGen space ---- PermGen space溢出。
java.lang.StackOverflowError ---- 棧溢出
解決辦法:
修改tomcat/bin/catalina.sh
位置cygwin=false前。

JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m"

JVM參數說明:

-server:一定要作為第一個參數,在多個CUP時性能佳

-Xms:java Heap初始化大小。默認物理內存的1/64

-Xmx:java Heap最大值。建議平均物理內存的一般。不可超過物理內存。

-XX:PermSize:設定內存的永久保存區初始化大小,缺省為64M

-XX:MaxPermSize:設定內存的永久保存區最大大小,缺省委64M、

-XX:SurvivorRatio=2:生還者池的大小,默認是2,如果垃圾回收變成了瓶頸,您可以嘗試定值生成池設置

-XX:NewSize:新生成的池初始化大小,缺省為2M。

-XX:MaxNewSize:新生成的池最大大小。缺省為32M。

這參數讓JVM忽略Xmx參數,瘋狂地吃完一個G物理內存,再吃盡1個G的swap。

-Xss:每個線程的Stack大小,-Xss 15120這使得JBoss沒增加一個線程就會消耗15M內存,而最佳值應該是128k,默認512k

-verbose:gc 實現垃圾回收信息

-Xloggc:gc.log指定垃圾收集日志文件

-Xmn:young generation的heap大小,一般設置為Xmx的3,4之一

-XX:+UseParNewGC:所短minor收集的時間

-XX:+UserConcMarkSweepGC:所短major收集的時間 次選項在Heap Size比較大而且Major收集較長的情況下使用更合適。

-XX:userParNewGC 可用來設置多個並行收集

-XX:ParallelGCThreads可用來增加並行度

-XX:UseParallelGC設置后可以使用並行清理收集器

-XX:+UseBiasedLocking非競爭性的同步選項,鎖機制的性能改善。

-XX:+DisableExplicitGC 禁止System.gc(),免得程序員誤調用gc方法影響性能。

-XX:MaxTenuringThreshold 為放置所有的復制全部發生以及希望對象從eden擴展到舊域,可以把MaxTenuring Threshold設置成0。設置完成后,實際上就不再使用救助空間了,因此應把SurvivorRatio設成最大值以最大化Eden空間,設置如下:

-XX:+UseParNewGC 對年輕代采用多線程並行回收,這樣收得快。

-XX:+CMSParallelRemarkEnabled 在使用UseParNewGC 的情況下, 盡量減少 mark 的時間

-XX:LargePageSizeInBytes 指定 Java heap的分頁頁面大小

-XX:MaxTenuringThreshold 設置垃圾最大年齡。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM