【架构实战】Tomcat/Nginx性能调优实战
一、Tomcat性能调优1. 线程池配置!-- server.xml --Connectorport8080protocolHTTP/1.1connectionTimeout20000redirectPort8443maxThreads500minSpareThreads50maxConnections10000acceptCount200keepAliveTimeout30000maxKeepAliveRequests100compressiononcompressionMinSize2048compressableMimeTypetext/html,text/xml,text/plain,application/json/参数说明参数说明推荐值maxThreads最大工作线程数200-500minSpareThreads最小空闲线程数50maxConnections最大连接数10000acceptCount等待队列长度200connectionTimeout连接超时ms200002. JVM参数优化# catalina.shJAVA_OPTS-server \ -Xms4g -Xmx4g \ -Xmn2g \ -XX:MetaspaceSize256m \ -XX:MaxMetaspaceSize512m \ -XX:UseG1GC \ -XX:MaxGCPauseMillis200 \ -XX:G1HeapRegionSize16m \ -XX:HeapDumpOnOutOfMemoryError \ -XX:HeapDumpPath/logs/heapdump.hprof \ -XX:PrintGCDetails \ -XX:PrintGCDateStamps \ -Xloggc:/logs/gc.log3. NIO连接器!-- 使用NIO连接器默认 --Connectorport8080protocolorg.apache.coyote.http11.Http11NioProtocolmaxThreads500maxConnections10000acceptCount200/!-- 使用NIO2连接器异步IO --Connectorport8080protocolorg.apache.coyote.http11.Http11Nio2ProtocolmaxThreads500maxConnections10000/4. 静态资源优化!-- 开启静态资源缓存 --servletservlet-namedefault/servlet-nameservlet-classorg.apache.catalina.servlets.DefaultServlet/servlet-classinit-paramparam-namedebug/param-nameparam-value0/param-value/init-paraminit-paramparam-namelistings/param-nameparam-valuefalse/param-value/init-paraminit-paramparam-namesendfileSize/param-nameparam-value48/param-value/init-paramload-on-startup1/load-on-startup/servlet二、Nginx性能调优1. 基础配置# nginx.conf user nginx; worker_processes auto; # 自动设置为CPU核数 worker_cpu_affinity auto; # CPU亲和性 error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; # 最大文件描述符 worker_rlimit_nofile 65535; events { worker_connections 65535; # 每个worker最大连接数 use epoll; # 使用epollLinux multi_accept on; # 一次接受多个连接 } http { include /etc/nginx/mime.types; default_type application/octet-stream; # 日志格式 log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for $request_time $upstream_response_time; access_log /var/log/nginx/access.log main buffer32k flush5s; # 基础优化 sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; keepalive_requests 1000; # 压缩 gzip on; gzip_min_length 1k; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript; gzip_vary on; # 缓冲区 client_body_buffer_size 128k; client_max_body_size 100m; client_header_buffer_size 1k; large_client_header_buffers 4 4k; # 超时 client_body_timeout 60s; client_header_timeout 60s; send_timeout 60s; # 上游连接池 upstream backend { keepalive 100; # 保持100个长连接 server 192.168.1.10:8080 weight3; server 192.168.1.11:8080 weight3; server 192.168.1.12:8080 weight2; server 192.168.1.13:8080 backup; } server { listen 80; server_name example.com; # 静态资源缓存 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; add_header Cache-Control public, no-transform; } # API代理 location /api/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Connection ; # 启用长连接 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 超时配置 proxy_connect_timeout 5s; proxy_read_timeout 60s; proxy_send_timeout 60s; # 缓冲区 proxy_buffer_size 4k; proxy_buffers 8 4k; proxy_busy_buffers_size 8k; } } }2. 缓存配置# 代理缓存 proxy_cache_path /var/cache/nginx levels1:2 keys_zoneapi_cache:10m max_size1g inactive60m use_temp_pathoff; server { location /api/product/ { proxy_cache api_cache; proxy_cache_key $scheme$request_method$host$request_uri; proxy_cache_valid 200 10m; proxy_cache_valid 404 1m; proxy_cache_use_stale error timeout updating; add_header X-Cache-Status $upstream_cache_status; proxy_pass http://backend; } }3. 限流配置# 限流区域 limit_req_zone $binary_remote_addr zoneapi_limit:10m rate100r/s; limit_conn_zone $binary_remote_addr zoneconn_limit:10m; server { location /api/ { # 请求限流 limit_req zoneapi_limit burst200 nodelay; limit_req_status 429; # 连接限流 limit_conn conn_limit 100; limit_conn_status 503; proxy_pass http://backend; } }4. SSL优化server { listen 443 ssl http2; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem; # SSL优化 ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers off; # HSTS add_header Strict-Transport-Security max-age63072000 always; # OCSP Stapling ssl_stapling on; ssl_stapling_verify on; }三、性能对比配置项默认值优化值提升worker_connections10246553564xkeepalive_timeout75s65s减少连接占用gzipoffon减少60%流量proxy keepalive0100减少连接建立开销四、总结Tomcat和Nginx调优是提升系统性能的重要手段Tomcat线程池、JVM参数、NIO连接器Nginxworker配置、缓存、限流、SSL优化监控持续监控性能指标最佳实践根据服务器配置调整线程数开启Gzip压缩合理配置缓存使用HTTP/2个人观点仅供参考