整理一些关于Tomcat7的优化

刚入行的朋友,当面试的时候被问到,如何做一些优化提高的网站的并发能力时,可能一脸懵逼,今天整理一些Tomcat方面的调优,从而提高网站并发能力。

1.配置tmocat管理员账户
在conf/ tomcat-users.xml下添加用户:

<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"/>

启动tomcat,登录查看信息:

红色的为关注点,优化即针对他们。



2.tomcat的3种运行模式
tomcat的运行模式有3种:
1、bio
默认的模式,性能非常低下,没有经过任何优化处理和支持.
2、nio
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)更好的并发运行性能。

3、apr
安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.
2.1启动NIO模式
修改server.xml里的Connector节点,修改protocol为org.apache.coyote.http11.Http11NioProtocol


3.执行器(线程池)
在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能
3.1修改server.xml配置

3.2各参数说明
Attribute

Description

threadPriority(优先级)(int) The thread priority for threads in the executor, the default is 5 (the value of theThread.NORM_PRIORITY constant)
daemon(守护进程)(boolean) Whether the threads should be daemon threads or not, the default is true
namePrefix(名称前缀)(String) The name prefix for each thread created by the executor. The thread name for an individual thread will be namePrefix+threadNumber
maxThreads(最大线程数)(int) The max number of active threads in this pool, default is 200
maxIdleTime(空闲线程等待时间)(int) The number of milliseconds before an idle thread shutsdown, unless the number of active threads are less or equal to minSpareThreads. Default value is 60000(1 minute)
maxQueueSize(最大的等待队里数,超过则请求拒绝(int) The maximum number of runnable tasks that can queue up awaiting execution before we reject them. Default value is Integer.MAX_VALUE
prestartminSpareThreads
(是否在启动时就生成minSpareThreads个线程)
(boolean) Whether minSpareThreads should be started when starting the Executor or not, the default is false
threadRenewalDelay
(重建线程的时间间隔)
(long) If a ThreadLocalLeakPreventionListener is configured, it will notify this executor about stopped contexts. After a context is stopped, threads in the pool are renewed. To avoid renewing all threads at the same time, this option sets a delay between renewal of any 2 threads. The value is in ms, default value is 1000 ms. If value is negative, threads are not renewed.
。重建线程池内的线程时,为了避免线程同时重建,每隔threadRenewalDelay(单位: ms )重建一个线程。默认值为1000 ,设置为负则不重建
minSpareThreads(最小活跃线程数)(int) The minimum number of threads always kept alive, default is 25
3.3最佳实践

4.连接器(Connector)
Connector是Tomcat接收请求的入口,每个Connector有自己专属的监听端口

Connector有两种:HTTP Connector和AJP Connector
关于连接器的一些属性太多,这里就不一 一列举,直接上最佳实践
4.1最佳实践

针对以上配置做一个简单介绍:

connectionTimeout在将提交的请求URI行呈现之后,连接器将等待接受连接的毫秒数。使用值-1表示没有超时(即无限)。默认值是60000(60秒),但请注意,Tomcat的标准server.xml中,设置为20000(即20秒)。
redirectPort如果该连接器支持非SSL请求,并且接收到的请求为满足安全约束需要SSL传输, Catalina 将自动将请求重定向到指定的端口号。
enableLookups若是你想request.getRemoteHost()的调用 履行,以便返回的长途客户端的实际主机名的DNS查询,则设置为true。设置为false时跳过DNS查找,并返回字符串情势的IP地址(从而提高性能)。默认景象下,禁用DNS查找。
maxPostSize将被容器以FORM URL参数形式处理的最大长度(以字节为单位)的POST。通过设置此属性的值小于或等于0可以禁用该限制。如果没有指定,该属性被设置为2097152(2兆字节)
URIEncoding这将指定使用的字符编码​​,来解码URI字符。如果没有指定,ISO-8859-1将被使用。
acceptCount当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。当队列满时收到的任何请求将被拒绝。默认值是100。
acceptorThreadCount用于接受连接的线程的数量。在一个多CPU的机器上,增加该值,虽然你可能不会真正需要超过2个。此外,有很多非保持活动连接,您可能需要增加这个值。默认值是 1。
disableUploadTimeout此标志允许servlet容器在数据上传时使用不同的连接超时,通常较长。如果没有指定,该属性被设置为true,禁用上传超时。
maxConnections在任何给定的时间服务器接受并处理的最大连接数。当这个数字已经达到了,服务器将不会接受任何连接,直到连接的数量降到低于此值。基于acceptCount的设置,操作系统可能仍然接受连接。默认值根据不同的连接器类型而不同。对于BIO,默认的是maxThreads的值,除非使用了Executor,在这种情况下默认值是executor的maxThreads值 。对于NIO的默认值是10000。APR /native的默认值是8192。
需要注意的是Windows系统的APR/native,所配置的值将减少到小于或等于maxConnections的1024的倍数的最大值。这样做是出于性能方面的考虑。
如果设置的值-1,maxConnections功能被禁用,而且连接数将不做计算。
SSLEnabled在连接器上使用此属性来启用SSL加密传输。如果要打开SSL握手/加密/解密,请设置true。默认值是false。当设置这个值为true时,为了传递正确的request.getScheme()和 request.isSecure()到servlets,你需要设置scheme和secure属性。更多信息请查看SSL支持。
5.禁用AJP连接
AJP(Apache JServer Protocol)
AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。

如果我们使用了请求转发的工具例如:nginx,是用不着AJP协议,所以把AJP连接器禁用。

对比刚登录的页面,看不到AJP了

6.tomcat的虚拟机参数优化
除了以上内容,我们还可以对tomcat所运行的java虚拟机参数进行一些优化,介于JVM的参数性能调优需要考虑到物理机本身的硬件的好坏,这里就不说明了,推荐阅读,《深入理解JVM与最佳实践》,里面有完整的介绍JVM内存模型与调优。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值