Java性能調優

1、Tomcat服務器

一、Jvm參數調優

Tomcat 的啓動參數位於tomcat的安裝目錄\bin目錄下,若是你是Linux操做系統就是catalina.sh文件,若是你是Windows操做系統那麼 你須要改動的就是catalina.bat文件css

JAVA_OPTS="$JAVA_OPTS -server -Xms4096m -Xmx4096m -Xmn1024m -Xss256K -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=15 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/gclogs/gc.log -Djava.awt.headless=true"

解釋:
-server:更高的性能
-Xms4096m:初始堆內存4g
-Xmx4096m:最大堆內存4g
-Xmn1024m:年輕代1g
-Xss256K:每一個線程佔用的空間
-XX:+DisableExplicitGC:禁止顯示調用gc
-XX:MaxTenuringThreshold=15:在年輕代存活次數
-XX:+UseParNewGC:對年輕代採用多線程並行回收
-XX:+UseConcMarkSweepGC:年老代採用CMS回收
-XX:+CMSParallelRemarkEnabled:在使用UseParNewGC 的狀況下, 儘可能減小 mark 的時間
-XX:+UseCMSCompactAtFullCollection:在使用concurrent gc 的狀況下, 防止 memoryfragmention, 對live object 進行整理, 使 memory 碎片減小
-XX:LargePageSizeInBytes=128m:指定 Java heap的分頁頁面大小
-XX:+UseFastAccessorMethods:get,set 方法轉成本地代碼
-XX:+UseCMSInitiatingOccupancyOnly:指示只有在 oldgeneration 在使用了初始化的比例後concurrent collector 啓動收集
-XX:CMSInitiatingOccupancyFraction=70:年老代到達70%進行gc
-Djava.awt.headless=true :Headless模式是系統的一種配置模式。在該模式下,系統缺乏了顯示設備、鍵盤或鼠標。
-XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/gclogs/gc.log:打印日誌信息html

備註:上面的收集器年輕代用的ParNewGC,年老代用的CMS;也能夠用G1收集器java

-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:GCPauseIntervalMillis=200

解釋:
-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC #開啓G1,這兩個要同時使用
-XX:MaxGCPauseMillis=50 #暫停時間目標;
-XX:GCPauseIntervalMillis=200 #暫停間隔目標;ios

二、Connector優化

tomcat的安裝目錄\conf下面的server.xmlspring

<Connector port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
maxThreads="300"
minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
acceptCount="300"
maxProcessors="1000"
minProcessors="5"
useURIValidationHack="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/JavaScript,text/css,text/plain"
redirectPort="8443" />

解釋:
protocol:協議
connectionTimeout:鏈接超時時間毫秒數
URIEncoding:編碼
maxThreads:Tomcat可建立的最大的線程數,即最大併發數
minSpareThreads:最小備用線程數,tomcat啓動時的初始化的線程數。
maxSpareThreads:若是空閒狀態的線程數多於設置的數目,則將這些線程停止,減小這個池中的線程總數
enableLookups:是否容許域名反查
acceptCount:當線程數達到maxThreads後,後續請求會被放入一個等待隊列,這個acceptCount是這個隊列的大小,若是這個隊列也滿了,就直接refuse connection
maxProcessors:最大鏈接數
minProcessors:初始化鏈接數
useURIValidationHack:對url進行檢查
compression:啓動壓縮
compressionMinSize:2048當返回內容大於等於2kb啓動壓縮,到客戶端在解壓
compressableMimeType:壓縮類型tomcat

2、Springboot項目

一、Jvm參數

springboot直接用jar包啓動,在啓動命令裏面加參數,下面是例子:springboot

nohup java -server -Xms4096m -Xmx4096m -Xmn1024m -Xss256K -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=15 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/home/gclogs/gc.log -Djava.awt.headless=true -jar mq.jar &

二、springboot對內置tomcat進行優化

在application.yml中配置服務器

server:
  tomcat:
    uri-encoding: UTF-8
    max-threads: 300
    min-spare-threads: 25
    max-connections: 1000
    accept-count: 300
  port: 8080
  connection-timeout: 20000
  compression:
    enabled: true
    mime-types: text/html,text/xml,text/JavaScript,text/css,text/plain
    min-response-size: 2048

3、性能查看經常使用命令

注:128914是線程id
查看負載:w、uptime
查看cpu:top
內存:free
磁盤:df
IO:iostat、vmstat
查看gc狀況: jstat -gc 128914 2000 2
查看堆棧狀況:jstack 128914
分析gc日誌:more gc.log
查看進程裏面的全部線程狀況:top -Hp 128914多線程

相關文章
相關標籤/搜索