4. 自身调整 本节将向您详细介绍
![](/icons/47727yi.gif)
些加速可使Tomcat例子加速运行
![](/icons/47727de.gif)
窍门技巧和思路方法
![](/icons/47727dou.gif)
无论是在什么操作系统或者何种Java虚拟机上
![](/icons/47727dou2.gif)
在有些情况下
![](/icons/47727dou.gif)
您可能没有控制部署环境上
![](/icons/47727de.gif)
操作系统或者Java虚拟机
![](/icons/47727dou2.gif)
在这种情况下
![](/icons/47727dou.gif)
您就需要逐行了解以下
![](/icons/47727de.gif)
![](/icons/47727de.gif)
![](/icons/47727yi.gif)
些建议
![](/icons/47727dou.gif)
然而你应该在修改后使的生效
![](/icons/47727dou2.gif)
我认为以下思路方法是Tomcat性能自身调整
![](/icons/47727de.gif)
最佳方式
![](/icons/47727dou2.gif)
1.禁用DNS查询 当web应用
![](/icons/47727chengxu.gif)
向要记录客户端
![](/icons/47727de.gif)
信息时
![](/icons/47727dou.gif)
它也会记录客户端
![](/icons/47727de.gif)
IP地址或者通过域名服务器查找机器名转换为IP地址
![](/icons/47727dou2.gif)
DNS查询需要占用网络
![](/icons/47727dou.gif)
并且包括可能从很多很远
![](/icons/47727de.gif)
服务器或者不起作用
![](/icons/47727de.gif)
服务器上去获取对应
![](/icons/47727de.gif)
IP
![](/icons/47727de.gif)
过程
![](/icons/47727dou.gif)
这样会消耗
![](/icons/47727yi.gif)
定
![](/icons/47727de.gif)
时间
![](/icons/47727dou2.gif)
为了消除DNS查询对性能
![](/icons/47727de.gif)
影响我们可以关闭DNS查询
![](/icons/47727dou.gif)
方式是修改server.xml文件中
![](/icons/47727de.gif)
enableLookups参数值: Tomcat4
Name="org.apache.coyote.tomcat4.CoyoteConnector" />Tomcat5
除非你需要连接到站点
![](/icons/47727de.gif)
每个HTTP客户端
![](/icons/47727de.gif)
机器名
![](/icons/47727dou.gif)
否则我们建议在生产环境上关闭DNS查询功能
![](/icons/47727dou2.gif)
可以通过Tomcat以外
![](/icons/47727de.gif)
方式来获取机器名
![](/icons/47727dou2.gif)
这样不仅节省了网络带宽、查询时间和内存
![](/icons/47727dou.gif)
而且更小
![](/icons/47727de.gif)
流量会使日志数据也会变得更少
![](/icons/47727dou.gif)
显而易见也节省了硬盘空间
![](/icons/47727dou2.gif)
对流量较小
![](/icons/47727de.gif)
站点来说禁用DNS查询可能没有大流量站点
![](/icons/47727de.gif)
效果明显
![](/icons/47727dou.gif)
但是此举仍不失为
![](/icons/47727yi.gif)
良策
![](/icons/47727dou2.gif)
谁又见到
![](/icons/47727yi.gif)
个低流量
![](/icons/47727de.gif)
网站WebSite
![](/icons/47727yi.gif)
夜的间就流量大增呢? 2.调整线程数 另外
![](/icons/47727yi.gif)
个可通过应用
![](/icons/47727chengxu.gif)
![](/icons/47727de.gif)
连接器(Connector)进行性能控制
![](/icons/47727de.gif)
![](/icons/47727de.gif)
参数是创建
![](/icons/47727de.gif)
处理请求
![](/icons/47727de.gif)
线程数
![](/icons/47727dou2.gif)
Tomcat使用线程池加速响应速度来处理请求
![](/icons/47727dou2.gif)
在Java中线程是
![](/icons/47727chengxu.gif)
运行时
![](/icons/47727de.gif)
路径
![](/icons/47727dou.gif)
是在
![](/icons/47727yi.gif)
个
![](/icons/47727chengxu.gif)
中和其它控制线程无关
![](/icons/47727de.gif)
、能够独立运行
![](/icons/47727de.gif)
代码段
![](/icons/47727dou2.gif)
它们共享相同
![](/icons/47727de.gif)
地址空间
![](/icons/47727dou2.gif)
多线程帮助
![](/icons/47727chengxu.gif)
员写出CPU最大利用率
![](/icons/47727de.gif)
高效
![](/icons/47727chengxu.gif)
![](/icons/47727dou.gif)
使空闲时间保持最低
![](/icons/47727dou.gif)
从而接受更多
![](/icons/47727de.gif)
请求
![](/icons/47727dou2.gif)
Tomcat4中可以通过修改minProcessors和maxProcessors
![](/icons/47727de.gif)
值来控制线程数
![](/icons/47727dou2.gif)
这些值在安装后就已经设定为默认值并且是足够使用
![](/icons/47727de.gif)
![](/icons/47727dou.gif)
但是随着站点
![](/icons/47727de.gif)
扩容而改大这些值
![](/icons/47727dou2.gif)
minProcessors服务器启动时创建
![](/icons/47727de.gif)
处理请求
![](/icons/47727de.gif)
线程数应该足够处理
![](/icons/47727yi.gif)
个小量
![](/icons/47727de.gif)
负载
![](/icons/47727dou2.gif)
也就是说
![](/icons/47727dou.gif)
如果
![](/icons/47727yi.gif)
天内每秒仅发生5次单击事件
![](/icons/47727dou.gif)
并且每个请求任务处理需要1秒钟
![](/icons/47727dou.gif)
那么预先设置线程数为5就足够了
![](/icons/47727dou2.gif)
但在你
![](/icons/47727de.gif)
站点访问量较大时就需要设置更大
![](/icons/47727de.gif)
线程数
![](/icons/47727dou.gif)
指定为参数maxProcessors
![](/icons/47727de.gif)
值
![](/icons/47727dou2.gif)
maxProcessors
![](/icons/47727de.gif)
值也是有上限
![](/icons/47727de.gif)
![](/icons/47727dou.gif)
应防止流量不可控制(或者恶意
![](/icons/47727de.gif)
服务攻击)
![](/icons/47727dou.gif)
从而导致超出了虚拟机使用内存
![](/icons/47727de.gif)
大小
![](/icons/47727dou2.gif)
如果要加大并发连接数
![](/icons/47727dou.gif)
应同时加大这两个参数
![](/icons/47727dou2.gif)
web server允许
![](/icons/47727de.gif)
最大连接数还受制于操作系统
![](/icons/47727de.gif)
内核参数设置
![](/icons/47727dou.gif)
通常Windows是2000个左右
![](/icons/47727dou.gif)
Linux是1000个左右
![](/icons/47727dou2.gif)
在Tomcat5对这些参数进行了调整
![](/icons/47727dou.gif)
请看下表:
属性名
cnV$J4ul/?v?
3bg#PWBJAVA中文站社区门户 b#K b sIoa
描述
.h a0B6DUx,v
JAVA中文站社区门户AUcg_-B-V"a [&I&?'xV5xI`
maxThreads
s(`/K1s1kpS5e
JAVA中文站社区门户G%JL4C_`j)O9_0kn0{W4e'D
Tomcat使用线程来处理接收
![](/icons/47727de.gif)
每个请求
![](/icons/47727dou2.gif)
这个值表示Tomcat可创建
![](/icons/47727de.gif)
最大
![](/icons/47727de.gif)
线程数
%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
指定当所有可以使用
![](/icons/47727de.gif)
处理请求
![](/icons/47727de.gif)
线程数都被使用时
![](/icons/47727dou.gif)
可以放到处理队列中
![](/icons/47727de.gif)
请求数
![](/icons/47727dou.gif)
超过这个数
![](/icons/47727de.gif)
请求将不予处理
&hOJ*]k8Q+Gf
JAVA中文站社区门户!tV'\3N"R
hS$vJAVA中文站社区门户%ZVJ Pz5`
connnectionTimeout
JAVA中文站社区门户,i&b%`Kv#C'g MG
`:h#[\]R#YJAVA中文站社区门户R$TIu\)?4U
网络连接超时
![](/icons/47727dou.gif)
单位:毫秒
![](/icons/47727dou2.gif)
设置为0表示永不超时
![](/icons/47727dou.gif)
这样设置有隐患
![](/icons/47727de.gif)
![](/icons/47727dou2.gif)
通常可设置为30000毫秒
Pg*} M
I8h
JAVA中文站社区门户"]7H S$Z4sjU\$zqLp"HRA
minSpareThreads
JAVA中文站社区门户s[9ZRpU
Axb|4O
JAVA中文站社区门户t5Kh0vS"SU a.O l8T[)e_
Tomcat
![](/icons/47727chushi.gif)
化时创建
![](/icons/47727de.gif)
线程数
JAVA中文站社区门户
t(Q6G EW/f2TP'Y
JAVA中文站社区门户x:R xcWRe8pS
q+p
x@
maxSpareThreads
JAVA中文站社区门户kw"gQ5Gy+a C,e
JAVA中文站社区门户(r`%h]
J1XpJAVA中文站社区门户l&gW/_l
![](/icons/47727yi.gif)
旦创建
![](/icons/47727de.gif)
线程超过这个值
![](/icons/47727dou.gif)
Tomcat就会关闭不再需要
![](/icons/47727de.gif)
![](/icons/47727socket.gif)
线程
Z6t|*HND
JAVA中文站社区门户j s)UfH,YeXb;En:u rHU)tH} Mx2M9\ 最好
![](/icons/47727de.gif)
方式是多设置几次并且进行测试
![](/icons/47727dou.gif)
观察响应时间和内存使用情况
![](/icons/47727dou2.gif)
在区别
![](/icons/47727de.gif)
机器、操作系统或虚拟机组合
![](/icons/47727de.gif)
情况下可能会区别
![](/icons/47727dou.gif)
而且并不是所有人
![](/icons/47727de.gif)
web站点
![](/icons/47727de.gif)
流量都是
![](/icons/47727yi.gif)
样
![](/icons/47727de.gif)
![](/icons/47727dou.gif)
因此没有
![](/icons/47727yi.gif)
刀切
![](/icons/47727de.gif)
方案来确定线程数
![](/icons/47727de.gif)
值
![](/icons/47727dou2.gif)
3.加速JSP编译速度 当第
![](/icons/47727yi.gif)
次访问
![](/icons/47727yi.gif)
个JSP文件时
![](/icons/47727dou.gif)
它会被转换为Java serverlet源码
![](/icons/47727dou.gif)
接着被编译成Java字节码
![](/icons/47727dou2.gif)
你可以控制使用哪个编译器
![](/icons/47727dou.gif)
默认情况下
![](/icons/47727dou.gif)
Tomcat使用使用命令行javac进行使用
![](/icons/47727de.gif)
编译器
![](/icons/47727dou2.gif)
也可以使用更快
![](/icons/47727de.gif)
编译器
![](/icons/47727dou.gif)
但是这里我们将介绍如何优化它们
![](/icons/47727dou2.gif)
另外
![](/icons/47727yi.gif)
种思路方法是不要把所有
![](/icons/47727de.gif)
实现都使用JSP页面
![](/icons/47727dou.gif)
而是使用
![](/icons/47727yi.gif)
些区别
![](/icons/47727de.gif)
java模板引擎变量
![](/icons/47727dou2.gif)
显然这是
![](/icons/47727yi.gif)
个跨越很大
![](/icons/47727de.gif)
决定
![](/icons/47727dou.gif)
但是事实证明至少这种思路方法是只得研究
![](/icons/47727de.gif)
![](/icons/47727dou2.gif)
如果你想了解更多有关在Tomcat可使用
![](/icons/47727de.gif)
模板语言
![](/icons/47727dou.gif)
你可以参考Jason Hunter和William Crawford合著
![](/icons/47727de.gif)
![](/icons/47727smhl.gif)
Java Servlet Programming
![](/icons/47727smhr.gif)
![](/icons/47727yi.gif)
书(O'Reilly公司出版)
![](/icons/47727dou2.gif)
在Tomcat 4.0中可以使用流行而且免费
![](/icons/47727de.gif)
Jikes编译器
![](/icons/47727dou2.gif)
Jikes编译器
![](/icons/47727de.gif)
速度要由于Sun
![](/icons/47727de.gif)
Java编译器
![](/icons/47727dou2.gif)
首先要安装Jikes(可访问http://oss.software.ibm.com/pub/jikes 获得更多
![](/icons/47727de.gif)
信息)
![](/icons/47727dou.gif)
接着需要在环境变量中设置JIKESPATH包含系统运行时所需
![](/icons/47727de.gif)
JAR文件
![](/icons/47727dou2.gif)
装好Jikes以后还需要设置让JSP编译servlet使用Jikes
![](/icons/47727dou.gif)
需要修改web.xml文件中jspCompilerPlugin
![](/icons/47727de.gif)
值:
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(或更高版本)
![](/icons/47727dou.gif)
JSP
![](/icons/47727de.gif)
编译由包含在Tomcat里面
![](/icons/47727de.gif)
Ant
![](/icons/47727chengxu.gif)
控制器直接执行
![](/icons/47727dou2.gif)
这听起来有
![](/icons/47727yi.gif)
点点奇怪
![](/icons/47727dou.gif)
但这正是Ant有意为的
![](/icons/47727de.gif)
![](/icons/47727yi.gif)
部分
![](/icons/47727dou.gif)
有
![](/icons/47727yi.gif)
个API文档指导开发者在没有启动
![](/icons/47727yi.gif)
个新
![](/icons/47727de.gif)
JVM
![](/icons/47727de.gif)
情况下
![](/icons/47727dou.gif)
使用Ant
![](/icons/47727dou2.gif)
这是使用Ant进行Java开发
![](/icons/47727de.gif)
![](/icons/47727yi.gif)
大优势
![](/icons/47727dou2.gif)
另外
![](/icons/47727dou.gif)
这也意味着你现在能够在Ant中使用任何javac支持
![](/icons/47727de.gif)
编译方式
![](/icons/47727dou.gif)
这里有
![](/icons/47727yi.gif)
个有关Apache Ant使用手册
![](/icons/47727de.gif)
javac page列表
![](/icons/47727dou2.gif)
使用起来是容易
![](/icons/47727de.gif)
![](/icons/47727dou.gif)
![](/icons/47727yinwei.gif)
你只需要在 元素中定义
![](/icons/47727yi.gif)
个名字叫“compiler”
![](/icons/47727dou.gif)
并且在value中有
![](/icons/47727yi.gif)
个支持编译
![](/icons/47727de.gif)
编译器名字
![](/icons/47727dou.gif)
举例如下:
jsp org.apache.jasper.servlet.JspServlet logVerbosityLevel
WARNING
compiler
jikes
3 Ant可用
![](/icons/47727de.gif)
编译器
名称
JAVA中文站社区门户h%k+g N'M:_O
ua\
0rzy"B)g%n#KJAVA中文站社区门户0Vnt@8b-@1i
别名
JAVA中文站社区门户:RTKX }6YW,V|
JAVA中文站社区门户Z irA+G0^4yH9Z J2G kK}v
![](/icons/47727diaoyong.gif)
![](/icons/47727de.gif)
编译器
?4aa
K0\7v3b
JAVA中文站社区门户l(STJlFP#TpGJAVA中文站社区门户0q[4z^VU
![](/icons/47727class.gif)
ic
M'Q&`#z&W
PZzI