JVM Tomcat Nginx调优参数参考

XXXX调优参数

约束:

l  本次调优因条件所限,不涉及数据库调优;

l  本次调优从以下几方面进行:

  • OS
  • Nginx
  • Tomcat
  • Jvm

说明:

OS/Nginx/Tomcat调优方案基本遵从网上的基本调优方法,以服务配置的不同,加以微调;Jvm调优则遵从Oracle官方的G1最佳实践。

调优基本原则:

       不要单纯为了调优而去调优,应该有针对性的去发现不足,解决问题,以提高性能。

所以,调优的前提是做好各种监控分析,包括服务器基础资源使用、各个应用运行状况、代码质量、数据库状况、等等,根据业务的并发,服务器资源,以及存在的问题,有针对性的去优化。

方法:

       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

原文地址:https://www.cnblogs.com/jxdong116/p/9713431.html