文档章节

tomcat 性能优化

王爵nice
 王爵nice
发布于 2015/07/12 17:16
字数 1225
阅读 2835
收藏 298

tomcat默认参数是为开发环境制定,而非适合生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈。

tomcat内存优化

linux修改TOMCAT_HOME/bin/catalina.sh,在前面加入

JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai"

windows修改TOMCAT_HOME/bin/catalina.bat,在前面加入

set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m

最大堆内存是1024m,对于现在的硬件还是偏低,实施时,还是按照机器具体硬件配置优化。

tomcat 线程优化

<Connector port="80" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700"
connectionTimeout="20000" redirectPort="8443" />
maxThreads="600"       ///最大线程数
minSpareThreads="100"///初始化时创建的线程数
maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
acceptCount="700"//指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

这里是http connector的优化,如果使用apache和tomcat做集群的负载均衡,并且使用ajp协议做apache和tomcat的协议转发,那么还需要优化ajp connector。

<Connector port="8009" protocol="AJP/1.3" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700"
connectionTimeout="20000" redirectPort="8443" />

由于tomcat有多个connector,所以tomcat线程的配置,又支持多个connector共享一个线程池。

首先。打开/conf/server.xml,增加

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="20" maxIdleTime="60000" /> 最大线程500(一般服务器足以),最小空闲线程数20,线程最大空闲时间60秒。

然后,修改<Connector ...>节点,增加executor属性,executor设置为线程池的名字:

<Connector executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" connectionTimeout="60000" keepAliveTimeout="15000" maxKeepAliveRequests="1" redirectPort="443" /> 可以多个connector公用1个线程池,所以ajp connector也同样可以设置使用tomcatThreadPool线程池。

禁用DNS查询

当web应用程序向要记录客户端的信息时,它也会记录客户端的IP地址或者通过域名服务器查找机器名 转换为IP地址。

DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。

修改server.xml文件中的Connector元素,修改属性enableLookups参数值: enableLookups="false"

如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址

设置session过期时间 conf\web.xml中通过参数指定:

<session-config>   
    <session-timeout>180</session-timeout>     
</session-config> 

单位为分钟。

Apr插件提高Tomcat性能 Tomcat可以使用APR来提供超强的可伸缩性和性能,更好地集成本地服务器技术.

APR(Apache Portable Runtime)是一个高可移植库,它是Apache HTTP Server 2.x的核心。APR有很多用途,包括访问高级IO功能(例如sendfile,epoll和OpenSSL),OS级别功能(随机数生成,系统状态等等),本地进程管理(共享内存,NT管道和UNIX sockets)。这些功能可以使Tomcat作为一个通常的前台WEB服务器,能更好地和其它本地web技术集成,总体上让Java更有效率作为一个高性能web服务器平台而不是简单作为后台容器。

在产品环境中,特别是直接使用Tomcat做WEB服务器的时候,应该使用Tomcat Native来提高其性能

要测APR给tomcat带来的好处最好的方法是在慢速网络上(模拟Internet),将Tomcat线程数开到300以上的水平,然后模拟一大堆并发请求。 如果不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待。但是配上APR之后,并发的线程数量明显下降,从原来的300可能会马上下降到只有几十,新的请求会毫无阻塞的进来。 在局域网环境测,就算是400个并发,也是一瞬间就处理/传输完毕,但是在真实的Internet环境下,页面处理时间只占0.1%都不到,绝大部分时间都用来页面传输。如果不用APR,一个线程同一时间只能处理一个用户,势必会造成阻塞。所以生产环境下用apr是非常必要的。

复制代码 (1)安装APR tomcat-native apr-1.3.8.tar.gz 安装在/usr/local/apr #tar zxvf apr-1.3.8.tar.gz #cd apr-1.3.8 #./configure;make;make install

apr-util-1.3.9.tar.gz  安装在/usr/local/apr/lib
#tar zxvf apr-util-1.3.9.tar.gz
#cd apr-util-1.3.9  
#./configure --with-apr=/usr/local/apr ----with-java-home=JDK;make;make install

#cd apache-tomcat-6.0.20/bin  
#tar zxvf tomcat-native.tar.gz  
#cd tomcat-native/jni/native  
#./configure --with-apr=/usr/local/apr;make;make install

(2)设置 Tomcat 整合 APR 修改 tomcat 的启动 shell (startup.sh),在该文件中加入启动参数: CATALINA_OPTS="$CATALINA_OPTS -Djava.library.path=/usr/local/apr/lib" 。

(3)判断安装成功: 如果看到下面的启动日志,表示成功。 2015-07-10 15:34:32 org.apache.coyote.http11.Http11AprProtocol init

© 著作权归作者所有

共有 人打赏支持
王爵nice

王爵nice

粉丝 282
博文 72
码字总数 72355
作品 5
浦东
程序员
私信 提问
加载中

评论(10)

隔江千万里
现在tomcat集群是用Apache多还是nginx多,有没有相应的集群部署文档?
小昭归来
小昭归来

引用来自“TeamBack”的评论

xms xmx一般设置一样,这样可以避免每次垃圾回收完成后JVM重新分配内存,acceptCount这个要慎用,并发过大,会让你的系统看起来很缓慢。其他不想谈论,太多,国内博客大多都是copy

亲,也写个关于tomcat优化的博客吧
TeamBack
TeamBack
xms xmx一般设置一样,这样可以避免每次垃圾回收完成后JVM重新分配内存,acceptCount这个要慎用,并发过大,会让你的系统看起来很缓慢。其他不想谈论,太多,国内博客大多都是copy
MIC
MIC

引用来自“宇航员们”的评论

很不错,有什么能做压力测试的工具吗?0,能实实在在的测出性能才知道到底改好没有
太多了。比如jmeter
银河缘木
银河缘木
很不错,有什么能做压力测试的工具吗?0,能实实在在的测出性能才知道到底改好没有
文星
文星

引用来自“跟猪谈理想”的评论

一上来就加这块内存,那块内存,要明白参数的意义根据实际情况调节,如果可以像你这样,tomcat何必不直接加好呢?
tomcat 怎么知道你需要多少内存,只是告诉大家怎么调就行了。
酷哒哒
酷哒哒
不 错,不错啊
l
lusheng6323
个人觉得还得根据自己系统的情况进行调整,谢谢楼主提供的思路参考!
跟猪谈理想
跟猪谈理想
一上来就加这块内存,那块内存,要明白参数的意义根据实际情况调节,如果可以像你这样,tomcat何必不直接加好呢?
强子1985
强子1985
最好能加上实验前后对比哈,这样看起来更有味道了。
生产环境入门: Tomcat的基本优化【一】

Tomcat默认的配置已经是经过优化的了,留给我们可优化的空间很小,我 们主要能调整的是:跟具体使用场景相关的设置,大致有: 1:合理分配Tomcat需要的内存 这个是在启动Tomcat的时候设置cat...

weiliu007
2016/09/29
9
0
提升tomcat服务器性能的经验

在线上环境中我们是采用了tomcat作为Web服务器,它的处理性能直接关系到用户体验,在平时的工作和学习中,归纳出以下七种调优经验。 1. 服务器资源 服务器所能提供CPU、内存、硬盘的性能对处...

不正经啊不正经
2014/12/25
0
0
提升tomcat服务器性能的七条经验

在线上环境中我们是采用了tomcat作为Web服务器,它的处理性能直接关系到用户体验,在平时的工作和学习中,归纳出以下七种调优经验。 1. 服务器资源 服务器所能提供CPU、内存、硬盘的性能对处...

JAVA枪手
2014/12/02
0
0
Tomcat 性能优化方案,针对7.0

Tomcat 性能优化方案 综述。 这里只列出生产中需要优化的几个点,每个配置点详细讲解以后进行。 1. 启用 Tomcat NIO 协议 Connector 协议启用 org.apache.coyote.http11.Http11NioProtocol 2...

从前
2012/10/12
0
0
tomcat 性能优化

tomcat 性能优化 tomcat默认参数是为开发环境制定,而非适合生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈。 tomcat内存优化 linux修改TOMCAT_HOME/bin/catalina.sh,在前...

网费
2016/07/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
3
0
C++网络编程(一)gRPC的编译

Google是真滴烦,整个编译链全是自家产品,在编译之前先来安装一堆东西 安装环境依赖 chocolatey Windows下的包管理系统,没有他就慢慢去下载下面的一堆乱七八糟的东西吧。CMD下执行下面这句...

Pulsar-V
今天
3
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0
手机通过wifi遥控arduino

手机下载Blinker 从Blinker官网下载手机App,安装到手机。 手机连接WiFi。 点击我的设备右上角的"+"添加设备,选择Arduino -> wifi接入,复制密钥以备后续使用。 点击新建的设备,可以在新界...

davidwbnu
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部