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