Java性能調優


一、Tomcat服務器

1、Jvm參數調優

Tomcat 的啟動參數位於tomcat的安裝目錄\bin目錄下,如果你是Linux操作系統就是catalina.sh文件,如果你是Windows操作系統那么 你需要改動的就是catalina.bat文件

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:打印日志信息

備注:上面的收集器年輕代用的ParNewGC,年老代用的CMS;也可以用G1收集器

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

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

2、Connector優化

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

<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:壓縮類型

二、Springboot項目

1、Jvm參數

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

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 &

2、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

三、性能查看常用命令

注: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM