XXXX調優參數javascript
約束:css
l 本次調優因條件所限,不涉及數據庫調優;html
l 本次調優從如下幾方面進行:java
說明:node
OS/Nginx/Tomcat調優方案基本聽從網上的基本調優方法,以服務配置的不一樣,加以微調;Jvm調優則聽從Oracle官方的G1最佳實踐。spring
調優基本原則:數據庫
不要單純爲了調優而去調優,應該有針對性的去發現不足,解決問題,以提升性能。apache
因此,調優的前提是作好各類監控分析,包括服務器基礎資源使用、各個應用運行情況、代碼質量、數據庫情況、等等,根據業務的併發,服務器資源,以及存在的問題,有針對性的去優化。json
方法:vim
JMeter併發提交請求,Zabbix監控CPU/Memory/TCP,以GC日誌來驗證調優效果。
調優參數:
Payment-api:
基準:
command=/usr/java/jdk1.8.0_151/bin/java org.springframework.boot.loader.JarLauncher --server.port=94%(process_num)02d
預發佈壓測:
command=/usr/java/jdk1.8.0_151/bin/java -XX:+UseG1GC -Xmx6g -Xms6g -XX:MetaspaceSize=256M -XX:MaxGCPauseMillis=200 -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/gclog/payment-api-outOfMemoryError.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:/data/logs/gclog/payment-api-gc.log -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution org.springframework.boot.loader.JarLauncher --server.port=94%(process_num)02d
正式環境推薦參數:
command=/usr/java/jdk1.8.0_151/bin/java -XX:+UseG1GC -Xmx6g -Xms6g -XX:MetaspaceSize=256M -XX:MaxGCPauseMillis=200 -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/gclog/payment-api-outOfMemoryError.log org.springframework.boot.loader.JarLauncher --server.port=94%(process_num)02d
OS:
配置文件/etc/sysctl.conf
sysctl -w net.ipv4.tcp_syncookies = 1 #防止一個套接字有過多的試圖鏈接達到是引發過載
sysctl -w net.core.somaxconn = 1024 #默認128,鏈接隊列
sysctl -w net.ipv4.tcp_fin_timeout = 30 #timewait的超時時間
sysctl -w net.ipv4.tcp_tw_reuse = 1 #OS直接使用timewait的鏈接
sysctl -w net.ipv4.tcp_tw_recycle = 0 #回收禁用
配置文件/etc/security/limits.conf
* hard nofile 204800
* soft nofile 204800
* soft core unlimited
* soft stack 204800
Nginx:
增長工做線程數和併發鏈接數
啓用長鏈接
啓用緩存/壓縮
其餘
配置工做線程和併發數
worker_processes 8; #CPU
events{
worker_connections 10240; #每個進程打開的最大鏈接數,包含了Nginx與客戶端和Nginx與upstream之間的鏈接
multi_accept on; #能夠一次創建多個鏈接
use epoll;
}
配置後端Server的長鏈接
upstream server_pool{
server localhost:8080 weight=1 max_fails=2 fail_timeout=30s;
server localhost:8180 weight=1 max_fails=2 fail_timeout=30s;
keepalive 300;
}
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade":
proxy_pass http://server_pool/;
}
配置壓縮
gzip on;
gzip_http_version 1.1;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
gzip_proxied any;
gzip_types text/plain text/css application/javascript application/x-javascript application/json application/xml application/vnd.ms-fontobject application/x-font-ttf application/svg+xml application/x-icon;
gzip_vary on; #Vary:Accept-Encoding
gzip_static on; #若是有壓縮好的 直接使用
其餘優化
sendfile on; #減小文件在應用和內核之間的拷貝
tcp_nopush on; #當數據包達到必定大小再發送
tcp_nodelay off; #有數據隨時發送
Tomcat:
vim /data/apache-tomcat-8.0.46-8180/bin/catalina.sh
預發佈:
JAVA_OPTS="-server -XX:+UseG1GC -Xmx4g -Xms4g -XX:MaxGCPauseMillis=200 -XX:MetaspaceSize=256M -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/gclog/tomcatDumpOnOutOfMemoryError.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:/data/logs/gclog/tomcat8180-gc.log -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution"
正式環境推薦參數:
JAVA_OPTS="-server -XX:+UseG1GC -Xmx4g -Xms4g -XX:MaxGCPauseMillis=200 -XX:MetaspaceSize=256M -XX:+DisableExplicitGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/logs/gclog/tomcatDumpOnOutOfMemoryError.log"
vim /data/apache-tomcat-8.0.46-8180/conf/server.xml
啓用鏈接池:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="800"
minSpareThreads="100"
prestartminSpareThreads="true"
maxIdleTime="60000"
maxQueueSize="300"/>
修改鏈接數:
<Connector port="8180" executor="tomcatThreadPool" protocol="org.apache.coyote.http11.Http11AprProtocol"
URIEncoding="UTF-8"
connectionTimeout="20000"
enableLookups="false"
connectionUploadTimeout="150000"
redirectPort="8443"
acceptCount="100"
maxPostSize="10485760"
acceptorThreadCount="2"
disableUploadTimeout="true"
keepAliveTimeout ="6000"
maxKeepAliveRequests="500" />
禁用AJP接口:
<!--
<Connector port="8109" protocol="AJP/1.3" redirectPort="8143" />
-->
啓用APR模式
apr-1.6.5.tar.gz
apr-util-1.6.1.tar.gz
openssl-1.1.0.tar.gz 升級至該版本
vim /etc/profile
export LD_LIBRARY_PATH=/usr/local/apr/lib
source /etc/profile
參考:
Tomcat:
https://blog.csdn.net/weixin_37377511/article/details/80606964
JVM:
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc_tuning.html#recommendations