文档章节

优化Tomcat运行性能和并发数

zchuanzhao
 zchuanzhao
发布于 2017/07/13 14:45
字数 1286
阅读 33
收藏 2

最近项目遇到一个问题,到了高峰期后,会出现请求连接失败,导致场所在高峰期经常需要重启Tomcat才能继续营业。
查阅资料发现Tomcat可以设置连接数。

tomcat配置文件server.xml中的<Connector ... />配置中,和连接数相关的参数有:
minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
connectionTimeout:网络连接超时,单位:毫秒。默认设置为20000ms,设置为0表示永不超时,这样设置有隐患的。通常可设置为30000ms。
其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。
web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。Unix中如何设置这些参数,请参阅Unix常用监控和管理命令

我们需要设置的是maxThreads、acceptCount这两个值,

<Connector port="8090" protocol="HTTP/1.1" redirectPort="8443" 
URIEncoding="utf-8" connectionTimeout="30000" 
minProcessors="30" maxProcessors="1500" 
acceptCount="2000"/>

修改成这样的配置之后,运行100个线程,每个线程20个请求,每个线程间隔1秒,运行300秒,系统出现请求连接失败的次数仅出现6次,在没有修改配置之前,50个线程都直接奔溃。
继续查找资料中......

Tomcat Connector(Tomcat连接器)有bio、nio、apr三种运行模式,
bio(blocking I/O),顾名思义,即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。Tomcat在默认情况下,就是以bio模式运行的。遗憾的是,就一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。
nio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。要让Tomcat以nio模式来运行也比较简单,我们只需要在Tomcat安装目录/conf/server.xml文件中将如下配置:

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />


中的protocol属性值改为org.apache.coyote.http11.Http11NioProtocol即可:

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />


此时,我们就可以在Tomcat Manager中看到当前服务器状态页面的HTTP协议的Connector运行模式已经从http-bio-8080变成了http-nio-8080。
apr(Apache Portable Runtime/Apache可移植运行时),是Apache HTTP服务器的支持库。你可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。如果我们的Tomcat不是在apr模式下运行,在启动Tomcat的时候,我们可以在日志信息中看到类似如下信息:

2013-8-6 16:17:49 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: xxx/xxx(这里是路径信息)
Tomcat apr运行模式的配置是三种运行模式之中相对比较麻烦的一种。据官方文档所述,Tomcat apr需要以下三个组件的支持:

APR library[APR库]
JNI wrappers for APR used by Tomcat (libtcnative)[简单地说,如果是在Windows操作系统上,就是一个名为tcnative-1.dll的动态链接库文件]
OpenSSL libraries[OpenSSL库]
此外,与配置nio运行模式一样,也需要将对应的Connector节点的protocol属性值改为org.apache.coyote.http11.Http11AprProtocol。 不过,上述繁琐的操作都是Tomcat 7.0.30之前的版本才需要这样配置,从Tomcat 7.0.30版本开始,Tomcat已经自带了tcnative-1.dll等文件,并且默认就是在Tomcat apr模式下运行,因此我们只需要下载最新版本的Tomcat直接使用即可。

根据以上资料,将Tomcat Connector设置为nio,即配置文件修改为

<Connector port="8090" protocol="org.apache.coyote.http11.Http11NioProtocol" 
redirectPort="8443"  URIEncoding="utf-8" 
connectionTimeout="30000" minProcessors="30" maxProcessors="1500" 
acceptCount="2000"/>


继续运行100个线程,每个线程20个请求,每个线程间隔1秒,正常使用中,不会出现连接失败情况,继续开启100个线程,也正常处理,当然,实际请求数肯定是没有这么多了。
经过测试发现使用bio模式,在单位时间内,发起的请求数会比nio多几百个,具体是不是这样,就没有去深究了。
先这样处理,之后有问题再继续修改吧。

© 著作权归作者所有

共有 人打赏支持
zchuanzhao
粉丝 50
博文 242
码字总数 145449
作品 1
福州
程序员
私信 提问
tomcat7.0性能优化-挑战极限完整版

0 测试结果 参考精简版的空跑测试结论 http://phl.iteye.com/blog/1868206 1 tomcat 1.1 tomcat运行模式 Connector/protocol org.apache.coyote.http11.Http11Protocol - blocking Java con......

闪电
2015/04/16
0
0
后续之《SpringBoot服务器压测对比(jetty、tomcat、undertow)》

一、前言 昨天发了一个《SpringBoot服务器压测对比(jetty、tomcat、undertow)》,本是工作的一个笔记,没想到被红薯翻牌了(荣幸之至)。看了OSCer的回复,感觉需要重新梳理下,因为确实存...

尚浩宇
2018/12/07
0
0
Tomcat性能优化

最近一直在解决线上一个问题,表现是: Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s。 服务器性能很好,Tomcat版本是7.0...

voole
2016/08/06
216
0
Tomcat 7优化配置参数

Tomcat的优化主要体现在两方面:内存、并发连接数。 1、内存优化: 优化内存,主要是在bin/catalina.bat/sh 配置文件中进行。linux上,在catalina.sh中添加: JAVA_OPTS="-server -Xms1G -X...

庆沉
2016/10/08
24
0
生产环境:tomcat9,jdk8优化配置

生产环境:tomcat9,jdk8优化配置 2018年05月20日 15:39:35 镜水灵动 阅读数:2320 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014172271/article/detai...

linjin200
2018/12/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 我敢给你上菜,你敢吃么?

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :分享周深的单曲《缘起 (前世今生版)》人间多的是长了两只脚的恶人, 《缘起 (前世今生版)》- 周深 手机党少年们想听歌,请使劲儿...

小小编辑
47分钟前
57
7
万能的Python,还能用来制作高大上的进度条?

对于开发或者运维来说,使用Python去完成一些跑批任务,或者做一些监控事件是非常正常的情况。那么如何有效的监控任务的进度,除了在任务中加上log外,还能不能有另一种方式来了解任务进展到...

上海小胖
今天
8
0
如何嵌入 HTML 到 iPython notebook的输出

如何嵌入 HTML 到 iPython notebook的输出 iPython notebook中可以嵌入 HTML,也适用于JupyterHub和JupyterLab环境。不仅可以显示常用的HTML标签文本,甚至可以嵌入脚本交互操作和Frame分隔框...

openthings
今天
2
0
四、RabbitMQ3.7在CentOS7下的安装

安装依赖 sudo yum install -y gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git 创建yum源 vi /etc/yum.repos.d/rabbitmq-erlang.repo [......

XuePeng77
今天
2
0
android 延长Toast的时长

示例:myToast(5000,"hello"); public void myToast(int showTime, String msg) { Toast hello = Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT); new CountDownTimer(......

雨焰
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部