tomcat(五) JVM優化以及監控

一、併發優化

1、併發參數

  • 1、maxThreads:最大的併發請求數,當cpu利用率高的時候,不宜增加線程的個數,當cpu利用率不高,大部分是io阻塞類的操作時,可以適當增加該值
  • 2、maxSpareThreads:Tomcat連接器的最大空閒 socket 線程數
  • 3、acceptCount:當處理任務的線程數達到最大時,接受排隊的請求個數
  • 4、connectionTimeout:網絡連接超時,單位毫秒
  • 5、enableLookups:若爲false則不進行DNS查詢,提高業務能力應設置爲false
  • 6、disableUploadTimeout:若爲true則禁用上傳超時

2、tomcat併發設置

 在conf下的server.xml文件中<Connector>節點進行配置
    <Connector port="8080" protocol="HTTP/1.1"
         connectionTimeout="30000"
         redirectPort="8443"
         maxThreads="400"
         minSpareThreads="50"
         maxSpareThreads="200"
         acceptCount="400"
         enableLookups="false"
         disableUploadTimeout="true"     />

二、內存優化

1、對象的生存空間分類

  • 新生代:用於存放“早逝”對象(即瞬時對象)。例如:在創建對象時或者調用方法時使用的臨時對象或局部變量
  • 老年代:用於存放“駐留”對象(即較長時間被引用的對象)。往往體現爲一個大型程序中的全局對象或長時間被使用的對象
  • 持久代:用於存放“永久”對象。這些對象管理着運行於JVM中的類和方法

2、存在參數

  • -server:一定要作爲第一個參數,在多個CPU時性能佳
  • -Xms:新生代和老年代初始大小。 默認是物理內存的1/64
  • -Xmx:總共可用的最大空間。建議均設爲物理內存的一半。不可超過物理內存
  • -XX:NewSize:新生代的初始空間
  • -XX:MaxNewSize:新生代的最大空間
  • -XX:PermSize:設定內存的持久代初始大小。缺省值爲64M
  • -XX:MaxPermSize:設定內存的持久代最大大小。缺省值爲64M
  • -Xmn:young generation(年輕代)的heap大小。一般設置爲Xmx的3、4分之一

3、tomcat內存配置

  • 方法1
    在bin下的catalina.bat文件中echo Using CATALINA_BASE字段進行配置
在"%CATALINA_BASE%"的前一行加入如下代碼
set JAVA_OPTS=%JAVA_OPTS% -server -Xms8192m -Xmx8192m -Xmn1890m 
  • 方法2
    在tomcat啓動腳本中添加一個執行環境變量的腳本
if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
  . "$CATALINA_BASE/bin/setenv.sh"

/bin/setenv.sh

JRE_HOME='/data/app/jdk1.8.0_77'
JAVA_OPTS='-Duser.timezone=GMT+08  -Xms6G -Xmx6G'

JAVA_OPTS對本機上的所有java虛擬機均有效
CATALINA_OPTS僅僅對運行tomcat實例的java虛擬機有效

三、JVM垃圾回收機制

1、jvm垃圾回收參數

  • -verbose:gc:顯示垃圾收集信息(在虛擬機發生內存回收時在輸出設備顯示信息)
  • UseConcMarkSweepGC:開啓此參數使用ParNew & CMS(serial old爲替補)蒐集器
  • MaxTenuringThreshold:晉升老年代的最大年齡。默認爲15,比如設爲10,則對象在10次普通GC後將會被放入年老代
  • -XX:+ExplicitGCInvokesConcurrent:System.gc()可以與應用程序併發執行
  • GCTimeRatio:設置系統的吞吐量。比如設爲99,則GC時間比爲1/1+99=1%,也就是要求吞吐量爲99%。若無法滿足會縮小新生代大小
  • CMSInitiatingOccupancyFraction:觸發CMS收集器的內存比例。比如60%的意思就是說,當內存達到60%,就會開始進行CMS併發收集
  • CMSFullGCsBeforeCompaction:設置在幾次CMS垃圾收集後,觸發一次內存整理
  • -Xnoclassgc:禁用類垃圾回收,性能會高一點

2、垃圾回收配置

垃圾回收配置往往和內存配置是在同一字段,並且要寫在同一行才能生效

set JAVA_OPTS=%JAVA_OPTS% 
-server -Xms8192m -Xmx8192m -Xmn1890m -verbose:gc 
-XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=5 -XX:+ExplicitGCInvokesConcurrent -XX:GCTimeRatio=19 -XX:CMSInitiatingOccupancyFraction=70 -XX:CMSFullGCsBeforeCompaction=0 -Xnoclassgc -XX:SoftRefLRUPolicyMSPerMB=0

四、java性能監控工具

1、java常見性能問題

  • 內存不足
  • 內存泄露
  • 線程鎖死
  • 鎖競爭
  • java消耗過多的cpu

2、常用性能工具

jps

監控jvm進程狀態信息

jps [options] [hostid]
	-m:輸出傳入main方法的參數
	-j:顯示main類或jar的完全限定名稱
	-v:爲jvm指定的參數

jstack

查看某個java進程內的線程堆棧信息

jstack [options] pid

jmap

查看某個java進程堆進程使用情況

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