总结Tomcat优化方法
在目前流行的互联网架构中,Tomcat在目前的网络编程中是举足轻重的,由于Tomcat的运行依赖于JVM,从虚拟机的角度把Tomcat的优化分为:
- Linux内核参数调优
- JVM调优
- Tomcat 调优
1. Linux内核参数调优
1.1 打开的文件数量的限制
查看系统允许当前用户进程打开的文件数量的限制:ulimit -n 默认值为1024 。即是Linux操作系统对一个进程打开的文件句柄数量的限制
ulimit参数含义
参数 | 含义 |
---|---|
-H | 设置硬资源限制,一旦设置不能增加. |
-S | 设置软资源限制,设置后可以增加,但不能超过硬资源设置 |
-a | 显示当前所有limit信息 |
-c | 最大的core文件大小,以blocks为单位 |
-d | 进程最大的数据段大小,以blocks为单位 |
-f | 进程可以创造文件的最大值,以kbytes为单位 |
-l | 最大可加锁内存大小,以kbytes为单位 |
-m | 最大内存大小,以kbytes为单位 |
-n | Linux操作系统对一个进程可以打开最大文件描述符的数量. |
-p | 管道缓冲区大小,以kbytes为单位 |
-s | 线程栈大小,以kbytes为单位 |
-t | 最大CPU占用时间,以秒为单位 |
-u | 用户最大可用的进程数 |
-v | 进程最大可用的虚拟机内存,以kbytes为单位. |
对于想支持更高数量的TCP并发连接的通讯处理程序,就必须修改Linux对当前用户的进程同时打开的文件数量的软限制(soft limit)和硬限制(hardlimit)。其中软限制是指Linux在当前系统能够承受的范围内进一步限制用户同时打开的文件数;硬限制则是根据系统硬件资源状况(主要是系统内存)计算出来的系统最多可同时打开的文件数量。通常软限制小于或等于硬限制。
配置文件:/etc/security/limits.conf
echo '* soft nofile 655350' >>/etc/security/limits.conf
echo '* hard nofile 655350' >>/etc/security/limits.conf
echo '* soft nproc 655350' >>/etc/security/limits.conf
echo '* hard nproc 650000' >>/etc/security/limits.conf
hard和soft两个值都代表什么意思呢?
soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错
配置完成后重新登录参数生效
临时生效方法(重启失效):
ulimit -Hn 65535
ulimit -Sn 65535
如果只是配置tomcat用户打开文件数:
echo 'tomcat soft nofile 655350' >>/etc/security/limits.conf
echo 'tomcat hard nofile 655350' >>/etc/security/limits.conf
echo 'tomcat soft nproc 655350' >>/etc/security/limits.conf
echo 'tomcat hard nproc 650000' >>/etc/security/limits.conf
1.2 Linux网络内核对TCP连接的有关限制
配置文件:/etc/sysctl.conf
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf
echo "net.ipv4.ip_local_port_range = 10000 65000" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 8192" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_tw_buckets = 10000" >> /etc/sysctl.conf
echo "net.core.somaxconn=8192" >> /etc/sysctl.conf
sysctl -p
即时生效,不用重启或注销登录
2. JVM优化
2.1 内存空间优化
配置文件:/usr/local/tomcat/bin/catalina.sh
JAVA_OPTS="-server -Xms4g -Xmx4g -Xss512k -Xmn1g \
-XX:CMSInitiatingOccupancyFraction=65 -XX:+AggressiveOpts \
-XX:+UseBiasedLocking -XX:+DisableExplicitGC \
-XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:PermSize=128m \
-XX:MaxPermSize=512m -XX:CMSFullGCsBeforeCompaction=5 \
-XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC \
-XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled \
-XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m \
-XX:+UseFastAccessorMethods"
参数 | 含义 |
---|---|
-server | 服务器模式 |
-Xms | 堆内存初始化大小 |
-Xmx | 堆内存空间上限 |
-XX:NewSize= | 新生代空间初始化大小 |
-XX:MaxNewSize= | 新生代空间最大值 |
3. Tomcat 调优
配置文件:/usr/local/tomcat/conf/server.xml
3.1 maxThreads 修改
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
-->
修改为:
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="1500" minSpareThreads="50" maxIdleTime="60000"
prestartminSpareThreads = "true" maxQueueSize = "100"/>
3.2 maxConnections acceptCount修改
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
/>
修改为
<Connector executor ="tomcatThreadPool" port="8009"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000" maxConnections="10000" redirectPort="8443"
acceptCount="1500"/>
参数 | 含义 |
---|---|
connectionTimeout | 连接超时时长,单位ms |
maxThreads | 最大线程数,默认200 |
minSpareThreads | 最小空闲线程数 |
maxSpareThreads | 最大空闲线程数 |
acceptCount | 当启动线程满了之后,等待队列的最大长度,默认100 |
URIEncoding | URI 地址编码格式,建议使用 UTF-8 |
enableLookups | 是否启用客户端主机名的DNS反向解析,缺省禁用,建议禁用,就使用客户端IP就行 |
compression | 是否启用传输压缩机制,建议 “on”,CPU和流量的平衡 |
compressionMinSize | 启用压缩传输的数据流最小值,单位是字节 |
compressableMimeType | 定义启用压缩功能的MIME类型text/html, text/xml, text/css,text/javascript |