文章目錄
一、併發優化
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