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