??xml version="1.0" encoding="utf-8" standalone="yes"?>
在tomcat配置文gserver.xml中的<Connector ... />配置中,和连接数相关的参数有Q?/p>
maxThreads Q?tomcat起动的最大线E数Q即同时处理的Q务个敎ͼ默认gؓ200?/p>
minProcessorsQ最空闲连接线E数Q用于提高系l处理性能Q默认gؓ10 ?/p>
maxProcessorsQ最大连接线E数Q即Qƈ发处理的最大请求数Q默认gؓ75 ?/p>
acceptCountQ?当tomcat起动的线E数辑ֈ最大时Q接受排队的h个数Q默认gؓ100?/p>
minSpareThreads QTomcat初始化时创徏的线E数?/p>
maxSpareThreads Q一旦创建的U程过q个|Tomcat׃关闭不再需要的socketU程?/p>
enableLookupsQ是否反查域名,取gؓQtrue或false?~省gؓfalse,表示使用客户端主机名的DNS解析功能Q被ServletRequest.getRemoteHostҎ调用?/p>
connectionTimeoutQ网l连接超Ӟ单位Q毫U。设|ؓ0表示怸时Q这栯|有隐患的。通常可设|ؓ30000毫秒?/p>
其中和最大连接数相关的参CؓmaxProcessors和acceptCount。如果要加大q发q接敎ͼ应同时加大这两个参数?/p>
web server允许的最大连接数q受制于操作pȝ的内核参数设|,通常Windows?000个左叻ILinux?000个左叟?/p>
Unix中如何设|这些参敎ͼ请参?a style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; color: rgb(100,102,179); text-decoration: underline; padding-top: 0px" target="_blank">Unix常用监控和管理命?/a>
tomcat5中的配置CZQ?/span>
<Connector port="8090" maxHttpHeaderSize="8169" maxThreads="1000" minSpareThreads="75" maxSpareThreads="300" enableLookups="false" redirectPort="8649" acceptCount="100" connectionTimeout="50000" disableUploadTimeout="true" URIEncoding="GBK"/>
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8080" minProcessors="10" maxProcessors="1024" enableLookups="false" redirectPort="8443" acceptCount="1024" debug="0" connectionTimeout="30000" />
对于其他端口的侦听配|,以此cL?br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />2. tomcat中如何禁止列目录下的文g
在{tomcat_home}/conf/web.xml中,把listings参数讄成false卛_Q如下:
<servlet> ... <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> ... </servlet>
3. 如何加大tomcat可以使用的内?/strong>
tomcat默认可以使用的内存ؓ128MBQ在较大型的应用目中,q点内存是不够的Q需要调大?br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下讄Q?/p>
JAVA_OPTS='-Xms【初始化内存大小?-Xmx【可以用的最大内存? 需要把q个两个参数D大?/p>
例如Q?JAVA_OPTS='-Xms256m -Xmx512m' 表示初始化内存ؓ256MBQ可以用的最大内存ؓ512MB ?/p>
export JAVA_HOME='/home/ftpuser/xjSheetHome/java/jdk1.5.0_22/'
JAVA_OPTS="-Xms1500m -Xmx1500m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m -Dfile.encoding=GBK"
参数说明Q?/p>
-Xms 是指讑֮E序启动时占用内存大。一般来Ԍ大点Q程序会启动?快一点,但是也可能会D机器暂时间变慢?/p>
-Xmx 是指讑֮E序q行期间最大可占用的内存大。如果程序运行需要占 用更多的内存Q超Zq个讄|׃抛出OutOfMemory 异常?/p>
-Xss 是指讑֮每个U程的堆栈大。这个就要依据你的程序,看一个线E?大约需要占用多内存,可能会有多少U程同时q行{?/p>
-XX:PermSize讄非堆内存初始|默认是物理内存的1/64 ?/p>
-XX:MaxPermSize讄最大非堆内存的大小Q默认是物理内存?/4?/p>
<Context path="/Sheet" defaultSessionTimeOut="3600" docBase="/home/user/Sheet" >
<Resource name="jdbc/app" auth="Container"
type="javax.sql.DataSource"
username="SHEET" password="SHEET"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@136.24.248.106:1521:kf"
maxActive="1000" maxIdle="75"/>
<ResourceLink name="UserTransaction"
global="UserTransaction"
type="javax.transaction.UserTransaction"/>
</Context>
参数说明Q?br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />defaultSessionTimeOutQ设|会话时?单位为秒
maxActive Q?q接池的最大数据库q接数。设?表示无限制?br style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px" />maxIdle Q可以同旉|在q接池中的连接的最大数
maxWait Q?最大超时时_以毫U计
二、TOMCAT内存监控
1.讄tomcat的perm size:
2.开启监?/p>
在命令行输入jconsoleQ在弹出H口中徏立本地端口监控,如下图:
使用安装版Tomcat 6.0 Q打开tomcat界面选择javaq一,在java options:
加入
使用jconsole 127.0.0.1:8088可以q接成功Q也能看到jvmq行情况Q?br />但此时访问已l部|的应用Q却提示“无法昄|页”
今天又研I了一会,猜想了一下是不是q个端口独占的,不能和应用冲H,把Dcom.sun.management.jmxremote.port=8088 改ؓ80Q?重启tomcat 果然Q应用可以访问。之后去|上看来些相关信息,实Z个端口,不能占用?/p>
既然 Tomcat 本n已经可以提供q样的服务,我们Z么还要引?Apache 或者其他的一些专门的 HTTP 服务器呢Q原因有下面几个Q?/p>
1. 提升寚w态文件的处理性能
2. 利用 Web 服务器来做负载均衡以及容?/p>
3. 无缝的升U应用程?/p>
q三点对一?web |站来说是非怹重要的,我们希望我们的网站不仅是速度快,而且要稳定,不能因ؓ某个 Tomcat 宕机或者是升E序D用户讉K不了Q而能完成q几个功能的、最好的 HTTP 服务器也只?apache ?http server 了,它跟 tomcat 的结合是最紧密和可靠的?/p>
接下来我们介l三U方法将 apache ?tomcat 整合在一赗?/p>
q是最常见的方式,你可以在|上扑ֈ很多关于配置JK的网,当然最全的q是其官Ҏ提供的文档。JK 本n有两个版本分别是 1 ?2Q目?1 最新的版本?1.2.19Q而版?2 早已l废弃了Q以后不再有新版本的推出了,所以徏议你采用版本 1?/p>
JK 是通过 AJP 协议?Tomcat 服务器进行通讯的,Tomcat 默认?AJP Connector 的端口是 8009。JK 本n提供了一个监控以及管理的面 jkstatusQ通过 jkstatus 可以监控 JK 目前的工作状态以及对?tomcat 的连接进行设|,如下图所C:
在这个图中我们可以看到当前JK配了两个q接分别?8109 ?8209 端口上,目前 s2 q个q接是停止状态,?s1 q个q接自上ơ重启后已经处理?47 万多个请求,量辑ֈ 6.2 ?GQ最大的q发数有 13 {等。我们也可以利用 jkstatus 的管理功能来切换 JK C同的 Tomcat 上,例如?s2 启用Qƈ停用 s1Q这个在更新应用E序的时候非常有用,而且整个切换q程对用h说是透明的,也就辑ֈ了无~升U的目的。关?JK 的配|文章网上已l非常多了,q里我们不再详细的介l整个配|过E,但我要讲一下配|的思\Q只要明白了配置的思\QJK 是一个非常灵zȝlg?/p>
JK 的配|最关键的有三个文gQ分别是
httpd.conf
Apache 服务器的配置文gQ用来加?JK 模块以及指定 JK 配置文g信息
workers.properties
?Tomcat 服务器的q接定义文g
uriworkermap.properties
URI 映射文gQ用来指定哪?URL ?Tomcat 处理Q你也可以直接在 httpd.conf 中配|这?URIQ但是独立这些配|的好处?JK 模块会定期更新该文g的内容,使得我们修改配置的时候无需重新启动 Apache 服务器?/p>
其中W二、三个配|文件名都可以自定义。下面是一个典型的 httpd.conf ?JK 的配|?/p>
# (httpd.conf) # 加蝲 mod_jk 模块 LoadModule jk_module modules/mod_jk.so # # Configure mod_jk # JkWorkersFile conf/workers.properties JkMountFile conf/uriworkermap.properties JkLogFile logs/mod_jk.log JkLogLevel warn
接下来我们在 Apache ?conf 目录下新Z个文件分别是 workers.properties、uriworkermap.properties。这两个文g的内容大概如?/p>
# # workers.properties # # list the workers by name worker.list=DLOG4J, status # localhost server 1 # ------------------------ worker.s1.port=8109 worker.s1.host=localhost worker.s1.type=ajp13 # localhost server 2 # ------------------------ worker.s2.port=8209 worker.s2.host=localhost worker.s2.type=ajp13 worker.s2.stopped=1 worker.DLOG4J.type=lb worker.retries=3 worker.DLOG4J.balanced_workers=s1, s2 worker.DLOG4J.sticky_session=1 worker.status.type=status
以上?workers.properties 配置是我们前面那个屏幕抓图的页面所用的配置。首先我们配|了两个cd?ajp13 ?worker 分别?s1 ?s2Q它们指向同一台服务器上运行在两个不同端口 8109 ?8209 ?Tomcat 上。接下来我们配置了一个类型ؓ lbQ也是负蝲均衡的意思)?workerQ它的名字是 DLOG4JQ这是一个逻辑?workerQ它用来理前面配置的两个物理连?s1 ?s2。最后还配置了一个类型ؓ status ?workerQ这是用来监?JK 本n的模块。有了这三个 worker q不够,我们q需要告?JKQ哪?worker 是可用的Q所以就?nbsp;worker.list = DLOG4J, status q行配置?/p>
接下来便?URI 的映配|了Q我们需要指定哪些链接是?Tomcat 处理的,哪些是由 Apache 直接处理的,看看下面q个文g你就能明白其中配|的意义
/*=DLOG4J /jkstatus=status !/*.gif=DLOG4J !/*.jpg=DLOG4J !/*.png=DLOG4J !/*.css=DLOG4J !/*.js=DLOG4J !/*.htm=DLOG4J !/*.html=DLOG4J
怿你已l明白了一大半了:所有的h都由 DLOG4J q个 worker q行处理Q但是有几个例外Q?jkstatus h?status q个 worker 处理。另外这个配|中每一行数据前面的感叹h什么意思呢Q感叹号表示接下来的 URI 不要?JK q行处理Q也是 Apache 直接处理所有的囄、css 文g、js 文g以及静?html 文本文g?/p>
通过?workers.properties ?uriworkermap.properties 的配|,可以有各U各Ll合来满x们前面提出对一?web |站的要求。您不妨动手试试Q?/p>
q是利用 Apache 自带?mod_proxy 模块使用代理技术来q接 Tomcat。在配置之前L保是否用的?2.2.x 版本?Apache 服务器。因?2.2.x 版本对这个模块进行了重写Q大大的增强了其功能和稳定性?/p>
http_proxy 模式是基?HTTP 协议的代理,因此它要?Tomcat 必须提供 HTTP 服务Q也是说必d?Tomcat ?HTTP Connector。一个最单的配置如下
ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass / http://localhost:8080/
在这个配|中Q我们把所?http://localhost 的请求代理到 http://localhost:8080/ Q这也就?Tomcat 的访问地址Q除?images、css、js 几个目录除外。我们同样可以利?mod_proxy 来做负蝲均衡Q再看看下面q个配置
ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass / balancer://example/ <Proxy balancer://example/> BalancerMember http://server1:8080/ BalancerMember http://server2:8080/ BalancerMember http://server3:8080/ </Proxy>
配置?JK 单多了,而且它也可以通过一个页面来监控集群q行的状态,q做一些简单的l护讄?/p>
ajp_proxy q接方式其实?http_proxy 方式一P都是?mod_proxy 所提供的功能。配|也是一P只需要把 http:// 换成 ajp:// Q同时连接的?Tomcat ?AJP Connector 所在的端口。上面例子的配置可以改ؓQ?/p>
ProxyPass /images ! ProxyPass /css ! ProxyPass /js ! ProxyPass / balancer://example/ <Proxy balancer://example/> BalancerMember ajp://server1:8080/ BalancerMember ajp://server2:8080/ BalancerMember ajp://server3:8080/ </Proxy>
采用 proxy 的连接方式,需要在 Apache 上加载所需的模块,mod_proxy 相关的模块有 mod_proxy.so、mod_proxy_connect.so、mod_proxy_http.so、mod_proxy_ftp.so、mod_proxy_ajp.soQ?其中 mod_proxy_ajp.so 只在 Apache 2.2.x 中才有。如果是采用 http_proxy 方式则需要加?mod_proxy.so ?mod_proxy_http.soQ如果是 ajp_proxy 则需要加?mod_proxy.so ?mod_proxy_ajp.soq两个模块?/p>
相对?JK 的连接方式,后两U在配置上是比较单的Q灵zL方面也一炚w不逊色。但q定性而言׃?JK q样久经考验Q毕?Apache 2.2.3 推出的时间ƈ不长Q采用这U连接方式的|站q不多,因此Q如果是应用于关键的互联|网站,q是采用 JK 的连接方式?/p>
SSL (Secure Socket Layer - 安全套接字层)
功能Q保障在Internet上数据传输之安全Q利用数据加?/span>(Encryption)技术,保数据在网l上之传输过E中不会被截取及H听Q防止篡攏V?/span>
如何让我们的WEB应用E序应用SSL安全保障Q经q几天摸索,l于实现 TOMCAT+SSL 双向认证Q也是_首先Q客L要认证服务器的安全性,保讉K的是正确的服务器Q而非假冒的钓鱼网站;其次Q服务器也要认证客户端的安全性,只有那些拥有服务器授权证书的客户端才可以讉K?/span>
下面请遵循详l步?/span>
1. ?/span>D盘徏立目录:mykeys
2. 启动命o行,q{Ud d:/mykeys
a) 创徏服务器密钥,其密钥库?/span> d:/mykeys/server.ksQ注?/span>keypass?/span>storepass保持一_它们分别代表 密钥密码和密钥库密码Q注?/span> CN=localhost 中,localhost表示要配|?/span>SSL的主机名Q不能Q意指?/span>
D:/mykeys>keytool -genkey -v -alias serverKey -dname "CN=localhost" -keyalg RSA -keypass rwm258-keystore server.ks -storepass rwm258
b) 创徏客户端密钥,其密钥库?/span> d:/mykeys/client.p12Q注意这个密钥库的后~名,注意密钥库类?/span>PKCS12
D:/mykeys>keytool -genkey -v -alias clientKey -dname "CN=SomeOne" -keyalg RSA -keypass lyl147 -keystore client.p12 -storepass lyl147 -storetype PKCS12
c) 客L密钥导出书文?/span>
D:/mykeys>keytool -export -alias clientKey -file clientKey.cer -keystore client.p12 -storepass lyl147 -storetype PKCS12
d) 上q客L密钥文g导入服务器证书库Qƈ讄Z任证书;注意会问你是否信任该证书Q回{?/span> y 卛_
D:/mykeys>keytool -import -v -alias clientKey -file clientKey.cer -keystore server.ks -storepass rwm258
3. Z在本机浏览器中进?/span>SSL讉KQ请Q双?/span> d:/mykeys/client.p12 Q将启动证书向导
a) W?/span>2步:要导入的文g 文g?/span> D:/mykeys/client.p12
b) W?/span>3步:为私钥键入密?/span>lyl147 Q勾选:标志此密钥ؓ可导出的
c) W?/span>4步:证书存储Q选:所有的证书攑օ下列存储区,然后Q浏?/span>-个h
d) 现在Q打开IEQ查看证书:工具-Internet选项-内容-证书-个hQ可以看?/span> SomeOne 证书已被安装
4. 配置TOMCAT服务器,以支?/span>SSL认证Q编辑文Ӟ%tomcat_home%/conf/server.xmlQ下面这D配|代码本来是被屏蔽的Q现在请取消其屏蔽,q相应增加密钥库的配|,其中clientAuth="true"用以启动双向认证Q否则,只有客户端认证服务器-单向
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="D:/mykeys/server.ks" keystorePass="rwm258"
truststoreFile="D:/mykeys/server.ks " truststorePass=" rwm258" />
5. 启动 TOMCATQ然后在IE览器中讉KQ?/span>https://localhost:8443/
a) 弹Z个消息框Q这是要客户端认证服务器Q查看证书可看到服务器证书ؓ localhost Q回։面的步骤Q正是我们创建的那个服务器证书;q里?/span> ?/span>
b) 面出现Q说明客L被允许访?/span>
6. 现在Q再ơ打开IEQ工?/span>-Internet选项-内容-证书-个h Q删除那?/span> SomeOne 证书
a) 现在Q再ơ在IE览器中讉KQ?/span>https://localhost:8443/ 你会发现Q回։面的 3 步骤Q你会明白ؓ什么要客L证书导入 IE 览器;
7. 请再ơ重?/span> 3 步骤Q之后再试讉K
OKQ至此,我们在本ZSSL双向配置已经成功Q那么,换另一台电脑来讉K本机服务器如何处理呢Q很单,?/span> d:/mykeys/client.p12 复制到该机器Q然后执?/span> 3 步骤Q将q个证书导入到该机器?/span> IE览器个书中Q记得密码是Q?/span>lyl147Q当Ӟ在那台电脑上讉KӞ要将localhost修改为本Z机名?/span>IP地址
-------------------------------------------------------------------
要你自qWEBE序应用SSL安全讉KQ请遵@如下配置
在你应用?/span> web.xml 文g?/span> <web-app></web-app> 中加入如下配|?/span>
<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
你会发现Q即使?/span> http://....:8080 来访问你的应用程序,它也会重定向?/span> https://....8443 讉KQ也是_你的应用已经强制使用SSL安全讉K?/span>
OKQ现在,充分享受 SSL 安全讉K服务?/span>
此外Q你q可以在你的E序中验证客戯书,实现客户端证书登录,具体q里不谈了,下次l出完整E序
1Q用控制台部v
讉KHttpQ?/localhost:8080Qƈ通过Tomcat ManagerdQ进入部|界面即可?/p>
2Q利用Tomcat自动部v
应用程序复制到Tomcat?webapps路径下,Tomcat启动时将自动加蝲?/p>
3Q修改Server.xml文g部v
用UE或EditPlus打开Tomcat位于conf/server.xml的配|文Ӟ扑ֈ以下内容Q?/p>
Xml代码
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
.....
</Host>
.....
在Host之间d如下内容Q?/p>
来源Q?http://blog.sina.com.cn/s/blog_658fbfbb0100i3sa.html) - tomcat自动部v_eric_新浪博客
Xml代码
<Context path="/Mywebapps" reloadable="true" docBase="d:\Mywebapps" workDir="d:\Mywebapps\emp"/>
pathQ表C问的路径Q如上述例子中,讉K该应用程序ؓQhttp://localhost:8080/Mywebapps
reloadableQ表C可以在q行时在classes与lib文g夹下自动加蝲cd
docbaseQ表C应用程序的地址Q注意斜杠的方向“\”
workdirQ表C缓存文件的攄地址
4Q增加自定义web部v文g(推荐使用Q不需要重启Tomcat)
在Tomcat安装目录conf\Catalina\localhost下,里面有Tomcat自带的三个应用,随意复制其中的一个XML文gQ然后修?docbase指向你自q应用E序Qƈ把path改名Q各参数参见上第三种Ҏ。或者你也可以自己新Z个XML文g(注意此文件名作?Context中的path,不管文g里的path怎么讄也无?Q将以下内容复制q去Q修改相应\径即可?/p>
Xml代码
<Context path="/test" docBase="F:/J2EE/yazd_war_3_0"
debug="0" privileged="true" reloadable="true" >
</Context>
部v完毕后,通过http://localhost:8080/你的path?可以访问?br />