Tomcat7性能调优
1.1 tomcat的三种运行模式:
●BIO:一个请求处理一个线程。并发量高时,线程数较多,浪费资源。Tomcat7默认使用这种方式。
●NIO:利用Java的非阻塞IO处理,通过线程池处理大量的请求。 Tomcat8默认采用这种方式。
●APR:从操作系统层面解决io阻塞问题,性能最高。Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式;Linux如果安装了apr和native,Tomcat直接启动就支持apr。(安装方法:http://www.cnblogs.com/nb-blog/p/5278502.html)
1.2 三种运行模式性能对比:
1.3 NIO性能调优:
1.3.1 在conf/tomcat-users.xml文件末尾添加用户,账号密码都叫tomcat
<role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="admin"/> <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>
1.3.2 进入管理页面,可以看到tomcat7默认是bio运行模式
1.3.3 编辑conf/server.xml,将protocol="HTTP/1.1"修改为org.apache.coyote.http11.Http11NioProtocol
1.3.4 设置tomcat线程池
1.3.5.1 优化线程池参数并指定线程池
1.3.5.2 上面我们就已经配置好了nio模型,下面可以通过自定义属性来优化它
【连接池参数】
maxThreads : 最大连接
minSpareThreads : 最小连接
maxQueueSize : 连接超时时间单位毫秒
prestartminSpareThreads :是否在启动时就生成minSpareThreads个线程
threadPriority : 执行程序中线程的线程优先级默认为5(线程的值)
daemon : 是否为守护线程 默认为true
namePrefix : 线程的名称前缀。单个线程的线程名将是namePrefix+threadNumber
maxIdleTime : 空闲线程等待时间单位毫秒
threadRenewalDelay : 重建线程的时间间隔; 为了避免线程同时重建,默认每隔1000ms重建一个线程,设置为负则不重建
【连接器参数 connector】
SSLEnabled : 如果要打开SSL握手/加密/解密,请设置true。默认值是false。
maxPostSize : 上传文件最大大小, 默认是2mb
URIEncoding : 指定字符编码 能解决get请求乱码问题,默认ISO-8859-1。
acceptCount : 当所有处理线程都在使用时,新的请求会排队,默认超过100会拒绝。
acceptorThreadCount :用于接受连接的线程的数量。在一个服务器上一般为1不可能超过2,默认值是 1。
maxConnections :最大并发量,超过这个范围服务器就不再接收请求。NIO的默认值是10000。APR /native的默认值是8192。如果设置的值-1,maxConnections功能被禁用
1.3.6 上面就已经将nio优化配置完了,我们一般是使用Nginx+tomcat的架构,所以用不着AJP协议,我们还可以禁用AJP连接器来继续优化。
1.3.7 重启测试:可以看到最大连接是500,默认连接为5,并且是nio运行模式。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix