The NoteBook of EricKong

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

          1.內(nèi)存設(shè)置(VM參數(shù)調(diào)優(yōu))
          (1). Windows環(huán)境下,是tomcat解壓版(執(zhí)行startup.bat啟動(dòng)tomcat) ,解決辦法:
          修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件開頭增加如下設(shè)置:
          set JAVA_OPTS=-Xms512m -Xmx512m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=512m
          備注:一定加在catalina.bat最前面。
          (2). Windows環(huán)境下,是tomcat安裝版(利用windows的系統(tǒng)服務(wù)啟動(dòng)tomcat),解決辦法:
          修改注冊(cè)表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\JavaOptions
          原值為:
          -Dcatalina.home=E:\Tomcat 6.0
          -Dcatalina.base=E:\Tomcat 6.0
          -Djava.endorsed.dirs=E:\Tomcat 6.0\common\endorsed
          -Djava.io.tmpdir=E:\Tomcat 6.0\temp
          -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
          -Djava.util.logging.config.file=E:\Tomcat 6.0\conf\logging.properties
          加入:
          Xms512m -Xmx512m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=512m
          重起tomcat服務(wù),設(shè)置生效。
          (3). Linux環(huán)境下, ,解決辦法:
          修改“%TOMCAT_HOME%\bin\catalina.sh”文件,在文件開頭增加如下設(shè)置:JAVA_OPTS=’-Xms256m -Xmx512m’

          各參數(shù)詳解:
          -Xms:設(shè)置JVM初始內(nèi)存大小(默認(rèn)是物理內(nèi)存的1/64)
          -Xmx:設(shè)置JVM可以使用的最大內(nèi)存(默認(rèn)是物理內(nèi)存的1/4,建議:物理內(nèi)存80%)
          -Xmn:設(shè)置JVM最小內(nèi)存(128-256m就夠了,一般不設(shè)置)

          默認(rèn)空余堆內(nèi)存小于 40%時(shí),JVM就會(huì)增大堆直到-Xmx的最大限制;空余堆內(nèi)存大于70%時(shí),JVM會(huì)減少堆直到-Xms的最小限制。因此服務(wù)器一般設(shè)置-Xms、 -Xmx相等以避免在每次GC 后調(diào)整堆的大小。
          在較大型的應(yīng)用項(xiàng)目中,默認(rèn)的內(nèi)存是不夠的,有可能導(dǎo)致系統(tǒng)無法運(yùn)行。常見的問題是報(bào)Tomcat內(nèi)存溢出錯(cuò)誤“java.lang.OutOfMemoryError: Java heap space”,從而導(dǎo)致客戶端顯示500錯(cuò)誤。

          -XX:PermSize :為JVM啟動(dòng)時(shí)Perm的內(nèi)存大小
          -XX:MaxPermSize :為最大可占用的Perm內(nèi)存大小(默認(rèn)為32M)
          -XX:MaxNewSize,默認(rèn)為16M

          PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域,這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Loader時(shí)就會(huì)被放到PermGen space中,它和存放類實(shí)例(Instance)的Heap區(qū)域不同,GC(Garbage Collection)不會(huì)在主程序運(yùn)行期對(duì)PermGen space進(jìn)行清理,所以如果你的應(yīng)用中有很CLASS的話,就很可能出現(xiàn)“java.lang.OutOfMemoryError: PermGen space”錯(cuò)誤。
          對(duì)于WEB項(xiàng)目,jvm加載類時(shí),永久域中的對(duì)象急劇增加,從而使jvm不斷調(diào)整永久域大小,為了避免調(diào)整),你可以使用更多的參數(shù)配置。如果你的WEB APP下都用了大量的第三方j(luò)ar, 其大小超過了jvm默認(rèn)的大小,那么就會(huì)產(chǎn)生此錯(cuò)誤信息了。
          其它參數(shù):
          -XX:NewSize :默認(rèn)為2M,此值設(shè)大可調(diào)大新對(duì)象區(qū),減少Full GC次數(shù)
          -XX:NewRatio :改變新舊空間的比例,意思是新空間的尺寸是舊空間的1/8(默認(rèn)為8)
          -XX:SurvivorRatio :改變Eden對(duì)象空間和殘存空間的尺寸比例,意思是Eden對(duì)象空
          間的尺寸比殘存空間大survivorRatio+2倍(缺省值是10)
          -XX:userParNewGC 可用來設(shè)置并行收集【多CPU】
          -XX:ParallelGCThreads 可用來增加并行度【多CPU】
          -XXUseParallelGC 設(shè)置后可以使用并行清除收集器【多CPU】

          2.修改tomcat讓其支持NIO
          修改前:
          protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
          修改成支持NIO的類型,配置如下 :
          protocol="org.apache.coyote.http11.Http11NioProtocol " connectionTimeout="20000" redirectPort="8443" />
          3.并發(fā)數(shù)設(shè)置
          默認(rèn)的tomcat配置,并發(fā)測(cè)試時(shí),可能30個(gè)USER上去就當(dāng)機(jī)了。
          添加

          maxThreads="600" //最大線程數(shù)
          minSpareThreads="100" //初始化時(shí)創(chuàng)建的線程數(shù)
          maxSpareThreads="500" //一旦線程超過這個(gè)值,Tomcat會(huì)關(guān)閉不需要的socket線程
          acceptCount="700"http://指定當(dāng)所有可以使用的處理請(qǐng)求的線程數(shù)都被使用時(shí),可以放到
          處理隊(duì)列中的請(qǐng)求數(shù),超過這個(gè)數(shù)的請(qǐng)求將不予處理

          connectionTimeout="20000"
          redirectPort="8443" />

          或者
          name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="400" />

          executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" connectionTimeout="20000" enableLookups="false"
          redirectPort="8443" URIEncoding="UTF-8" acceptCount="1000" />
          4.Java虛擬機(jī)調(diào)優(yōu)
          應(yīng)該選擇SUN的JVM,在滿足項(xiàng)目需要的前提下,盡量選用版本較高的JVM,一般來說高版本產(chǎn)品在速度和效率上比低版本會(huì)有改進(jìn)。 JDK1.4比JDK1.3性能提高了近10%-20%,JDK1.5比JDK1.4性能提高25%-75%。
          5.禁用DNS查詢
          設(shè)置enableLookups="false":
          enableLookups="false" redirectPort="8443" URIEncoding="UTF-8" acceptCount="1000" />
           當(dāng)web應(yīng)用程序向要記錄客戶端的信息時(shí),它也會(huì)記錄客戶端的IP地址或者通過域名服務(wù)器查找機(jī)器名轉(zhuǎn)換為IP地址。DNS查詢需要占用網(wǎng)絡(luò),并且包括可能從很多很遠(yuǎn)的服務(wù)器或者不起作用的服務(wù)器上去獲取對(duì)應(yīng)的IP的過程,這樣會(huì)消耗一定的時(shí)間。為了消除DNS查詢對(duì)性能的影響我們可以關(guān)閉 DNS查詢,方式是修改server.xml文件中的enableLookups參數(shù)值為false。
          6.設(shè)置解決亂碼問題
          URIEncoding="UTF-8" acceptCount="1000" />

          二、TOMCAT內(nèi)存監(jiān)控

          1.設(shè)置tomcat的perm size:

          2.開啟監(jiān)控

          在命令行輸入jconsole,在彈出窗口中建立本地端口監(jiān)控,如下圖:

           

          使用安裝版Tomcat 6.0 ,打開tomcat界面選擇java這一項(xiàng),在java options:
          加入

          Java代碼 復(fù)制代碼 收藏代碼
          1. -Djava.rmi.server.hostname=127.0.0.1 
          2. -Dcom.sun.management.jmxremote.port=8088 
          3. -Dcom.sun.management.jmxremote.ssl=false 
          4. -Dcom.sun.management.jmxremote.authenticate=false 
          1. -Djava.rmi.server.hostname=127.0.0.1  
          2. -Dcom.sun.management.jmxremote.port=8088  
          3. -Dcom.sun.management.jmxremote.ssl=false  
          4. -Dcom.sun.management.jmxremote.authenticate=false  

          使用jconsole 127.0.0.1:8088可以連接成功,也能看到j(luò)vm運(yùn)行情況,
          但此時(shí)訪問已經(jīng)部署的應(yīng)用,卻提示“無法顯示網(wǎng)頁(yè)”
          今天又研究了一會(huì),猜想了一下是不是這個(gè)端口獨(dú)占的,不能和應(yīng)用沖突,把Dcom.sun.management.jmxremote.port=8088 改為80, 重啟tomcat 果然,應(yīng)用可以訪問。之后去網(wǎng)上看來些相關(guān)信息,確實(shí)為兩個(gè)端口,不能占用。

          posted on 2015-05-11 15:58 Eric_jiang 閱讀(169) 評(píng)論(0)  編輯  收藏 所屬分類: tomcat
          主站蜘蛛池模板: 望城县| 诏安县| 毕节市| 前郭尔| 蒙自县| 陈巴尔虎旗| 通化市| 理塘县| 曲松县| 游戏| 镇江市| 平远县| 许昌市| 望江县| 伊金霍洛旗| 大余县| 盐山县| 康乐县| 宝鸡市| 新野县| 廊坊市| 台江县| 安福县| 阜康市| 宜阳县| 互助| 谷城县| 财经| 湖北省| 阿合奇县| 榆林市| 土默特左旗| 呼和浩特市| 裕民县| 讷河市| 栾川县| 曲阜市| 天峨县| 祁东县| 高密市| 安陆市|