Tomcat 性能优化

1. 优化tomcat参数

一个典型的server.xml配置

<Connector executor="tomcatThreadPool"
        port="8080"
        protocol="org.apache.coyote.http11.Http11AprProtocol"
        connectionTimeout="20000"
        acceptCount="1000"
        redirectPort="443"
        compression="on"
        compressionMinSize="1024"
        enableLookups="false"
        URIEncoding="UTF-8"
        useBodyEncodingForURI="true"
        noCompressionUserAgents="gozilla, traviata"
        compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/>

详细的参数说明, 参考 https://tomcat.apache.org/tomcat-7.0-doc/config/index.html (Tomcat7)下面的Connector,

enableLookups 设为false, 禁止request.getRemoteHost()反查host

maxHeaderCount 对request header数量的限制, 默认为100, 如果设置小于0, 则不限制

maxParameterCount 对request参数数量的限制, 默认为1000, 如果设置小于0, 则不限制

protocol 优先使用apr

URIEncoding 默认是ISO-8859-1,

acceptCount 最大请求队列长度, 默认为100

2. 优化网络内核参数

█ 减少处于FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接。
net.ipv4.tcp_fin_timeout = 2
# 如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
# 对端可以出错并永远不关闭连接,甚至意外当机,缺省值是60秒。
# 2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN-WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。

█ 以下两参数可解决生产场景中大量连接的Web(cache)服务器中TIME_WAIT过多问题。
net.ipv4.tcp_tw_reuse = 1
# 表示开启重用。允许将TIME-WAIT sockets重新用于新的 TCP 连接,默认为 0 表示关闭。

█ 打开TIME-WAIT套接字重用及回收功能。
net.ipv4.tcp_tw_recycle = 1
# 表示开启TCP连接中TIME-WAIT sockets的快速收回功能,默认为 0 ,表示关闭。

█ 当keepalive起用的时候,TCP发送keepalive消息的频度,缺省是2小时,改为20分钟。
net.ipv4.tcp_keepalive_time = 1200

█ 允许系统打开的端口范围
net.ipv4.ip_local_port_range = 4000    65000
# 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为4000到65000。

█ 提高系统支持的最大SYN半连接数(默认1024)
net.ipv4.tcp_max_syn_backlog = 16384
# 表示SYN队列的长度,默认为1024,加大队列长度为16384,可以容纳最多等待连接的网络连接数。
[[email protected] ~]# cat /proc/sys/net/ipv4/tcp_max_syn_backlog
1024

█ 系统同时保持TIME_WAIT套接字的最大数量
net.ipv4.tcp_max_tw_buckets = 5000
# 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为 5000。
# 对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

█ 路由缓存刷新频率,当一个路由失败后多长时间跳到另一个路由,默认是300。
net.ipv4.route.gc_timeout = 100

█ 在内核放弃建立连接之前发送SYN包的数量。
net.ipv4.tcp_syn_retries = 1

█ 减少系统SYN连接重试次数(默认是5)
net.ipv4.tcp_synack_retries = 1
# 为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。
# 也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。

█ 设置系统对最大跟踪的TCP连接数的限制(CentOS 5.6无此参数)
net.ipv4.ip_conntrack_max = 25000000

█ tcp_max_orphans :INTEGER 系统所能处理不属于任何进程的TCP sockets最大数量
缺省值是8192。假如超过这个数量﹐那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制﹐纯粹为了抵御那些简单的 DoS 攻击﹐千万不要依赖这个或是人为的降低这个限制(这个值Redhat AS版本中设置为32768,但是很多防火墙修改的时候,建议该值修改为2000)
net.ipv4.tcp_max_orphans = 3276800

█ tcp_mem(3个INTEGER变量):low, pressure, high
low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。(理想情况下,这个值应与指定给 tcp_wmem 的第 2 个值相匹配 - 这第 2 个值表明,最大页面大小乘以最大并发请求数除以页大小 (131072 * 300 / 4096)。 )
net.ipv4.tcp_mem = 94500000 915000000 927000000

█ 在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。缺省设置:300
net.core.netdev_max_backlog =  10240

█ 最大的等待连接完成的套接字队列大小,即并发连接数。
高负载服务器和受到Dos攻击的系统也许会因为这个队列被塞满而不能提供正常服务。 默认为128,推荐在1024-4096之间,根据机器和实际情况需要改动,数字越大占用内存也越大。
net.core.somaxconn = 2048

█ 发送套接字缓冲区大小的缺省值(以字节为单位)。缺省设置:110592
net.core.wmem_default = 8388608

█ 发送套接字缓冲区大小的最大值(以字节为单位)。缺省设置:131071
net.core.wmem_max = 16777216

█ 接收套接字缓冲区大小的缺省值(以字节为单位)。缺省设置:110592
net.core.rmem_default = 8388608

█ 接收套接字缓冲区大小的最大值(以字节为单位)。缺省设置:131071
net.core.rmem_max = 16777216

供参考的配置, 添加到 /etc/sysctl.conf 最后, 再执行sysctl -p生效

net.core.netdev_max_backlog = 10240
net.core.somaxconn = 2048
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.ip_local_port_range = 10240 65000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.tcp_max_tw_buckets = 5000 
时间: 2024-08-06 19:44:34

Tomcat 性能优化的相关文章

tomcat性能优化Server——Connector

该元素可用于Tomcat 6.0.11以及更高版本. 允许您为一个Service的所有Connector配置一个共享线程池.在运行多个Connector的状况下,这样处理非常有用,而且每个Connector必须设置一个maxThread值,但不希望Tomcat实例并发使用的线程最大数永远与所有连接器maxThread数量的总和一样高. 这是因为如果这样处理,则需要占用太多的硬件资源.相反,您可以使用Executor元素配置一个共享线程池,而且所有的Connector都能共享这个线程池. 警告:为

JVM虚拟机详解+Tomcat性能优化

1.JVM(java virtual mechinal) (1)JVM有完善的硬件架构,如处理器.堆栈.寄存器当,还具有相应的指令系统. (2)JVM的主要工作时解释自己的指令集(即字节码),并映射到本地的cpu的指令集或OS系统调用. 2.JVM虚拟机主要有堆.栈.本地方法栈.方法区组成 注:(1)堆和栈都是一种数据项按序排列的数据结构,只能在一端对数据项进行插入和删除. (2)在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护端点和现场. (3)堆.队列,先进先

Tomcat性能优化及JVM内存工作原理

Java性能优化原则:代码运算性能.内存回收.应用配置(影响Java程序主要原因是垃圾回收,下面会重点介绍这方面) 代码层优化:避免过多循环嵌套.调用和复杂逻辑.   Tomcat调优主要内容如下: 1.增加最大连接数 2.调整工作模式 3.启用gzip压缩 4.调整JVM内存大小 5.作为Web服务器时,与Apache整合或Nginx 6.合理选择垃圾回收算法 7.尽量使用较新JDK版本   生产配置实例: 1 2 3 4 5 6 7 8 9 10 11 12 13 <Connectorpor

闲谈Tomcat性能优化

Tomcat在各位JavaWeb从业者常常就是默认的开发环境,但是Tomcat的默认配置作为生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈. 幸好Tomcat还有很多的提升空间.下文介绍一下Tomcat优化,可以分为内存,线程,IO. 一:Tomcat内存优化,启动时告诉JVM我要一块大内存(调优内存是最直接的方式) Windows 下的catalina.bat Linux 下的catalina.sh 如: JAVA_OPTS='-Xms256m -Xmx512m' -Xms<s

Tomcat性能优化方案

1. 提高JVM栈内存Increase JVM heap memory 你使用过tomcat的话,简单的说就是"内存溢出". 通常情况下,这种问题出现在实际的生产环境中.产生这种问题的原因是tomcat使用较少的内存给进程,通过配置TOmcat的配置文件(Windows 下的catalina.bat或Linux下的catalina.sh)可以解决这种问题.这种解决方法是通过增加JVM的栈内存实现的.也就是说,JVM通常不去调用垃圾回收器,所以服务器可以更多关注处理web请求,并要求尽快

tomcat性能优化参考

1)内存优化(调整配置堆的大小,修改文件:catalina.sh) JAVA_OPTS="-server -Xms595M -Xmx595M -Xmn223M -XX:SurvivorRatio=10 -Xss1M -Djava.awt.headless=true -Dfile.encoding=UTF-8 -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+UseCMSCompactAtFullCollection -XX:+E

Tomcat性能优化之开启Nio非阻塞模式

了解一下,Tomcat支持三种接收请求的处理方式:BIO.NIO.APR . 1:Bio方式,阻塞式I/O操作即使用的是传统Java I/O操作,Tomcat7以下版本默认情况下是以bio模式运行的,由于每个请求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景,在三种模式中性能也最低 配置如下(tomcat安装目录下的/conf/server.xml): tomcat启动如下,看到http-bio-8080便是bio模式: 2:Nio方式,是Java SE 1.4及后续版本提供的一种新

zbb20171108 tomcat 性能优化

原文地址http://www.cnblogs.com/NiceTime/p/6665416.html 1)内存优化(调整配置堆的大小,修改文件:catalina.sh) JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -XX:MinHeapFreeRatio=80 -XX:MaxHeapFreeRatio=80 -XX:ThreadStackSize=512 -XX:NewSize=128m -XX:MaxPer

Tomcat性能优化

//在tomcat/bin/catalina.sh中加入,如果是windows系统将export改为set并去掉后面值的双引号 export JAVA_OPTS="-server -Xms1000M -Xmx1000M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=15 -XX:+UseConcMarkSweepGC -XX:+UseParNew