/bin/catalina.bat
tomcat調高最大內存為1024M,解決內存溢出卫病;
set JAVA_OPTS= -Xmx1024M -Xms512M
設置編碼格式,解決js文件中文亂碼
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS% -Dfile.encoding=UTF-8"
Tomcat性能調優(yōu)
找到Tomcat根目錄下的conf目錄,修改server.xml文件的內容窟扑。
1、maxConnections
:這個參數是指在同一時間漏健,tomcat能夠接受的最大連接數嚎货。對于Java的阻塞式BIO,默認值是maxthreads的值蔫浆;如果在BIO模式使用定制的Executor執(zhí)行器殖属,默認值將是執(zhí)行器中maxThreads的值。對于Java 新的NIO模式克懊,maxConnections 默認值是10000忱辅,所以這個參數我們一般保持不動即可。
2谭溉、maxThreads=“300”
:設置當前Tomcat的最大并發(fā)數墙懂。Tomcat默認配置的最大請求數是150個,即同時能支持150個并發(fā)扮念。一般來說损搬,在高并發(fā)的I/O密集型應用中,這個值設置為1000左右比較合理。
3巧勤、minSpareThreads=“50”
:設置當前Tomcat初始化時創(chuàng)建的線程數嵌灰,默認值為25。
4颅悉、acceptCount=“250”
:當同時連接的人數達到maxThreads參數設置的值時沽瞭,還可以接收排隊的連接數量,超過這個連接的則直接返回拒絕連接剩瓶。指定當任何能夠使用的處理請求的線程數都被使用時驹溃,能夠放到處理隊列中的請求數,超過這個數的請求將不予處理延曙。默認值為100豌鹤。在實際應用中,如果想加大Tomcat的并發(fā)數 枝缔,應該同時加大acceptCount和maxThreads的值布疙。
5、enableLookups=“false”
:是否開啟域名反查愿卸,一般設置為false來提高處理能力灵临,它的取值還有true,一般很少使用擦酌。
6俱诸、maxKeepAliveRequests=“1”
:nginx動態(tài)的轉給tomcat菠劝,nginx是不能keepalive的赊舶,而tomcat端默認開啟了keepalive,會等待keepalive的timeout赶诊,默認不設置就是使用connectionTimeout笼平。所以必須設置tomcat的超時時間,并關閉tomcat的keepalive舔痪。否則會產生大量tomcat的socket timewait寓调。maxKeepAliveRequests=”1”就可以避免tomcat產生大量的TIME_WAIT連接,從而從一定程度上避免tomcat假死锄码。
JVM性能調優(yōu)
Tomcat本身還是運行在JVM上的夺英,通過對JVM參數的調整我們可以使Tomcat擁有更好的性能。目前針對JVM的調優(yōu)主要有兩個方面:內存調優(yōu)和垃圾回收策略調優(yōu)滋捶。
一痛悯、內存調優(yōu)
找到Tomcat根目錄下的bin目錄,設置catalina.sh文件中JAVA_OPTS變量即可重窟,因為后面的啟動參數會把JAVA_OPTS作為JVM的啟動參數來處理载萌。再說Java虛擬機的內存結構是有點復雜的,相信很多人在理解上都是很抽象的,它主要分為堆扭仁、棧垮衷、方法區(qū)和垃圾回收系統(tǒng)等幾個部分組成,下面是我從網上扒的內存結構圖:
內存調優(yōu)這塊呢乖坠,無非就是通過修改它們各自的內存空間的大小搀突,使應用能夠更加合理的運用,下圖是我根據我機子的性能設置的參數熊泵,給各位詳細解釋一下各個參數的含義吧:
1描姚、-Xmx512m
:設置Java虛擬機的堆的最大可用內存大小,單位:兆(m)戈次,整個堆大小=年輕代大小 + 年老代大小 + 持久代大小轩勘。持久代一般固定大小為64m。堆的不同分布情況怯邪,對系統(tǒng)會產生一定的影響绊寻。盡可能將對象預留在新生代,減少老年代GC的次數(通常老年回收起來比較慢)悬秉。實際工作中澄步,通常將堆的初始值和最大值設置相等,這樣可以減少程序運行時進行的垃圾回收次數和空間擴展和泌,從而提高程序性能村缸。
2、-Xms512m
:設置Java虛擬機的堆的初始值內存大小武氓,單位:兆(m)梯皿,此值可以設置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內存县恕。
3东羹、-Xmn170m
:設置年輕代內存大小,單位:兆(m)忠烛,此值對系統(tǒng)性能影響較大属提,Sun官方推薦配置為整個堆的3/8。一般在增大年輕代內存后美尸,也會將會減小年老代大小冤议。
4、-Xss128k
:設置每個線程的棧大小师坎。JDK5.0以后每個線程棧大小為1M恕酸,以前每個線程棧大小為256K。更具應用的線程所需內存大小進行調整屹耐。
在相同物理內存下尸疆,減小這個值能生成更多的線程椿猎。但是操作系統(tǒng)對一個進程內的線程數還是有限制的,不能無限生成寿弱,經驗值在3000~5000左右犯眠。
5、-XX:NewRatio=4
:設置年輕代(包括Eden和兩個Survivor區(qū))與年老代的比值(除去持久代)症革。設置為4筐咧,則年輕代與年老代所占比值為1:4,年輕代占整個堆棧的1/5 噪矛。
6量蕊、-XX:SurvivorRatio=4
:設置年輕代中Eden區(qū)與Survivor區(qū)的大小比值。設置為4艇挨,則兩個Survivor區(qū)與一個Eden區(qū)的比值為2:4残炮,一個Survivor區(qū)占整個年輕代的1/6。
7缩滨、-XX:MaxPermSize=16m
:設置持久代大小為16m势就,上面也說了,持久代一般固定的內存大小為64m脉漏。
8苞冯、-XX:MaxTenuringThreshold=0
:設置垃圾最大年齡。
如果設置為0的話侧巨,則年輕代對象不經過Survivor區(qū)舅锄,直接進入年老代。對于年老代比較多的應用司忱,可以提高效率皇忿。
如果將此值設置為一個較大值,則年輕代對象會在Survivor區(qū)進行多次復制烘贴,這樣可以增加對象再年輕代的存活時間禁添,增加在年輕代即被回收的概論。
二桨踪、垃圾回收策略調優(yōu)
找到Tomcat根目錄下的bin目錄,也是設置catalina.sh文件中JAVA_OPTS變量即可芹啥。我們都知道Java虛擬機都有默認的垃圾回收機制锻离,但是不同的垃圾回收機制的效率是不同的,正是因為這點我們才經常對Java虛擬機的垃圾回收策略進行相應的調整墓怀。下面也是通過我的一些需求來配置的垃圾回收策略:
Java虛擬機的垃圾回收策略一般分為:串行收集器汽纠、并行收集器和并發(fā)收集器。
串行收集器:
1傀履、-XX:+UseSerialGC
:代表垃圾回收策略為串行收集器虱朵,即在整個掃描和復制過程采用單線程的方式來進行,適用于單CPU、新生代空間較小及對暫停時間要求不是非常高的應用上碴犬,是client級別默認的GC方式絮宁,主要在JDK1.5之前的垃圾回收方式。
并發(fā)收集器:
1服协、-XX:+UseParallelGC
:代表垃圾回收策略為并行收集器(吞吐量優(yōu)先)绍昂,即在整個掃描和復制過程采用多線程的方式來進行,適用于多CPU偿荷、對暫停時間要求較短的應用上窘游,是server級別默認采用的GC方式。此配置僅對年輕代有效跳纳。該配置只能讓年輕代使用并發(fā)收集忍饰,而年老代仍舊使用串行收集。
2寺庄、-XX:ParallelGCThreads=4
:配置并行收集器的線程數喘批,即:同時多少個線程一起進行垃圾回收。此值最好配置與處理器數目相等铣揉。
3饶深、-XX:+UseParallelOldGC:配置年老代垃圾收集方式為并行收集。JDK6.0支持對年老代并行收集 逛拱。
4敌厘、-XX:MaxGCPauseMillis=100
:設置每次年輕代垃圾回收的最長時間,如果無法滿足此時間朽合,JVM會自動調整年輕代大小俱两,以滿足此值。
5曹步、-XX:+UseAdaptiveSizePolicy
:設置此選項后宪彩,并行收集器會自動選擇年輕代區(qū)大小和相應的Survivor區(qū)比例,以達到目標系統(tǒng)規(guī)定的最低相應時間或者收集頻率等讲婚,此值建議使用并行收集器時尿孔,一直打開。
并發(fā)收集器:
1筹麸、-XX:+UseConcMarkSweepGC
:代表垃圾回收策略為并發(fā)收集器活合。
好了,到此我對虛擬機的垃圾回收策略總結就這么多物赶,還是這句話:優(yōu)化的學習一直在路上白指,下面還有一張從其他博客中偷到的圖,據說以上三種GC機制是需要配合使用的酵紫。