JVM Tomcat Nginx調優參數參考

XXXX調優參數javascript

約束:css

l  本次調優因條件所限,不涉及數據庫調優;html

l  本次調優從如下幾方面進行:java

  • OS
  • Nginx
  • Tomcat
  • Jvm

說明: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

相關文章
相關標籤/搜索