专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » tomcat:Tomcat性能调整(续) »正文

tomcat:Tomcat性能调整(续)

来源: 发布时间:星期一, 2009年4月6日 浏览:0次 评论:0
4. 自身调整   本节将向您详细介绍些加速可使Tomcat例子加速运行窍门技巧和思路方法无论是在什么操作系统或者何种Java虚拟机上在有些情况下您可能没有控制部署环境上操作系统或者Java虚拟机在这种情况下您就需要逐行了解以下些建议然而你应该在修改后使的生效我认为以下思路方法是Tomcat性能自身调整最佳方式   1.禁用DNS查询   当web应用向要记录客户端信息时它也会记录客户端IP地址或者通过域名服务器查找机器名转换为IP地址DNS查询需要占用网络并且包括可能从很多很远服务器或者不起作用服务器上去获取对应IP过程这样会消耗时间为了消除DNS查询对性能影响我们可以关闭DNS查询方式是修改server.xml文件中enableLookups参数值: Tomcat4 Name="org.apache.coyote.tomcat4.CoyoteConnector" />Tomcat5   除非你需要连接到站点每个HTTP客户端机器名否则我们建议在生产环境上关闭DNS查询功能可以通过Tomcat以外方式来获取机器名这样不仅节省了网络带宽、查询时间和内存而且更小流量会使日志数据也会变得更少显而易见也节省了硬盘空间对流量较小站点来说禁用DNS查询可能没有大流量站点效果明显但是此举仍不失为良策谁又见到个低流量网站WebSite夜的间就流量大增呢?   2.调整线程数   另外个可通过应用连接器(Connector)进行性能控制参数是创建处理请求线程数Tomcat使用线程池加速响应速度来处理请求在Java中线程是运行时路径是在中和其它控制线程无关、能够独立运行代码段它们共享相同地址空间多线程帮助员写出CPU最大利用率高效使空闲时间保持最低从而接受更多请求   Tomcat4中可以通过修改minProcessors和maxProcessors值来控制线程数这些值在安装后就已经设定为默认值并且是足够使用但是随着站点扩容而改大这些值minProcessors服务器启动时创建处理请求线程数应该足够处理个小量负载也就是说如果天内每秒仅发生5次单击事件并且每个请求任务处理需要1秒钟那么预先设置线程数为5就足够了但在你站点访问量较大时就需要设置更大线程数指定为参数maxProcessorsmaxProcessors值也是有上限应防止流量不可控制(或者恶意服务攻击)从而导致超出了虚拟机使用内存大小如果要加大并发连接数应同时加大这两个参数web server允许最大连接数还受制于操作系统内核参数设置通常Windows是2000个左右Linux是1000个左右   在Tomcat5对这些参数进行了调整请看下表: 属性名

cnV$J4ul/?v? 3bg#PWBJAVA中文站社区门户 b#K b sIoa

描述

.ha0B6D Ux,v JAVA中文站社区门户AUcg_

-B-V"a [&I&?'xV5xI`
maxThreads

s(`/K1s1kpS5e JAVA中文站社区门户G%JL4C_`j

)O9_0kn0{W4e'D Tomcat使用线程来处理接收每个请求这个值表示Tomcat可创建最大线程数

%E$F+u;x-L8R%f JAVA中文站社区门户jBp6l1k^JAVA中文站社区门户 n7e!omw^w


acceptCount JAVA中文站社区门户JQ3Z `'} G^

JAVA中文站社区门户s DYG'm,d1g+v&w

+XF;P3s;m 指定当所有可以使用处理请求线程数都被使用时可以放到处理队列中请求数超过这个数请求将不予处理

&hO J*]k8Q+Gf JAVA中文站社区门户!tV'\3N"R hS$vJAVA中文站社区门户%Z VJPz5`


connnectionTimeout JAVA中文站社区门户,i&b%`Kv#C'g MG

`:h#[\]R#YJAVA中文站社区门户R$TIu\)?4U

网络连接超时单位:毫秒设置为0表示永不超时这样设置有隐患通常可设置为30000毫秒

Pg*} M I8h JAVA中文站社区门户"]7HS$Z4sjU

\$zqLp"HR A
minSpareThreads JAVA中文站社区门户s[9ZRp U Axb|4O

JAVA中文站社区门户t5Kh0vS"SUa

.O l8T[)e_ Tomcat化时创建线程数JAVA中文站社区门户 t(Q6GEW/f2TP'Y

JAVA中文站社区门户x:R xcW

R e8pS q+p x@
maxSpareThreads JAVA中文站社区门户kw"gQ5Gy+a C,e

JAVA中文站社区门户(r`%h] J1XpJAVA中文站社区门户l&gW/_l

旦创建线程超过这个值Tomcat就会关闭不再需要线程

Z6t |*HND JAVA中文站社区门户j s)U fH,YeXb

;E n:urHU)tH}Mx2M9\


  最好方式是多设置几次并且进行测试观察响应时间和内存使用情况在区别机器、操作系统或虚拟机组合情况下可能会区别而且并不是所有人web站点流量都是因此没有刀切方案来确定线程数   3.加速JSP编译速度   当第次访问个JSP文件时它会被转换为Java serverlet源码接着被编译成Java字节码你可以控制使用哪个编译器默认情况下Tomcat使用使用命令行javac进行使用编译器也可以使用更快编译器但是这里我们将介绍如何优化它们   另外种思路方法是不要把所有实现都使用JSP页面而是使用些区别java模板引擎变量显然这是个跨越很大决定但是事实证明至少这种思路方法是只得研究如果你想了解更多有关在Tomcat可使用模板语言你可以参考Jason Hunter和William Crawford合著Java Servlet Programming 书(O'Reilly公司出版)   在Tomcat 4.0中可以使用流行而且免费Jikes编译器Jikes编译器速度要由于SunJava编译器首先要安装Jikes(可访问http://oss.software.ibm.com/pub/jikes 获得更多信息)接着需要在环境变量中设置JIKESPATH包含系统运行时所需JAR文件装好Jikes以后还需要设置让JSP编译servlet使用Jikes需要修改web.xml文件中jspCompilerPlugin值: jsp org.apache.jasper.servlet.JspServlet logVerbosityLevel

WARNING

jspCompilerPlugin

org.apache.jasper.compiler.JikesJavaCompiler

path

/usr/local/jdk1.3.1-linux/jre/lib/rt.jar: /usr/local/lib/java/servletapi/servlet.ja r

3
  在Tomcat 4.1(或更高版本)JSP编译由包含在Tomcat里面Ant控制器直接执行这听起来有点点奇怪但这正是Ant有意为的部分个API文档指导开发者在没有启动个新JVM情况下使用Ant这是使用Ant进行Java开发大优势另外这也意味着你现在能够在Ant中使用任何javac支持编译方式这里有个有关Apache Ant使用手册javac page列表使用起来是容易你只需要在 元素中定义个名字叫“compiler”并且在value中有个支持编译编译器名字举例如下: jsp org.apache.jasper.servlet.JspServlet logVerbosityLevel

WARNING

compiler

jikes

3
Ant可用编译器 名称JAVA中文站社区门户h%k+gN'M:_O ua\

0rzy"B)g%n#KJAVA中文站社区门户0Vnt@8b-@1i

别名JAVA中文站社区门户:RTKX}6YW,V|

JAVA中文站社区门户Z irA+G0^4yH

9Z J2GkK } v 编译器

?4aa K0\7v3b JAVA中文站社区门户l(STJlFP#TpGJAVA中文站社区门户0q[4z^VU


ic

M'Q&`#z&W PZzI nt2A!dh+wn

/`!U!}KQ wDSU javac1.1, javac1.2 JAVA中文站社区门户%g{-Y3S Z

{BUPMJAVA中文站社区门户_c X6m s]/y7R7VV ?

Standard JDK 1.1/1.2 compiler

hv ]#N0Y[a(h] JAVA中文站社区门户"GA6tl.djN#w

)N ^WK x:k)|sKE
modern JAVA中文站社区门户"~ K]2k6QbA

JAVA中文站社区门户2z2L~ p Ub&f~

*y}2t-@ o*S javac1.3, javac1.4 JAVA中文站社区门户)t1^!YkRl:xlN

Z9p!i Exq4W `JAVA中文站社区门户DTb#Sn L5tC

Standard JDK 1.3/1.4 compiler JAVA中文站社区门户'BT.@gz:o&e K$T

$fid-A Q~DC1j

U$r9bRS6C
jikes JAVA中文站社区门户Jf | i"|*Lq

.DE [)]/@A5R

u^_NjNi    The Jikes compiler JAVA中文站社区门户ATI2sQ tO*PC

7yh1H/V(g`-CtI

7{2bn+e^&X"I~SN
JVC Microsoft

b\]*R$?8y h`%A fw6lJAVA中文站社区门户ui2f,Y8T4M

Microsoft command-line compiler from the Microsoft SDK for Java/Visual J JAVA中文站社区门户S)J bm kxWC

/u G DEnDJAVA中文站社区门户w.vrE~_R


KJC    The kopi compiler JAVA中文站社区门户C!i'qr3j'n:Pk|

JAVA中文站社区门户ot b%}-fH:v!F!K

(JE N`K*c+x,@
GCJ    The gcj compiler (d as part of gcc)

2@CaF*iDw { JAVA中文站社区门户fM W S,l-g

g#k8\:y4aC
SJ Symantec JAVA中文站社区门户:g!_5BLe,F5?kzyp

M ~o O [

[ _ ^XM)V1`iu Symantec's Java compiler JAVA中文站社区门户&[4v9x+H%Cf:b(~

#x!YQ0o2S"A[ ~1rJAVA中文站社区门户8TX&S `%K,D


extJavacJAVA中文站社区门户 G1P;JjB]]8l*JDE,A

JAVA中文站社区门户o|Z4F&tn%p C&M;Q4k

"?YB7l:f mF    Runs either the modern or ic compiler in a JVM of its own

['s`s3]1Z@ JAVA中文站社区门户Q Yq F1QW

/SP Q#N*\5_*P)[Z;N#fA


  由于JSP页面在第次使用时已经被编译那么你可能希望在更新新jsp页面后马上对它进行编译实际上这个过程完全可以自动化可以确认是新JSP页面在生产服务器和在测试服务器上运行效果是   在Tomcat4bin目录下有个名为jspc脚本它仅仅是运行翻译阶段而不是编译阶段使用它可以在当前目录生成Java源文件它是调试JSP页面种有力手段   可以通过浏览器访问再确认下编译结果这样就确保了文件被转换成serverlet被编译了可直接执行这样也准确地模仿了真实用户访问JSP页面可以看到给用户提供功能也抓紧这最后刻修改出现bug并且修改它J   Tomcat提供了种通过请求来编译JSP页面功能例如你可以在浏览器地址栏中输入http://localhost:8080/examples/jsp/dates/date.jsp?jsp_precompile=true这样Tomcat就会编译data.jsp而不是执行它此举唾手可得不失为种检验页面正确性捷径   4. 其它   前面我们提到过操作系统通过些限制手段来防止恶意服务攻击同样Tomcat也提供了防止恶意攻击或禁止某些机器访问设置   Tomcat提供了两个参数供你配置:RemoteHostValve 和RemoteAddrValve   通过配置这两个参数可以让你过滤来自请求主机或IP地址并允许或拒绝哪些主机/IP和的类似在Apachehttpd文件里有对每个目录允许/拒绝指定   例如你可以把Admin Web application设置成只允许本地访问设置如下: Name="org.apache.catalina.valves.RemoteAddrValve" deny="" allow="127.0.0.1" />  如果没有给出允许主机指定那么和拒绝主机匹配主机就会被拒绝除此的外都是允许和的类似如果没有给出拒绝主机指定那么和允许主机匹配主机就会被允许除此的外都是拒绝 5. 容量计划   容量计划是在生产环境中使用Tomcat不得不提提高性能个重要话题如果你没有对预期网络流量下硬件和带宽做考虑话那么无论你如何做配置修改和测试都无济于事   这里先对提及容量计划作个简要定义:容量计划是指评估硬件、操作系统和网络带宽确定应用服务服务范围寻求适合需求和软件Software特性软硬件项活动因此这里所说软件Software不仅包括Tomcat也包括和Tomcat结合使用任何第 3方web服务器软件Software   如果在购买软硬件或部署系统前你对容量计划无所知不知道现有软硬件环境能够支撑多少访问量甚至更糟直到你已经交付并且在生产环境上部署产品后才意识到配置有问题时再进行变更可能为时已晚此时只能增加硬件投入增加硬盘容量甚至购买更好服务器如果事先做了容量计划那么就不会搞如此焦头烂额了   我们这里只介绍和Tomcat相关内容   首先为了确定Tomcat使用机器容量计划你应该从下列表项目种着手研究和计划:   1. 硬件   采用什么样硬件体系?需要多少台计算机?使用个大型还是使用多台小型机?每个计算机上使用几个CPU?使用多少内存?使用什么样存储设备I/O处理速度有什么要求?怎样维护这些计算机?区别JVM在这些硬件上运行效果如何(比如IBM AIX系统只能在其设计硬件系统上运行)?   2. 网络带宽   带宽使用极限是多少?web应用如何处理过多请求?   3. 服务端操作系统   采用哪种操作系统作为站点服务器最好?在确定操作系统上使用哪个JVM最好?例如JVM在这种系统上是否支持本地多线程对称多处理?哪种系统可使web服务器更快、更稳定并且更便宜是否支持多CPU?  4. Tomcat容量计划   以下介绍针对Tomcat做容量计划步骤:   1) 量化负载如果站点已经建立并运行可以使用前面介绍工具模仿用户访问确定资源需求量   2) 针对测试结果或测试过程中进行分析需要知道那些请求造成了负载过重或者使用过多资源并和其它请求做比较这样就确定了系统瓶颈所在例如:如果servlet在查询数据库步骤上耗用较长时间那么就需要考虑使用缓冲池来降低响应时间   3) 确定性能最低标准例如你不想让用户花20秒来等待结果页面返回也就是说甚至在达到访问量极限时用户等待时间也不能超过20秒种(从点击链接到看到返第条返回数据)这个时间中包含了数据库查询时间和文件访问时间同类产品性能在区别公司可能有区别标准般最好采取同行中最低标准或对这个标准做出评估   4) 确定如何合理使用底层资源并逐进行测试底层资源包括CPU、内存、存储器、带宽、操作系统、JVM等等在各种生产环境上都按顺序进行部署和测试观察是否符合需求在测试Tomcat时尽量多采用几种JVM并且调整JVM使用内存和Tomcat线程池大小进行测试同时为了达到资源充分合理稳定地使用效果还需针对测试过程中出现硬件系统瓶颈进行处理确定合理资源配置这个过程最为复杂而且般由于没有可参考值所以只能靠理论推断和经验整理总结   5) 如果通过第4步反复测试如果达到了最优组合就可以在相同生产环境上部署产品了   此外应牢记定要文档化你测试过程和结果此后可能还会进行测试这样就可以拿以前测试结果做为参考另外测试过程要反复多次进行每次条件可能都不因此只有记录下来才能进行结果比较和最佳条件选择   这样我们通过测试找到了最好组合方式各种资源得到了合理配置系统性能得到了极大提升 6. 附加资料   很显然本文也很难全面而详尽地阐述性能优化过程如果你进行更多研究话可能会把性能调优做更好比如Java性能调整、操作系统调整、各种复杂环境和应用系统和其它所有和应用相关东西在这里提供些文中提到些资源、文中提到相关内容链接以及本文些参考资料   1. Web性能测试资料及工具   1) Jmeter Wiki首页Jmeter为个开源100%Java开发性能测试工具  http://wiki.apache.org/jakarta-jmeter/   2) Apache Benchmark使用介绍说明  http://httpd.apache.org/docs-2.0/programs/ab.html   3) 些Java相关测试工具介绍包含可以和Tomcat集成进行测试工具  http://blog.csdn.net/wyingquan/   4) LoadRunner® 是种预测系统行为和性能工业标准级负载测试工具它通过模拟数据以千万计用户来实施并发负载来对整个企业架构进行测试来帮助您更快查找和发现问题  http://www.mercury.com/us/products/performance-center/loadrunner/   2. 文中介绍相关内容介绍   1) Apache 2.x + Tomcat 4.x做负载均衡描述了如何利用jk配置集群负载均衡  http://raibledesigns.com/tomcat/index.html   2) 容量计划制定收集了许多有关制定web站点容量计划例子:  http://www.capacityplanning.com/   3) 评测Tomcat5负载平衡和集群  http://www.javaresearch.org/article/showarticle.jsp?column=556&thread=19777   4) Apache和Tomcat安装和整合的整合篇  http://www.javaresearch.org/article/showarticle.jsp?column=23&thread=18139   5) 性能测试工具的研究介绍了性能测试工具原理和思路  http://www.51testing.com/emagzine/No2_2.htm   6) Java内存泄漏  http://www.matrix.org.cn/resource/article/409.html   7) Web服务器和应用服务器有什么区别?  http://www.matrix.org.cn/resource/article/1429.html   8) 详细讲解性能中数据库集群问题  http://www.theserverside.com/articles/article.tss?l=DB_Break

TAG: tomcat TOMCAT Tomcat 性能 调整
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: