码迷,mamicode.com
首页 > 其他好文 > 详细

tomcat调优经历

时间:2014-05-07 16:37:36      阅读:317      评论:0      收藏:0      [点我收藏+]

标签:tomcat

1. jvm堆栈设置:

    修改TOMCAT_HOME/bin/catalina.bat:

    set JAVA_OPTS=%JAVA_OPTS% -server -Xms1024m -Xmx1024m -XX:NewSize=400m -XX:MaxNewSize=400m -XX:PermSize=512m -XX:MaxPermSize=512m

    -server:比-client拥有更大、更高的并发处理能力。

    -Xms -Xmx:初始堆内存大小和最大对内存大小,大小可以一样。

    -XX:NewSize -XX:MaxNewSize:默认年轻代空间的大小和最大大小。

    -XX:PermSize -XX:MaxPermSize:默认持久代空间的大小和最大大小。

    部分引用http://www.cnblogs.com/interdrp/archive/2010/11/24/1887106.html

2. jvm运行参数查看:

01 jps
02 :与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。 
03  
04 jstat
05 :一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。 
06  
07 jmap
08 :打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。 
09  
10 jconsole
11 :一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。
1 D:\>jmap -histo 4636 > d:log.log #打印堆信息
2  
3 D:\>jmap -dump:live,format=b,file=d:\log.log 4636 #生成二进制堆信息,与下一步协同使用
4 D:\>jhat log.log #根据提示,访问IP:7000查看heap信息

    http://jiajun.iteye.com/blog/443196

    http://risheng.iteye.com/blog/1453098

3. tomcat参数(以tomcat-7.0.23说明):

01 <Service name="Catalina">
02  
03     <!--The connectors can use a shared executor, you can define one or more named thread pools-->
04     <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
05         maxThreads="500" minSpareThreads="90" maxIdleTime="600000" />
06  
07     <!-- A "Connector" represents an endpoint by which requests are received
08          and responses are returned. Documentation at :
09          Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
10          Java AJP  Connector: /docs/config/ajp.html
11          APR (HTTP/AJP) Connector: /docs/apr.html
12          Define a non-SSL HTTP/1.1 Connector on port 8080
13     -->
14     <Connector port="8099" protocol="org.apache.coyote.http11.Http11AprProtocol"
15                connectionTimeout="40000" acceptCount="300" maxKeepAliveRequests="1"
16                redirectPort="8443" executor="tomcatThreadPool" />
17     <!-- A "Connector" using the shared thread pool-->
18     <!-- Define a SSL HTTP/1.1 Connector on port 8443
19          This connector uses the JSSE configuration, when using APR, the
20          connector should be using the OpenSSL style configuration
21          described in the APR documentation -->
22     <!--
23     <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
24                maxThreads="150" scheme="https" secure="true"
25                clientAuth="false" sslProtocol="TLS" />
26     -->
27  
28     <!-- Define an AJP 1.3 Connector on port 8009 -->
29     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" executor="tomcatThreadPool" />
30   </Service>

    http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

Executor节点:配置线程池,供连接器(Connector)引用

    a. maxThreads-线程池可创建的最大线程数,默认200

    b. minSpareThreads-最小备用线程数,tomcat启动时初始化的线程数,默认25

    c. maxIdleTime-如果线程数大于minSpareThreads时,空闲线程持续空闲时间超过该时间时会被销毁,默认60000(1分钟)

Connector节点:

    a. protocol-本人不甚清楚,故不作解释,不过有以下可选项:

        org.apache.coyote.http11.Http11Protocol - blocking Java connector

        org.apache.coyote.http11.Http11NioProtocol - non blocking Java connector

        org.apache.coyote.http11.Http11AprProtocol - the APR/native connector

        默认值是HTTP/1.1,根据环境变量自动选择blocking Java connector或the APR/native connector。tomcat启动后可以根据Starting ProtocolHandler信息判断使用的是哪种协议。

        基本上,bio性能最低下,nio次之,最好是apr。不过有网友说使用Apr协议时,要安装apr和native环境,不过我并没有做这些,也是用的apr。

    http://passover.blog.51cto.com/2431658/732629

    http://www.oschina.net/question/54100_16195

    b. acceptCount-当所有可用请求处理线程用尽时,队列可以缓存的请求数。如果队列已满,新上来的请求会被refuse掉。默认值100

    c. acceptorThreadCount-用于接收请求的线程数。在多CPU机器上可以提高该数值,但真心没必要超过2。同时,对于非keep-alive的连接,你也想要提高该数值。默认1。这是官方的解释,我个人不太理解。

    d. connectionTimeout-在accept来自client的connect后,等待请求uri行出现的最大时间。设置为-1,表示无限等待。如果disableUploadTimeout=true,也会作为等待请求体的超时限制。disableUploadTimeout值默认true。

    e. maxKeepAliveRequests-对于同一个连接,允许的最多http请求次数,超过限制值server主动关闭连接。1表示禁用keep-alive,-1表示允许无数次HTTP请求,默认取100。keep-alive特性可看下边的介绍。

4. keep-alive:

    http://backend.blog.163.com/blog/static/2022941262014029105618173/

    http://blog.csdn.net/ctthuangcheng/article/details/8596818

    http1.1(http1.0不是标准,依服务器而定)是支持长连接的,长连接能够保证服务器和客户端的socket能够高效利用,减少握手等额外的开销。在HTTP请求头中Connection: keep-alive表示支持并启用长连接,Connection: close表示使用短连接。

    长连接允许连接建立后,client发起多次HTTP请求,这个过程中既可以在达到server的maxKeepAliveRequests之前由client主动关闭,也可以在达到maxKeepAliveRequests限制后,server主动关闭,server主动关闭时,其返回的HTTP/1.1 200 OK信息中会包含Connection: close。

    短连接:在每次server返回HTTP/1.1 200 OK时,都会包含Connection: close。

    主动关闭连接的一方,会出现大量的TIME_WAIT状态的连接。

5. TIME_WAIT状态:

    TCP的3个常见状态:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。

bubuko.com,布布扣

    连接会在主动关闭它的机器里以TIME_WAIT状态存在2个MSL时间,(MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒winddows操作系统是2分钟)。

    如果双方协定启用keep-alive,在客户端建立大量短连接并主动关闭后,会在2MSL时间内存在大量的处于TIME_WAIT状态的连接。如果达到上限,就无法建立新的请求了。不过这种情况比较少遇到。

    如果禁用keep-alive,也同样会在服务端保存大量处于TIME_WAIT状态的连接

    http://blog.csdn.net/shootyou/article/details/6622226#

    http://elf8848.iteye.com/blog/1739571

tomcat调优经历,布布扣,bubuko.com

tomcat调优经历

标签:tomcat

原文地址:http://blog.csdn.net/chinazgr/article/details/25195277

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!