﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-anchor110-文章分类-tomcat、apache、jboss等服务器相关</title><link>http://www.blogjava.net/anchor110/category/45618.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 11 Aug 2018 07:01:18 GMT</lastBuildDate><pubDate>Sat, 11 Aug 2018 07:01:18 GMT</pubDate><ttl>60</ttl><item><title>java.lang.NoClassDefFoundError踩坑经历</title><link>http://www.blogjava.net/anchor110/articles/433323.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Thu, 09 Aug 2018 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/433323.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/433323.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/433323.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/433323.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/433323.html</trackback:ping><description><![CDATA[<strong>经历如下：</strong><br />eclipse web本地工程，new一个java对象，编译时都没问题，但运行时就直接没反应，也没任何报错。查找了最少半天时间，原来以为是类之间相互依赖造成的，可能某些依赖类没加载进来或初始化的时候有问题。但最终定位确定不是，经过不断折磨和探索，最后在debug时，选择new ***()进行watch，发现报了java.lang.NoClassDefFoundError错误，这才开始有一点眉目。<br /><br /><strong>最终定位问题原因：</strong>java web工程build后的WEB-INF/lib下，没有引入依赖的lib包，导致运行时出现诡异现象。<br /><br /><img src ="http://www.blogjava.net/anchor110/aggbug/433323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2018-08-09 17:13 <a href="http://www.blogjava.net/anchor110/articles/433323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>catalina.out无限增长问题的解决办法</title><link>http://www.blogjava.net/anchor110/articles/404926.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Sun, 13 Oct 2013 04:41:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/404926.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/404926.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/404926.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/404926.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/404926.html</trackback:ping><description><![CDATA[<div><p>tomcat默认情况下，catalina.out日志增长都是无限的，从而导致日志文件超大。</p>  <p>1、下载安装cronolog，步骤如下：</p>  <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">安装过程如下：<br /><br />A、下载（最新版本）<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;wget&nbsp;http:</span><span style="color: #008000; ">//</span><span style="color: #008000; ">cronolog.org/download/cronolog-1.6.2.tar.gz</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><br />B、解压缩<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;tar&nbsp;zxvf&nbsp;cronolog</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1.6</span><span style="color: #000000; ">.</span><span style="color: #000000; ">2</span><span style="color: #000000; ">.tar.gz<br /><br />C、进入cronolog安装文件所在目录<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;cd&nbsp;cronolog</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1.6</span><span style="color: #000000; ">.</span><span style="color: #000000; ">2</span><span style="color: #000000; "><br /><br />D、运行安装<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;.</span><span style="color: #000000; ">/</span><span style="color: #000000; ">configure<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;make<br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;make&nbsp;install<br /><br />E、查看cronolog安装后所在目录（验证安装是否成功）<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;which&nbsp;cronolog<br /><br />一般情况下显示为：</span><span style="color: #000000; ">/</span><span style="color: #000000; ">usr</span><span style="color: #000000; ">/</span><span style="color: #000000; ">local</span><span style="color: #000000; ">/</span><span style="color: #000000; ">sbin</span><span style="color: #000000; ">/</span><span style="color: #000000; ">cronolog</span></div><p><br />2、修改tomcat启动文件<a target="_blank" href="http://wolfgangkiefer.blog.163.com/blog">catalina.sh</a></p><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">A、将touch&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$CATALINA_OUT</span><span style="color: #000000; ">"</span><span style="color: #000000; ">行注释掉。<br /><br />B、将<br />org.apache.catalina.startup.Bootstrap&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$@</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;start&nbsp;\&nbsp;&nbsp;</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$CATALINA_BASE</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/</span><span style="color: #000000; ">logs</span><span style="color: #000000; ">/</span><span style="color: #000000; ">catalina.out&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;&nbsp;替换成:<br />org.apache.catalina.startup.Bootstrap&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$@</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;start&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;\<br /><br /></span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;cronolog&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">$CATALINA_BASE</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/</span><span style="color: #000000; ">logs</span><span style="color: #000000; ">/</span><span style="color: #000000; ">catalina.out.</span><span style="color: #000000; ">%</span><span style="color: #000000; ">Y</span><span style="color: #000000; ">-%</span><span style="color: #000000; ">m</span><span style="color: #000000; ">-%</span><span style="color: #000000; ">d&nbsp;</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">dev</span><span style="color: #000000; ">/</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;&nbsp;<br />重启tomcat，则下次将会在catalina.out后面加上年月日，从而按日进行日志输出。</span></div><pre><pre></pre></pre></div><img src ="http://www.blogjava.net/anchor110/aggbug/404926.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2013-10-13 12:41 <a href="http://www.blogjava.net/anchor110/articles/404926.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat查看并发连接数</title><link>http://www.blogjava.net/anchor110/articles/404240.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Thu, 19 Sep 2013 17:28:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/404240.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/404240.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/404240.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/404240.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/404240.html</trackback:ping><description><![CDATA[<div>netstat -na | grep ESTAB | grep 8080 | wc -l</div><img src ="http://www.blogjava.net/anchor110/aggbug/404240.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2013-09-20 01:28 <a href="http://www.blogjava.net/anchor110/articles/404240.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache服务器安装配置错误集锦</title><link>http://www.blogjava.net/anchor110/articles/404084.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Sat, 14 Sep 2013 13:33:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/404084.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/404084.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/404084.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/404084.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/404084.html</trackback:ping><description><![CDATA[1、apache 配置、编译、安装完毕后，启动apache :apachectl start，报错如下：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">httpd:&nbsp;Syntax&nbsp;error&nbsp;on&nbsp;line&nbsp;</span><span style="color: #000000; ">140</span><span style="color: #000000; ">&nbsp;of&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">usr</span><span style="color: #000000; ">/</span><span style="color: #000000; ">local</span><span style="color: #000000; ">/</span><span style="color: #000000; ">apache2</span><span style="color: #000000; ">/</span><span style="color: #000000; ">conf</span><span style="color: #000000; ">/</span><span style="color: #000000; ">httpd.conf:&nbsp;Cannot&nbsp;load<br /></span><span style="color: #000000; ">/</span><span style="color: #000000; ">usr</span><span style="color: #000000; ">/</span><span style="color: #000000; ">local</span><span style="color: #000000; ">/</span><span style="color: #000000; ">apache2</span><span style="color: #000000; ">/</span><span style="color: #000000; ">modules</span><span style="color: #000000; ">/</span><span style="color: #000000; ">mod_dir.so&nbsp;into&nbsp;server:&nbsp;</span><span style="color: #000000; ">/</span><span style="color: #000000; ">usr</span><span style="color: #000000; ">/</span><span style="color: #000000; ">local</span><span style="color: #000000; ">/</span><span style="color: #000000; ">apache2</span><span style="color: #000000; ">/</span><span style="color: #000000; ">modules</span><span style="color: #000000; ">/</span><span style="color: #000000; ">mod_dir.so:&nbsp;undefined&nbsp;symbol:&nbsp;apr_array_clear</span></div>解决办法：<br />重新配置、编译与安装apache，在configure的时候，带上选项：--with-included-apr。<br />重新配置、编译与安装的步骤如下：<br />.cd httpd.2.4.6<br />.make clean<br /><div>./configure&nbsp;--prefix=/usr/local/apache&nbsp;&nbsp;--enable-so&nbsp;&#8211;enable-mods-shared=most&nbsp;--with-mpm=worker&nbsp;--with-apr=/usr/local/apr/&nbsp;&nbsp;&nbsp;--with-apr-util=/usr/local/apr-util&nbsp;&nbsp;&nbsp;--with-pcre=/usr/local/pcre&nbsp;&nbsp;&nbsp;&nbsp;--with-included-apr<br />.make<br />.make install<br /><br />2、启动apache遇到错误：httpd: Could not reliably determine the server's fully qualified domain name，具体为：<br /><div>httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName</div>问题原因与解决办法：这一般是由于本机DNS设置错误或不想连接外网，所以故意不设置导致成的。解决办法如下：<br /><div><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">[root@server&nbsp;conf]#&nbsp;vi&nbsp;httpd.conf<br />#ServerName&nbsp;www.example.com:</span><span style="color: #000000; ">80</span><span style="color: #000000; "><br />ServerName&nbsp;localhost:</span><span style="color: #000000;">80</span></div></div>注意，端口号要与实际启动的端口号，即Listen配置相同。若启动了多个Listen实例，则需要对应的配置多个ServerName与之相对应，否则还会报错。<br /><br />参考链接：<div>http://www.2cto.com/os/201201/117797.html</div><div>http://hi.baidu.com/zeldady/item/96f1ae30742006c31a969631</div><br />3、源码编译apache报错：<div><span style="color: #333333; font-family: 'Lucida Grande',Verdana,Arial,sans-serif; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; background-color: #ffffff;">configure: error: Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/.<br /><br />解决办法：<br /><div><span style="color: #333333; font-family: 'Lucida Grande', Verdana, Arial, sans-serif; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: #ffffff; ">将APR和APR-util源码下载，解压放到httpd-2.4.3/srclib里面，并去除版本号<br />cp -r apr-1.4.6 httpd-2.4.3/srclib/apr<br />cp -r apr-util-1.4.1 httpd-2.4.3/srclib/apr-util</span></div><br />参考：<div>http://blog.sina.com.cn/s/blog_a45d5a3a01016ycc.html</div><br /></span></div></div><img src ="http://www.blogjava.net/anchor110/aggbug/404084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2013-09-14 21:33 <a href="http://www.blogjava.net/anchor110/articles/404084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat session一直无法清除</title><link>http://www.blogjava.net/anchor110/articles/402330.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Sun, 04 Aug 2013 01:50:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/402330.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/402330.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/402330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/402330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/402330.html</trackback:ping><description><![CDATA[在 web应用中设置了会话的超时控制为1分钟，如下：<br />&lt;session-config&gt;<br />&nbsp;&nbsp;&nbsp; &lt;session-timeout&gt;1&lt;/session-timeout&gt;<br />&lt;/session-config&gt;<br />但会话过了1分钟的一，却不清除，查看tomcat管理控制台，发现session 是一直递增，从未清除过过期的session。<br /><br />解决办法如下：<br />1、删除$TOMCAT_HOME/work目录下的所有文件。<br />2、重启tomcat。<br />3、完毕。<img src ="http://www.blogjava.net/anchor110/aggbug/402330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2013-08-04 09:50 <a href="http://www.blogjava.net/anchor110/articles/402330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何绑定域名和ip</title><link>http://www.blogjava.net/anchor110/articles/391435.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Fri, 16 Nov 2012 04:28:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/391435.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/391435.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/391435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/391435.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/391435.html</trackback:ping><description><![CDATA[方法：<br />1、进入注册域名的服务网站，登录后台管理系统。<br />2、选择&#8220;设置域名解析&#8221;，选择要绑定的域名和要绑定的IP地址。<br />3、注：凡是.cn域名，没备案前，都不支持绑定。只有.com域名支持。<br /><br />过个30分钟左右，具体等待时间可能略有差异，ping域名，就能ping通了，此时，就已经绑定了。<br /><br />接下来，就可以用域名替换ip访问网站或自己的WEB程序了。<img src ="http://www.blogjava.net/anchor110/aggbug/391435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2012-11-16 12:28 <a href="http://www.blogjava.net/anchor110/articles/391435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何替换tomcat下的小猫咪图标</title><link>http://www.blogjava.net/anchor110/articles/391431.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Fri, 16 Nov 2012 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/391431.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/391431.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/391431.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/391431.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/391431.html</trackback:ping><description><![CDATA[在tomcat下部署应用程序，运行后，发现在地址栏中有个tomcat的小猫咪图标。<br />有时候，我们自己不想显示这个图标，想换成自己定义的的图标，那么按如下方法操作即可：<br />1、将$TOMCAT_HOME/webapps/ROOT/tomcat.svg改名。<br />2、将自定义的图标文件改名为favicon.ico，并覆盖$TOMCAT_HOME/webapps/ROOT/favicon.ico。<br /><br />清空浏览器缓存，刷新界面即可看到自定义效果的图标。<img src ="http://www.blogjava.net/anchor110/aggbug/391431.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2012-11-16 11:19 <a href="http://www.blogjava.net/anchor110/articles/391431.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Caused by: java.lang.NoClassDefFoundError: com/sun/xml/bind/CycleRecoverable</title><link>http://www.blogjava.net/anchor110/articles/391408.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Thu, 15 Nov 2012 20:53:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/391408.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/391408.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/391408.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/391408.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/391408.html</trackback:ping><description><![CDATA[解决步骤：<br />1、将jaxb-impl-2.1.12.jar和jaxb-api-2.1.jar放到jre/lib/endorsed/目录下，如果没有endorsed目录，则新建之，一般情况下是没有的。<br />2、将jaxb-impl-2.1.12.jar和jaxb-api-2.1.jar放到$TOMCAT_HOME/lib/endorsed/目录下，如果没有endorsed目录，则新建之，一般情况下是没有的。<img src ="http://www.blogjava.net/anchor110/aggbug/391408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2012-11-16 04:53 <a href="http://www.blogjava.net/anchor110/articles/391408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webwork文件上传中文文件名上传问题解决</title><link>http://www.blogjava.net/anchor110/articles/388236.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Fri, 21 Sep 2012 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/388236.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/388236.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/388236.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/388236.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/388236.html</trackback:ping><description><![CDATA[场景：<br />用webwork上传中文文件名的文件时，在action中接收到的文件名已经乱码。<br /><br />解决办法：<br />修改webwork.properties文件，将上传文件的解析器，修改成pell，如下：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">#&nbsp;multipart&nbsp;parser<br />#弃用jakarta，解决中文上传文件时文件名乱码问题<br />webwork.multipart.parser</span><span style="color: #000000; ">=</span><span style="color: #000000; ">pell</span></div><img src ="http://www.blogjava.net/anchor110/aggbug/388236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2012-09-21 11:28 <a href="http://www.blogjava.net/anchor110/articles/388236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat6启动或者发布项目时提示Publishing failed:Resource /xxxx does not exist</title><link>http://www.blogjava.net/anchor110/articles/349571.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Thu, 05 May 2011 03:25:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/349571.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/349571.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/349571.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/349571.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/349571.html</trackback:ping><description><![CDATA[Tomcat6和Eclipse一起使用时，启动或者发布项目时提示Publishing failed:Resource /xxxx does not exist
<br />
<br />
解决方法：
<br />
刷新一下项目，有可能是磁盘文件和Eclipse项目中文件不一致造成的。
<img src ="http://www.blogjava.net/anchor110/aggbug/349571.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2011-05-05 11:25 <a href="http://www.blogjava.net/anchor110/articles/349571.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于web.xml中的&lt;welcome-file-list&gt;(注：转载于http://yjshengshe.javaeye.com/blog/641934)</title><link>http://www.blogjava.net/anchor110/articles/341547.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Sun, 26 Dec 2010 02:21:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/341547.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/341547.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/341547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/341547.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/341547.html</trackback:ping><description><![CDATA[问题：
<br />
&lt;welcome-file-list&gt;中的&lt;welcome-file&gt;标签部分除了放具体的jsp或html页面（例如下）
<br />
&nbsp; &lt;welcome-file-list&gt;
<br />
&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
<br />
&nbsp; &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;
<br />
&nbsp; &lt;/welcome-file-list&gt;
<br />
外能不能放一个请求在里面？（例如下）
<br />
&nbsp; &lt;welcome-file-list&gt;
<br />
&nbsp; &lt;welcome-file&gt;index.do&lt;/welcome-file&gt;
<br />
&nbsp; &lt;/welcome-file-list&gt;
<br />
<br />
我用spring MVC，按照以下配置
<br />
&nbsp; &lt;welcome-file-list&gt;
<br />
&nbsp; &lt;welcome-file&gt;index.do&lt;/welcome-file&gt;
<br />
&nbsp; &lt;/welcome-file-list&gt;
<br />
启动服务器，终是报404错误，但我在地址栏手工加入index.do时，页面正常显示，这是为什么，是不是服务器不支持这样的写法（index.do）？？？？如果支持应该如何写？？？？
<br />
<br />
回答:
<br />
<br />
支持...不过tomcat 会去检查有没有index.do这个文件.
<br />
<br />
意思大概就是这样,首先读取 welcome list,然后取得第一个index,然后到web中的路径中查找有没有这个文件,没有继续第二个.
<br />
然后继续下去没有,就提示没有主页.
<br />
<br />
解决办法:
<br />
在你的WebRoot 下添加一个空白的文件命名为 index.do
<img src ="http://www.blogjava.net/anchor110/aggbug/341547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2010-12-26 10:21 <a href="http://www.blogjava.net/anchor110/articles/341547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat配置GZIP压缩给网站提速(转载于：http://blog.csdn.net/TechChan/archive/2009/02/20/3910524.aspx)</title><link>http://www.blogjava.net/anchor110/articles/340083.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Wed, 08 Dec 2010 09:34:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/340083.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/340083.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/340083.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/340083.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/340083.html</trackback:ping><description><![CDATA[<h1>
Tomcat配置GZIP压缩给网站提速
<cite><a title="收藏到我的网摘中，并分享给我的朋友">收藏</a> </cite>
</h1>
<div id="blog_text" class="cnt">
<p>打开conf/server.xml文件可以看到：</p>
<p> &lt;!-- Define a non-SSL HTTP/1.1 Connector on port 8080 --&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;Connector<br />
port="8080"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  maxHttpHeaderSize="8192"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  enableLookups="false" redirectPort="8443" acceptCount="100"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  connectionTimeout="20000" disableUploadTimeout="true" /&gt;<br />
&nbsp;&nbsp;&nbsp;  &lt;!-- Note : To disable connection timeouts, set connectionTimeout value<br />
&nbsp;&nbsp;&nbsp;&nbsp;  to 0 --&gt;<br />
<br />
&lt;!-- Note : To use gzip compression you could set the following properties :<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  compression="on" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  compressionMinSize="2048" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  noCompressionUserAgents="gozilla, traviata" <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  compressableMimeType="text/html,text/xml"<br />
--&gt;</p>
<p>要使用gzip压缩功能，可以在Connector实例中加上如下属性:<br />
<br />
1) compression="on" 打开压缩功能<br />
2) compressionMinSize="2048" 启用压缩的输出内容大小，这里面默认为2KB<br />
3) noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器，不启用压缩&amp;&lt;60;<br />
4) compressableMimeType="text/html,text/xml" 压缩类型</p>
<p><br />
修改完成后</p>
<p>&lt;Connector<br />
port="8080"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  maxHttpHeaderSize="8192"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  enableLookups="false" redirectPort="8443" acceptCount="100"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  connectionTimeout="20000" disableUploadTimeout="true"<br />
<span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  compression="on"<br />
compressionMinSize="2048"<br />
noCompressionUserAgents="gozilla,traviata" <br />
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"</span> /&gt;</p>
<p>即在Connector里面增加红色部分即可。</p>
</div>
<img src ="http://www.blogjava.net/anchor110/aggbug/340083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2010-12-08 17:34 <a href="http://www.blogjava.net/anchor110/articles/340083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>公网访问不了80端口的解决方案</title><link>http://www.blogjava.net/anchor110/articles/332001.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Tue, 14 Sep 2010 10:09:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/332001.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/332001.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/332001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/332001.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/332001.html</trackback:ping><description><![CDATA[<br />
问题描述：<br />
&nbsp;&nbsp;&nbsp; linux上部署了一个APACHE，在服务器上访问http://IP地址，可以访问。<br />
&nbsp;&nbsp;&nbsp; 但在公网上，访问，却访问不了。<br />
<br />
经查，原因如下：<br />
&nbsp;&nbsp;&nbsp; 由于服务器托管在IDC机房，电信公司对80端口做了特殊限制，必须是工信部备案的网站，才能开放80端口。<br />
<br />
<img src ="http://www.blogjava.net/anchor110/aggbug/332001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2010-09-14 18:09 <a href="http://www.blogjava.net/anchor110/articles/332001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Windows 系统下Tomcat与Apache服务器集成(注：转载于http://news.newhua.com/news1/Skills_System/2010/91/109113342436764B1G8HBG9JJEDCAH141DKDG0DAG979ADH5197n.html)</title><link>http://www.blogjava.net/anchor110/articles/331471.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Thu, 09 Sep 2010 02:17:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/331471.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/331471.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/331471.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/331471.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/331471.html</trackback:ping><description><![CDATA[<br />
<p style="text-indent: 2em;">Apache 服务器本身没有提供 Servlet/JSP 容器。因此，在实际应用中，把
Tomcat与Apache服务器集成，可以建立具有实用价值的商业化的Web平台。</p>
<p style="text-indent: 2em;"><strong>安装Apache服务器</strong> </p>
<p style="text-indent: 2em;">运行 apache_2.0.63-win32-x86-no_ssl.msi，就启动了 Apache
服务器的安装程序，只要按默认设置进行安装即可。如果安装成功，会自动在<font color="#0000ff">Windows</font>中加入Apache
HTTP服务。 </p>
<p style="text-indent: 2em;">假定Apache服务器的根目录为，在其conf子目录下有一个配置文件httpd.conf。如果Apache安装在本机上，并且采用默认的80端口作为HTTP端口，则在httpd.conf文件中会看到如下属性：
</p>
<p style="text-indent: 2em;"><strong>Listen 80</strong> </p>
<p style="text-indent: 2em;">在操作系统的【开始】&#8594;【程序】&#8594;【Apache HTTP Server
2.0】&#8594;【ControApacheServer】菜单中，提供了重启（Restart）、启动（Start）和关闭（Stop）Apache 服务器的子菜单。
</p>
<p style="text-indent: 2em;"><strong>Tips</strong> </p>
<p style="text-indent: 2em;">应该确保操作系统的80端口没有被占用，否则Apache服务器无法启动。当Apache服务器启动后，就可以通过访问Apache的测试页来确定是否安装成功。
</p>
<p style="text-indent: 2em;"><strong>在Apache服务器中加入JK插件</strong> </p>
<p style="text-indent: 2em;">要在Apache服务器中加入JK插件，只要把mod_jk.so复制到/modules目录下即可。
</p>
<p style="text-indent: 2em;"><strong>创建workers.properties文件</strong> </p>
<p style="text-indent: 2em;">Apache 服务器把 Tomcat
看做是为自己工作的工人（worker）。workers.properties文件用于配置 Tomcat 的信息，它的存放位置为 /conf/workers.
</p>
<p style="text-indent: 2em;">properties。在本书附赠光盘的
sourcecode/chapter26/windows_apache
目录下提供了workers.properties文件，它的内容如下（&#8220;#&#8221;后面为注释信息）： </p>
<p style="text-indent: 2em;">worker.list=worker1worker.worker1.port=8009
#工作端口，若没占用则不用修改worker.worker1.host=localhost
#Tomcat服务器的地址worker.worker1.type=ajp13 #类型worker.worker1.lbfactor=1 #负载平衡因数 </p>
<p style="text-indent: 2em;">以上worker.list指定Tomcat服务器名单。例如&#8220;worker.list=worker1&#8221;表示只有一个
Tomcat 服务器，名为&#8220;worker1&#8221;。再例如&#8220;worker.list=worker1,worker2&#8221;表示有两 </p>
<p style="text-indent: 2em;">个 Tomcat
服务器，分别名为&#8220;worker1&#8221;和&#8220;worker2&#8221;。worker.worker1.port
及worker.worker1.host用于设置名为&#8220;worker1&#8221;的Tomcat服务器的有关属性，如果要设置worker2的port属性，则可以采用&#8220;worker.worker2.port=8109&#8221;的形式。
</p>
<p style="text-indent: 2em;"><strong>测试配置</strong> </p>
<p style="text-indent: 2em;">重启Tomcat服务器和Apache服务器，并通过浏览器访问http://localhost/index.jsp，如果出现Tomcat的默认主页，就说明配置已经成功。此外，如果在Tomcat服务器上已经发布了helloapp应用（把本书附赠光盘的sourcecode/chapter26
目录下的 helloapp目录复制到/webapps 目录下），则可以访问
http://localhost/helloapp/hello.htm，如果正常返回helloapp应用的hello.htm网页，说明配置已经成功。如果配置有误，可以查看JK插件生成的日志信息，它有助于查找错误原因。在Apache服务器的配置文件
httpd.conf 中设定该日志文件的存放位置为/logs/mod_jk.log。 </p>
<br />
<br />

<img src ="http://www.blogjava.net/anchor110/aggbug/331471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2010-09-09 10:17 <a href="http://www.blogjava.net/anchor110/articles/331471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.net.SocketException: Too many open files</title><link>http://www.blogjava.net/anchor110/articles/331469.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Thu, 09 Sep 2010 02:12:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/331469.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/331469.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/331469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/331469.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/331469.html</trackback:ping><description><![CDATA[<br />
&nbsp; tomcat与apache整合的时候，在tomcat/conf/server.xml中配置ajp最大连接参数maxThreads为1024。然后重启服务器，当线程数达到1024峰值的时候，报<strong>java.net.SocketException: Too many open files错误。<br />
&nbsp; </strong><strong><br />
&nbsp; 以下为网上摘抄的解决方案与解惑：<br />
</strong>
<p>&nbsp; 在Unix/Linux系统中，无论是socket还是file访问，在后台为该访问程序分配了一个文件描述符（descriptor），该文件描
述符为应用程序与基础操作系统之间的交互提供了通用接口。Unix/Linux系统对每个进程能打开文件描述符有最大限制，一般默认是1024。如果在操
作socket和file的时候忘记关闭，当超过系统默认的最大限制，则出现java.net.SocketException: Too many
open files。</p>
&nbsp; <br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">查看系统默认文件描述符的最大限制数<br />
#ulimit&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">a<br />
core&nbsp;file&nbsp;size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(blocks,&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">c)&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;"><br />
data&nbsp;seg&nbsp;size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(kbytes,&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">d)&nbsp;unlimited<br />
file&nbsp;size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(blocks,&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">f)&nbsp;unlimited<br />
pending&nbsp;signals&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000;">-</span><span style="color: #000000;">i)&nbsp;</span><span style="color: #000000;">1024</span><span style="color: #000000;"><br />
max&nbsp;locked&nbsp;memory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(kbytes,&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">l)&nbsp;</span><span style="color: #000000;">32</span><span style="color: #000000;"><br />
max&nbsp;memory&nbsp;size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(kbytes,&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">m)&nbsp;unlimited<br />
open&nbsp;files&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000;">-</span><span style="color: #000000;">n)&nbsp;</span><span style="color: #000000;">1024</span><span style="color: #000000;"><br />
pipe&nbsp;size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000;">512</span><span style="color: #000000;">&nbsp;bytes,&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">p)&nbsp;</span><span style="color: #000000;">8</span><span style="color: #000000;"><br />
POSIX&nbsp;message&nbsp;queues&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(bytes,&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">q)&nbsp;</span><span style="color: #000000;">819200</span><span style="color: #000000;"><br />
stack&nbsp;size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(kbytes,&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">s)&nbsp;</span><span style="color: #000000;">10240</span><span style="color: #000000;"><br />
cpu&nbsp;time&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(seconds,&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">t)&nbsp;unlimited<br />
max&nbsp;user&nbsp;processes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000;">-</span><span style="color: #000000;">u)&nbsp;</span><span style="color: #000000;">32764</span><span style="color: #000000;"><br />
virtual&nbsp;memory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(kbytes,&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">v)&nbsp;unlimited<br />
file&nbsp;locks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #000000;">-</span><span style="color: #000000;">x)&nbsp;unlimited<br />
<br />
查看某一进程打开的文件描述符<br />
#lsof&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">p&nbsp;进程ID<br />
java&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">12451</span><span style="color: #000000;">&nbsp;root&nbsp;&nbsp;&nbsp;&nbsp;1w&nbsp;&nbsp;&nbsp;REG&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">8</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">6130</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">2297363</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">opt</span><span style="color: #000000;">/</span><span style="color: #000000;">log.txt<br />
java&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">12451</span><span style="color: #000000;">&nbsp;root&nbsp;&nbsp;&nbsp;43u&nbsp;&nbsp;sock&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">6741803</span><span style="color: #000000;">&nbsp;can</span><span style="color: #000000;">'</span><span style="color: #000000;">t&nbsp;identify&nbsp;protocol</span><span style="color: #000000;"><br />
</span></div>
<p><br />
</p>
<p>&nbsp; 针对这个问题，解决办法如下：</p>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">ulimit&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">n&nbsp;</span><span style="color: #000000;">2048</span><span style="color: #000000;">&nbsp;增加文件描述符最大数</span></div>
<p><br />
</p>
<p>&nbsp; 就我目前遇到的问题，的确是因为socket打开连接太多了。</p>
<p>&nbsp; 当然，网上其他人说的，诸如文件流没有关闭，也可能会导致这个问题。如果是这种情况，请检查程序，把不必要的socket或file操作关闭掉即可解决。<br />
</p>
<p><br />
</p>
<img src ="http://www.blogjava.net/anchor110/aggbug/331469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2010-09-09 10:12 <a href="http://www.blogjava.net/anchor110/articles/331469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat性能调整(注：转载于http://www.jspcn.net/htmlnews/11220922973431762.html)</title><link>http://www.blogjava.net/anchor110/articles/331465.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Thu, 09 Sep 2010 01:56:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/331465.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/331465.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/331465.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/331465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/331465.html</trackback:ping><description><![CDATA[<strong><br />
一.&nbsp;引言</strong><br />
性能测试与分析是软件开发过程中介于架构和调整的一个广泛并比较不容易理解的领域，更是一项较为复
杂的活动。就像下棋游戏一样，有效的性能测试和分析只能在一个良好的计划策略和具备了对不可预料事件的处理能力的条件下顺利地完成。一个下棋高手赢得比赛
靠的不仅仅是对游戏规则的认识，更是靠他的自己的能力和不断地专注于分析自己对手的实力来更加有效地利用和发挥规则的作用。同样一个优秀的性能测试和分析
人员将要面对的是来自一个全新的应用程序和环境下带来的整个项目的挑战。本文中作者结合自己的使用经验和参考文档，对Tomcat性能方面的调整做一简要
的介绍，并给出Tomcat性能的测试、分析和调整优化的一些方法。<br />
<br />
<strong>二.&nbsp;测量Web服务器的性能</strong><br />
测
量web服务器的性能是一项让人感到畏缩的任务，但是我们在这里将给出一些需要注意的地方并且指点你了解其中更多的细节性的内容。它不像一些简单的任务，
如测量CPU的速率或者是测量程序占用CPU的比例，web服务器的性能优化中包括许调整许多变量来达到目标。许多的测量策略中都包含了一个看似简单的浏
览实际上是在向服务器发送大量的请求，我们称之为客户端的程序，来测量响应时间。客户端和服务器端是在同一台机器上吗？服务器在测试的时候还运行着其它的
什么程序吗？客户端和服务器端的通讯是通过局域网，100baseT，10baseT还是使用调制解调器？客户端是否一直重复请求相同的页面，还是随机地
访问不同的页面？（这些影响到了服务缓存的性能）客户端发送请求的有规律的还是突发的？你是在最终的配置环境下运行服务的还是在调试的配置环境下运行服务
的？客户端请求中包含图片还是只有HTML页面？是否有请求是通过servlets和JSP的，CGI程序，服务端包含（Server-
Side&nbsp;Includes&nbsp;，SSI是一个可以让你使用动态HTML文件的技术）？所有这些都将是我们要关心的，并且几乎我们不可能精确地把所有的问题
都清楚地列出来。<br />
<br />
<strong>1</strong>.压力测试工具<br />
<br />
&#8220;工欲善其事，必先利其器&#8221;，压力测试只有借助于一些工具才可得以实施。<br />
<br />
大
多数web压力测试工具的实现原理都是通过重复的大量的页面请求来模拟多用户对被测系统的并发访问，以此达到产生压力的目的。产生压力的手段都是通过录制
或者是编写压力脚本，这些脚本以多个进程或者线程的形式在客户端运行，这样通过人为制造各种类型的压力，我们可以观察被测系统在各种压力状况下的表现，从
而定位系统瓶颈，作为系统调优的基础。目前已经存在的性能测试工具林林总总，数量不下一百种，从单一的开放源码的免费小工具如&nbsp;Aapache&nbsp;自带
的&nbsp;web&nbsp;性能测试工具&nbsp;Apache&nbsp;Benchmark、开源的Jmeter&nbsp;到大而全的商业性能测试软件
如&nbsp;Mercury&nbsp;的&nbsp;LoadRunner&nbsp;等等。任何性能测试工具都有其优缺点，我们可以根据实际情况挑选用最合适的工具。您可以在这里找到一些
web压力测试工具http://www.softwareqatest.com/qatweb1.html#LOAD<br />
<br />
这里我们所使用的
工具要支持web应用服务认证才可以，要支持接收发送cookies，不仅如此Tomcat支持多种认证方式，比如基本认证、基于表单的认证、相互认证和
客户端认证，而一些工具仅仅支持HTTP基本认证。真实地模拟用户认证是性能测试工具的一个重要的部分，因为认证机制将对一个web站点的性能特征产生重
要的影响。基于你在产品中使用的不同的认证方式，你需要从上面的工具列表中选择使用这种特性的测试工具。<br />
<br />
Apache&nbsp;Benchmark
和http_load是命令行形式的工具，非常易于使用。Apache&nbsp;Benchmark可以模仿单独的URL请求并且重复地执行，可以使用不同的命令
行参数来控制执行迭代的次数，并发用户数等等。它的一个特点是可以周期性地打印出处理过程的信息，而其它工具只能给出一个全局的报告。<br />
<br />
<strong>2</strong>.压力测试工具介绍<br />
<br />
<strong>三.&nbsp;外部环境的调整</strong><br />
在
Tomcat和应用程序进行了压力测试后，如果您对应用程序的性能结果不太满意，就可以采取一些性能调整措施了，当然了前提是应用程序没有问题，我们这里
只讲Tomcat的调整。由于Tomcat的运行依赖于JVM，所以在这里我们把Tomcat的调整可以分为两类来详细描述：<br />
<br />
外部环境调整&nbsp;<br />
<br />
调整非Tomcat组件，例如Tomcat运行的操作系统和运行Tomcat的java虚拟机。<br />
<br />
自身调整&nbsp;<br />
<br />
修改Tomcat自身的参数，调整Tomcat配置文件中的参数。<br />
<br />
下面我们将详细讲解外部环境调整的有关内容，Tomcat自身调整的内容将在第2部分中阐述。1.JAVA虚拟机性能优化<br />
<br />
Tomcat本身不能直接在计算机上运行，需要依赖于硬件基础之上的操作系统和一个java虚拟机。您可以选择自己的需要选择不同的操作系统和对应的
JDK的版本（只要是符合Sun发布的Java规范的），但我们推荐您使用Sun公司发布的JDK。确保您所使用的版本是最新的，因为Sun公司和其它一
些公司一直在为提高性能而对java虚拟机做一些升级改进。一些报告显示JDK1.4在性能上比JDK1.3提高了将近10%到20%。<br />
<br />
可以给Java虚拟机设置使用的内存，但是如果你的选择不对的话，虚拟机不会补偿。可通过命令行的方式改变虚拟机使用内存的大小。如下表所示有两个参数用来设置虚拟机使用内存的大小。<br />
参数<br />
&nbsp;描述<br />
&nbsp;<br />
-Xms&lt;size&gt;<br />
&nbsp;JVM初始化堆的大小<br />
&nbsp;<br />
-Xmx&lt;size&gt;<br />
&nbsp;JVM堆的最大值<br />
&nbsp;<br />
<br />
<br />
这两个值的大小一般根据需要进行设置。初始化堆的大小执行了虚拟机在启动时向系统申请的内存的大小。一般而言，这个参数不重要。但是有的应用程序在大负
载的情况下会急剧地占用更多的内存，此时这个参数就是显得非常重要，如果虚拟机启动时设置使用的内存比较小而在这种情况下有许多对象进行初始化，虚拟机就
必须重复地增加内存来满足使用。由于这种原因，我们一般把-Xms和-Xmx设为一样大，而堆的最大值受限于系统使用的物理内存。一般使用数据量较大的应
用程序会使用持久对象，内存使用有可能迅速地增长。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出，并且导致应用服务崩溃。因此一般建议堆
的最大值设置为可用内存的最大值的80%。<br />
<br />
Tomcat默认可以使用的内存为128MB，在较大型的应用项目中，这点内存是不够的，需要调大。<br />
<br />
Windows下，在文件{tomcat_home}/bin/catalina.bat，Unix下，在文件{tomcat_home}/bin/catalina.sh的前面，增加如下设置：<br />
<br />
JAVA_OPTS='-Xms【初始化内存大小】&nbsp;-Xmx【可以使用的最大内存】'<br />
<br />
需要把这个两个参数值调大。例如：<br />
<br />
JAVA_OPTS='-Xms256m&nbsp;-Xmx512m'<br />
<br />
表示初始化内存为256MB，可以使用的最大内存为512MB。<br />
<br />
另外需要考虑的是Java提供的垃圾回收机制。虚拟机的堆大小决定了虚拟机花费在收集垃圾上的时间和频度。收集垃圾可以接受的速度与应用有关，应该通过
分析实际的垃圾收集的时间和频率来调整。如果堆的大小很大，那么完全垃圾收集就会很慢，但是频度会降低。如果你把堆的大小和内存的需要一致，完全收集就很
快，但是会更加频繁。调整堆大小的的目的是最小化垃圾收集的时间，以在特定的时间内最大化处理客户的请求。在基准测试的时候，为保证最好的性能，要把堆的
大小设大，保证垃圾收集不在整个基准测试的过程中出现。<br />
<br />
如果系统花费很多的时间收集垃圾，请减小堆大小。一次完全的垃圾收集应该不超
过&nbsp;3-5&nbsp;秒。如果垃圾收集成为瓶颈，那么需要指定代的大小，检查垃圾收集的详细输出，研究&nbsp;垃圾收集参数对性能的影响。一般说来，你应该使用物理内存
的&nbsp;80%&nbsp;作为堆大小。当增加处理器时，记得增加内存，因为分配可以并行进行，而垃圾收集不是并行的。<br />
<br />
2.操作系统性能优化<br />
<br />
这里说的操作系统是指运行web服务器的系统软件，当然，不同的操作系统是为不同的目的而设计的。比如OpenBSD是面向安全的，因此在它的内核中有
许多的限制来防止不同形式的服务攻击（OpenBSD的一句座右铭是&#8220;默认是最安全的&#8221;）。这些限制或许更多地用来运行活跃的web服务器。<br />
<br />
而我们常用的Linux操作系统的目标是易用使用，因此它有着更高的限制。使用BSD内核的系统都带有一个名为&#8220;Generic&#8221;的内核，表明所有的驱
动器都静态地与之相连。这样就使系统易于使用，但是如果你要创建一个自定义的内核来加强其中某些限制，那就需要排除不需要的设备。Linux内核中的许多
驱动都是动态地加载的。但是换而言之，内存现在变得越来越便宜，所以因为加载额外的设备驱动就显得不是很重要的。重要的是要有更多的内存，并且在服务器上
腾出更多的可用内存。<br />
<br />
小提示：虽然现在内存已经相当的便宜，但还是尽量不要购买便宜的内存。那些有牌子的内存虽然是贵一点，但是从可靠性上来说，性价比会更高一些。<br />
<br />
如果是在Windows操作系统上使用Tomcat，那么最好选择服务器版本。因为在非服务器版本上，最终用户授权数或者操作系统本身所能承受的用户数、可用的网络连接数或其它方面的一些方面都是有限制的。并且基于安全性的考虑，必须经常给操作系统打上最新的补丁。<br />
<br />
3.Tomcat与其它web服务器整合使用<br />
<br />
虽然tomcat也可以作web服务器,但其处理静态html的速度比不上apache,且其作为web服务器的功能远不如apache,因此我们想把
apache和tomcat集成起来，将html与jsp的功能部分进行明确分工，让tomcat只处理jsp部分，其它的由apache,IIS等这些
web服务器处理，由此大大节省了tomcat有限的工作&#8220;线程&#8221;。<br />
<br />
4.负载均衡<br />
<br />
在负载均衡的思路下，多台服务器为对称方式，每台服务器都具有同等的地位，可以单独对外提供服务而无须其他服务器的辅助。通过负载分担技术，将外部发送来的请求按一定规则分配到对称结构中的某一台服务器上，而接收到请求的服务器都独立回应客户机的请求。<br />
<br />
提供服务的一组服务器组成了一个应用服务器集群(cluster)，并对外提供一个统一的地址。当一个服务请求被发至该集群时，根据一定规则选择一台服务器，并将服务转定向给该服务器承担，即将负载进行均衡分摊。<br />
<br />
通过应用负载均衡技术，使应用服务超过了一台服务器只能为有限用户提供服务的限制，可以利用多台服务器同时为大量用户提供服务。当某台服务器出现故障
时，负载均衡服务器会自动进行检测并停止将服务请求分发至该服务器，而由其他工作正常的服务器继续提供服务，从而保证了服务的可靠性。<br />
<br />
负载均衡实现的方式大概有四种：第一是通过DNS，但只能实现简单的轮流分配，不能处理故障，第二如果是基于
MS&nbsp;IIS，Windows&nbsp;2003&nbsp;server本身就带了负载均衡服务，第三是硬件方式，通过交换机的功能或专门的负载均衡设备可以实现，第四种
是软件方式，通过一台负载均衡服务器进行，上面安装软件。使用Apache&nbsp;Httpd&nbsp;Server做负载平衡器，Tomcat集群节点使用
Tomcat就可以做到以上第四种方式。这种方式比较灵活，成本相对也较低。另外一个很大的优点就是可以根据应用的情况和服务器的情况采取一些策略。&nbsp;<br />
<br />
<strong>四.&nbsp;自身调整</strong><br />
本
节将向您详细介绍一些加速可使Tomcat实例加速运行的技巧和方法，无论是在什么操作系统或者何种Java虚拟机上。在有些情况下，您可能没有控制部署
环境上的操作系统或者Java虚拟机。在这种情况下，您就需要逐行了解以下的的一些建议，然而你应该在修改后使之生效。我认为以下方法是Tomcat性能
自身调整的最佳方式。<br />
<br />
1.禁用DNS查询<br />
<br />
当web应用程序向要记录客户端的信息时，它也会记录客户端的IP地址
或者通过域名服务器查找机器名转换为IP地址。DNS查询需要占用网络，并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程，
这样会消耗一定的时间。为了消除DNS查询对性能的影响我们可以关闭DNS查询，方式是修改server.xml文件中的enableLookups参数
值：<br />
<br />
<br />
Tomcat4<br />
<br />
&lt;Connector&nbsp;className="org.apache.coyote.tomcat4.CoyoteConnector"&nbsp;port="80"&nbsp;minProcessors="5"&nbsp;maxProcessors="75"&nbsp;enableLookups="false"&nbsp;redirectPort="8443"&nbsp;acceptCount="100"&nbsp;debug="0"&nbsp;connectionTimeout="20000"&nbsp;useURIValidationHack="false"&nbsp;disableUploadTimeout="true"&nbsp;/&gt;<br />
<br />
Tomcat5<br />
<br />
&lt;Connector&nbsp;port="80"&nbsp;maxThreads="150"&nbsp;minSpareThreads="25"&nbsp;maxSpareThreads="75"&nbsp;enableLookups="false"&nbsp;redirectPort="8443"&nbsp;acceptCount="100"&nbsp;debug="0"&nbsp;connectionTimeout="20000"&nbsp;disableUploadTimeout="true"/&gt;<br />
<br />
<br />
除非你需要连接到站点的每个HTTP客户端的机器名，否则我们建议在生产环境上关闭DNS查询功能。可以通过Tomcat以外的方式来获取机器名。这样
不仅节省了网络带宽、查询时间和内存，而且更小的流量会使日志数据也会变得更少，显而易见也节省了硬盘空间。对流量较小的站点来说禁用DNS查询可能没有
大流量站点的效果明显，但是此举仍不失为一良策。谁又见到一个低流量的网站一夜之间就流量大增呢？<br />
<br />
2.调整线程数<br />
<br />
另外一个可通过应用程序的连接器（Connector）进行性能控制的的参数是创建的处理请求的线程数。Tomcat使用线程池加速响应速度来处理请
求。在Java中线程是程序运行时的路径，是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出
CPU最大利用率的高效程序，使空闲时间保持最低，从而接受更多的请求。<br />
<br />
Tomcat4中可以通过修改minProcessors和
maxProcessors的值来控制线程数。这些值在安装后就已经设定为默认值并且是足够使用的，但是随着站点的扩容而改大这些值。
minProcessors服务器启动时创建的处理请求的线程数应该足够处理一个小量的负载。也就是说，如果一天内每秒仅发生5次单击事件，并且每个请求
任务处理需要1秒钟，那么预先设置线程数为5就足够了。但在你的站点访问量较大时就需要设置更大的线程数，指定为参数maxProcessors的值。
maxProcessors的值也是有上限的，应防止流量不可控制（或者恶意的服务攻击），从而导致超出了虚拟机使用内存的大小。如果要加大并发连接数，
应同时加大这两个参数。web&nbsp;server允许的最大连接数还受制于操作系统的内核参数设置，通常Windows是2000个左右，Linux是
1000个左右。<br />
<br />
在Tomcat5对这些参数进行了调整，请看下表：<br />
属性名<br />
&nbsp;描述<br />
&nbsp;<br />
maxThreads<br />
&nbsp;Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。<br />
&nbsp;<br />
acceptCount&nbsp;<br />
&nbsp;指定当所有可以使用的处理请求的线程数都被使用时，可以放到处理队列中的请求数，超过这个数的请求将不予处理。<br />
&nbsp;<br />
connnectionTimeout&nbsp;<br />
&nbsp;网络连接超时，单位：毫秒。设置为0表示永不超时，这样设置有隐患的。通常可设置为30000毫秒。<br />
&nbsp;<br />
minSpareThreads&nbsp;<br />
&nbsp;Tomcat初始化时创建的线程数。<br />
&nbsp;<br />
maxSpareThreads&nbsp;<br />
&nbsp;一旦创建的线程超过这个值，Tomcat就会关闭不再需要的socket线程。<br />
&nbsp;<br />
<br />
<br />
最好的方式是多设置几次并且进行测试，观察响应时间和内存使用情况。在不同的机器、操作系统或虚拟机组合的情况下可能会不同，而且并不是所有人的web站点的流量都是一样的，因此没有一刀切的方案来确定线程数的值。<br />
<br />
<br />
3.加速JSP编译速度<br />
<br />
当第一次访问一个JSP文件时，它会被转换为Java&nbsp;serverlet源码，接着被编译成Java字节码。你可以控制使用哪个编译器，默认情况下，Tomcat使用使用命令行javac进行使用的编译器。也可以使用更快的编译器，但是这里我们将介绍如何优化它们。<br />
<br />
另外一种方法是不要把所有的实现都使用JSP页面，而是使用一些不同的java模板引擎变量。显然这是一个跨越很大的决定，但是事实证明至少这种方法是
只得研究的。如果你想了解更多有关在Tomcat可使用的模板语言，你可以参考Jason&nbsp;Hunter和William&nbsp;Crawford合著的
《Java&nbsp;Servlet&nbsp;Programming&nbsp;》一书（O'Reilly公司出版）。<br />
<br />
在Tomcat&nbsp;4.0中可以使用流行
而且免费的Jikes编译器。Jikes编译器的速度要由于Sun的Java编译器。首先要安装Jikes（可访问
http://oss.software.ibm.com/pub/jikes&nbsp;获得更多的信息），接着需要在环境变量中设置JIKESPATH包含系统
运行时所需的JAR文件。装好Jikes以后还需要设置让JSP编译servlet使用Jikes，需要修改web.xml文件中
jspCompilerPlugin的值：<br />
<br />
<br />
&lt;servlet&gt;<br />
&lt;servlet-name&gt;jsp&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;<br />
org.apache.jasper.servlet.JspServlet<br />
&lt;/servlet-class&gt;&lt;init-param&gt;<br />
&lt;param-name&gt;logVerbosityLevel&lt;/param-name&gt;<br />
&lt;param-value&gt;WARNING&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;init-param&gt;<br />
&lt;param-name&gt;jspCompilerPlugin&lt;/param-name&gt;<br />
&lt;param-value&gt;<br />
org.apache.jasper.compiler.JikesJavaCompiler<br />
&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;init-param&gt;<br />
&lt;!--&nbsp;&lt;param-name&gt;<br />
org.apache.catalina.jsp_classpath<br />
&lt;/param-name&gt;&nbsp;--&gt;<br />
&lt;param-name&gt;classpath&lt;/param-name&gt;<br />
&lt;param-value&gt;<br />
/usr/local/jdk1.3.1-linux/jre/lib/rt.jar:<br />
/usr/local/lib/java/servletapi/servlet.ja<br />
r&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;load-on-startup&gt;3&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;<br />
<br />
<br />
在Tomcat&nbsp;4.1（或更高版本），JSP的编译由包含在Tomcat里面的Ant程序控制器直接执行。这听起来有一点点奇怪，但这正是Ant有意
为之的一部分，有一个API文档指导开发者在没有启动一个新的JVM的情况下，使用Ant。这是使用Ant进行Java开发的一大优势。另外，这也意味着
你现在能够在Ant中使用任何javac支持的编译方式，这里有一个关于Apache&nbsp;Ant使用手册的javac&nbsp;page列表。使用起来是容易的，因
为你只需要在&nbsp;元素中定义一个名字叫&#8220;compiler&#8221;，并且在value中有一个支持编译的编译器名字，示例如下：<br />
<br />
<br />
&lt;servlet&gt;<br />
&lt;servlet-name&gt;jsp&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;<br />
org.apache.jasper.servlet.JspServlet<br />
&lt;/servlet-class&gt;<br />
&lt;init-param&gt;<br />
&lt;param-name&gt;logVerbosityLevel&lt;/param-name&gt;<br />
&lt;param-value&gt;WARNING&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;init-param&gt;<br />
&lt;param-name&gt;compiler&lt;/param-name&gt;<br />
&lt;param-value&gt;jikes&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;load-on-startup&gt;3&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;<br />
<br />
<br />
<br />
Ant可用的编译器<br />
名称<br />
&nbsp;别名<br />
&nbsp;调用的编译器<br />
&nbsp;<br />
classic&nbsp;<br />
&nbsp;javac1.1,&nbsp;javac1.2&nbsp;<br />
&nbsp;Standard&nbsp;JDK&nbsp;1.1/1.2&nbsp;compiler&nbsp;<br />
&nbsp;<br />
modern&nbsp;<br />
&nbsp;javac1.3,&nbsp;javac1.4&nbsp;<br />
&nbsp;Standard&nbsp;JDK&nbsp;1.3/1.4&nbsp;compiler&nbsp;<br />
&nbsp;<br />
jikes&nbsp;<br />
&nbsp;　　&nbsp;The&nbsp;Jikes&nbsp;compiler&nbsp;<br />
&nbsp;<br />
JVC&nbsp;Microsoft&nbsp;<br />
&nbsp;Microsoft&nbsp;command-line&nbsp;compiler&nbsp;from&nbsp;the&nbsp;Microsoft&nbsp;SDK&nbsp;for&nbsp;Java/Visual&nbsp;J++&nbsp;<br />
&nbsp;<br />
KJC&nbsp;　　&nbsp;The&nbsp;kopi&nbsp;compiler&nbsp;<br />
&nbsp;<br />
GCJ&nbsp;　　&nbsp;The&nbsp;gcj&nbsp;compiler&nbsp;(included&nbsp;as&nbsp;part&nbsp;of&nbsp;gcc)&nbsp;<br />
&nbsp;<br />
SJ&nbsp;Symantec&nbsp;<br />
&nbsp;Symantec's&nbsp;Java&nbsp;compiler&nbsp;<br />
&nbsp;<br />
extJavac<br />
&nbsp;　　&nbsp;Runs&nbsp;either&nbsp;the&nbsp;modern&nbsp;or&nbsp;classic&nbsp;compiler&nbsp;in&nbsp;a&nbsp;JVM&nbsp;of&nbsp;its&nbsp;own&nbsp;<br />
&nbsp;<br />
<br />
<br />
由于JSP页面在第一次使用时已经被编译，那么你可能希望在更新新的jsp页面后马上对它进行编译。实际上，这个过程完全可以自动化，因为可以确认的是新的JSP页面在生产服务器和在测试服务器上的运行效果是一样的。&nbsp;<br />
<br />
在Tomcat4的bin目录下有一个名为jspc的脚本。它仅仅是运行翻译阶段，而不是编译阶段，使用它可以在当前目录生成Java源文件。它是调试JSP页面的一种有力的手段。<br />
<br />
可以通过浏览器访问再确认一下编译的结果。这样就确保了文件被转换成serverlet，被编译了可直接执行。这样也准确地模仿了真实用户访问JSP页面，可以看到给用户提供的功能。也抓紧这最后一刻修改出现的bug并且修改它J<br />
<br />
Tomcat提供了一种通过请求来编译JSP页面的功能。例如，你可以在浏览器地址栏中输入http://localhost:8080
/examples/jsp/dates/date.jsp?jsp_precompile=true，这样Tomcat就会编译data.jsp而不是
执行它。此举唾手可得，不失为一种检验页面正确性的捷径。<br />
<br />
4.&nbsp;其它<br />
<br />
前面我们提到过操作系统通过一些限制手段来防止恶意的服务攻击，同样Tomcat也提供了防止恶意攻击或禁止某些机器访问的设置。<br />
<br />
Tomcat提供了两个参数供你配置：RemoteHostValve&nbsp;和RemoteAddrValve。&nbsp;<br />
<br />
通过配置这两个参数，可以让你过滤来自请求的主机或IP地址，并允许或拒绝哪些主机/IP。与之类似的，在Apache的httpd文件里有对每个目录的允许/拒绝指定。&nbsp;<br />
<br />
例如你可以把Admin&nbsp;Web&nbsp;application设置成只允许本地访问，设置如下：<br />
<br />
<br />
&lt;Context&nbsp;path="/path/to/secret_files"&nbsp;...&gt;&nbsp;<br />
&lt;Valve&nbsp;className="org.apache.catalina.valves.RemoteAddrValve"&nbsp;<br />
<br />
allow="127.0.0.1"&nbsp;deny=""/&gt;&nbsp;<br />
&lt;/Context&gt;<br />
<br />
<br />
如果没有给出允许主机的指定，那么与拒绝主机匹配的主机就会被拒绝，除此之外的都是允许的。与之类似，如果没有给出拒绝主机的指定，那么与允许主机匹配的主机就会被允许，除此之外的都是拒绝的。<br />
<br />
<strong>五.&nbsp;容量计划</strong><br />
容量计划是在生产环境中使用Tomcat不得不提的提高性能的另一个重要的话题。如果你没有对预期的网络流量下的硬件和带宽做考虑的话那么无论你如何做配置修改和测试都无济于事。<br />
<br />
这里先对提及的容量计划作一个简要的定义：容量计划是指评估硬件、操作系统和网络带宽，确定应用服务的服务范围，寻求适合需求和软件特性的软硬件的一项活动。因此这里所说的软件不仅包括Tomcat，也包括与Tomcat结合使用的任何第三方web服务器软件。<br />
<br />
如果在购买软硬件或部署系统前你对容量计划一无所知，不知道现有的软硬件环境能够支撑多少的访问量，甚至更糟直到你已经交付并且在生产环境上部署产品后
才意识到配置有问题时再进行变更可能为时已晚。此时只能增加硬件投入，增加硬盘容量甚至购买更好的服务器。如果事先做了容量计划那么就不会搞的如此焦头烂
额了。<br />
<br />
我们这里只介绍与Tomcat相关的内容。<br />
<br />
首先为了确定Tomcat使用机器的容量计划，你应该从一下列表项目种着手研究和计划：<br />
<br />
1.&nbsp;硬件<br />
<br />
采用什么样的硬件体系？需要多少台计算机？使用一个大型的，还是使用多台小型机？每个计算机上使用几个CPU？使用多少内存？使用什么样的存储设
备，I/O的处理速度有什么要求？怎样维护这些计算机？不同的JVM在这些硬件上运行的效果如何（比如IBM&nbsp;AIX系统只能在其设计的硬件系统上运
行）？<br />
<br />
2.&nbsp;网络带宽<br />
<br />
带宽的使用极限是多少？web应用程序如何处理过多的请求？<br />
<br />
3.&nbsp;服务端操作系统<br />
<br />
采用哪种操作系统作为站点服务器最好？在确定的操作系统上使用哪个JVM最好？例如，JVM在这种系统上是否支持本地多线程，对称多处理？哪种系统可使web服务器更快、更稳定，并且更便宜。是否支持多CPU？&nbsp;<br />
4.&nbsp;Tomcat容量计划<br />
<br />
以下介绍针对Tomcat做容量计划的步骤：<br />
<br />
1）&nbsp;量化负载。如果站点已经建立并运行，可以使用前面介绍的工具模仿用户访问，确定资源的需求量。<br />
<br />
2）&nbsp;针对测试结果或测试过程中进行分析。需要知道那些请求造成了负载过重或者使用过多的资源，并与其它请求做比较，这样就确定了系统的瓶颈所在。例如：如果servlet在查询数据库的步骤上耗用较长的时间，那么就需要考虑使用缓冲池来降低响应时间。<br />
<br />
3）&nbsp;确定性能最低标准。例如，你不想让用户花20秒来等待结果页面的返回，也就是说甚至在达到访问量的极限时，用户等待的时间也不能超过20秒种（从
点击链接到看到返第一条返回数据）。这个时间中包含了数据库查询时间和文件访问时间。同类产品性能在不同的公司可能有不同的标准，一般最好采取同行中的最
低标准或对这个标准做出评估。<br />
<br />
4）&nbsp;确定如何合理使用底层资源，并逐一进行测试。底层资源包括CPU、内存、存储器、带宽、操作系
统、JVM等等。在各种生产环境上都按顺序进行部署和测试，观察是否符合需求。在测试Tomcat时尽量多采用几种JVM，并且调整JVM使用内存和
Tomcat线程池的大小进行测试。同时为了达到资源充分合理稳定地使用的效果，还需针对测试过程中出现的硬件系统瓶颈进行处理确定合理的资源配置。这个
过程最为复杂，而且一般由于没有可参考的值所以只能靠理论推断和经验总结。<br />
<br />
5）&nbsp;如果通过第4步的反复测试如果达到了最优的组合，就可以在相同的生产环境上部署产品了。<br />
<br />
此外应牢记一定要文档化你的测试过程和结果，因为此后可能还会进行测试，这样就可以拿以前的测试结果做为参考。另外测试过程要反复多次进行，每次的条件可能都不一样，因此只有记录下来才能进行结果比较和最佳条件的选择。<br />
<br />
这样我们通过测试找到了最好的组合方式，各种资源得到了合理的配置，系统的性能得到了极大的提升。<br />
<br />
<strong>六.&nbsp;附加资料</strong><br />
很显然本文也很难全面而详尽地阐述性能优化过程。如果你进行更多研究的话可能会把性能调优做的更好，比如Java程序的性能调整、操作系统的调整、各种复
杂环境与应用系统和其它所有与应用程序相关的东西。在这里提供一些文中提到的一些资源、文中提到的相关内容的链接以及本文的一些参考资料。<br />
<br />
1.&nbsp;Web性能测试资料及工具<br />
<br />
1）&nbsp;Jmeter&nbsp;Wiki首页，Jmeter为一个开源的100%Java开发的性能测试工具<br />
http://wiki.apache.org/jakarta-jmeter/<br />
<br />
2）&nbsp;Apache&nbsp;Benchmark使用说明<br />
http://httpd.apache.org/docs-2.0/programs/ab.html<br />
<br />
3）&nbsp;一些Java相关测试工具的介绍，包含可以与Tomcat集成进行测试的工具<br />
http://blog.csdn.net/wyingquan/<br />
<br />
4）&nbsp;LoadRunner?&nbsp;是一种预测系统行为和性能的工业标准级负载测试工具。它通过模拟数据以千万计用户来实施并发负载来对整个企业架构进行测试，来帮助您更快的查找和发现问题。<br />
http://www.mercury.com/us/products/performance-center/loadrunner/<br />
<br />
<br />
2.&nbsp;文中介绍的相关内容的介绍<br />
<br />
1）&nbsp;Apache&nbsp;2.x&nbsp;+&nbsp;Tomcat&nbsp;4.x做负载均衡，描述了如何利用jk配置集群的负载均衡。<br />
http://raibledesigns.com/tomcat/index.html<br />
<br />
2）&nbsp;容量计划的制定，收集了许多有关制定web站点容量计划的例子：<br />
http://www.capacityplanning.com/<br />
<br />
3）&nbsp;评测Tomcat5负载平衡与集群，<br />
http://www.javaresearch.org/article/showarticle.jsp?column=556&amp;thread=19777<br />
<br />
4）&nbsp;Apache与Tomcat的安装与整合之整合篇<br />
http://www.javaresearch.org/article/showarticle.jsp?column=23&amp;thread=18139<br />
<br />
5）&nbsp;性能测试工具之研究，介绍了性能测试工具的原理与思路<br />
http://www.51testing.com/emagzine/No2_2.htm<br />
<br />
6）&nbsp;Java的内存泄漏<br />
http://www.matrix.org.cn/resource/article/409.html<br />
<br />
7）&nbsp;Web服务器和应用程序服务器有什么区别？<br />
http://www.matrix.org.cn/resource/article/1429.html<br />
<br />
8）&nbsp;详细讲解性能中数据库集群的问题<br />
http://www.theserverside.com/articles/article.tss?l=DB_Break <br />
<img src ="http://www.blogjava.net/anchor110/aggbug/331465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2010-09-09 09:56 <a href="http://www.blogjava.net/anchor110/articles/331465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 6.0 共享线程池的配置Shared Executor Thread pool(注：转载于http://www.java2000.net/p11864)</title><link>http://www.blogjava.net/anchor110/articles/331461.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Thu, 09 Sep 2010 01:53:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/331461.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/331461.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/331461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/331461.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/331461.html</trackback:ping><description><![CDATA[<br />
配置很简单
<br />
第一步，打开共享的线程池
<br />
<br />
<div>
<ol start="1">
    <li>&lt;Service&nbsp;name="Catalina"&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;!--The&nbsp;connectors&nbsp;can&nbsp;use&nbsp;a&nbsp;shared&nbsp;executor,&nbsp;you&nbsp;can&nbsp;define&nbsp;one&nbsp;or&nbsp;more&nbsp;named&nbsp;thread&nbsp;pools--&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;Executor&nbsp;name="tomcatThreadPool"&nbsp;namePrefix="catalina-exec-"&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;maxThreads="1000"&nbsp;minSpareThreads="50"&nbsp;maxIdleTime="600000"/&gt;&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="XML" id="code_11864_1">  &lt;Service name="Catalina"&gt;
&lt;!--The connectors can use a shared executor, you can define one or more named thread pools--&gt;
&lt;Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/&gt;</pre>
<br />
<br />
默认前后是注释&lt;!-- --&gt;掉的，去掉就可以了。其中
<br />
<br />
name
<br />
The name used to reference this pool in other places in server.xml. The name is required and must be unique.
<br />
这个是线程池的名字，必须唯一，我们在后面的配置里要用到这个东西
<br />
<br />
namePrefix
<br />
(String) The name prefix for each thread created by the executor.
The thread name for an individual thread will be namePrefix+threadNumber
<br />
线程的名字前缀，用来标记线程名字的，这样每个线程就用这个前缀加上线程编号了，比如
<br />
catalina-exec-1
<br />
catalina-exec-2
<br />
<br />
maxThreads
<br />
(int) The max number of active threads in this pool, default is 200
<br />
允许的最大线程池里的线程数量，默认是200，大的并发应该设置的高一些，反正只是限制而已，不占用资源
<br />
<br />
minSpareThreads
<br />
(int) The minimum number of threads always kept alive, default is 25
<br />
最小的保持活跃的线程数量，默认是25.这个要根据负载情况自行调整了。太小了就影响反应速度，太大了白白占用资源。
<br />
<br />
maxIdleTime
<br />
(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)
<br />
超过最小活跃线程数量的线程，如果空闲时间超过这个设置后，会被关别。默认是1分钟。
<br />
<br />
threadPriority
<br />
(int) The thread priority for threads in the executor, the default is Thread.NORM_PRIORITY
<br />
线程的等级。默认是Thread.NORM_PRIORITY
<br />
<br />
<br />
第二步
<br />
在 Connector里指定使用共享线程池
<br />
<div>
<ol start="1">
    <li>&lt;Connector&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;port="8009"&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;protocol="AJP/1.3"&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;maxThreads="5000"&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;executor="tomcatThreadPool"&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="XML" id="code_11864_2">    &lt;Connector
port="8009"
protocol="AJP/1.3"
maxThreads="5000"
executor="tomcatThreadPool"</pre>
<br />
注意，一旦使用了线程池，则其它的线程属性，比如 maxThreads等将被忽略
<br />
<br />
<br />
我测试了一下，由于每次请求不再需要重新分配线程，系统响应速度还是有很明显的改善的。
<img src ="http://www.blogjava.net/anchor110/aggbug/331461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2010-09-09 09:53 <a href="http://www.blogjava.net/anchor110/articles/331461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>轻松实现Apache,Tomcat集群和负载均衡(注：转载于http://hi.baidu.com/luodaijun/blog/item/5bbe4cfb5ffef864034f56a1.html)</title><link>http://www.blogjava.net/anchor110/articles/331460.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Thu, 09 Sep 2010 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/331460.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/331460.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/331460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/331460.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/331460.html</trackback:ping><description><![CDATA[<p><strong><br />
</strong></p>
<p><strong>环境说明</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Apache&nbsp; :apache_2.0.55&nbsp;&nbsp;&nbsp;&nbsp; 1 个</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tomcat:&nbsp; apache-tomcat-5.5.17 (zip版) 2个</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mod_jk:: mod_jk-apache-2.0.55.so&nbsp; 1个</p>
<p><strong>第一部分：负载均衡</strong></p>
<p>&nbsp;&nbsp;&nbsp; 负载均衡，就是apache将客户请求均衡的分给tomcat1,tomcat2....去处理</p>
<p><strong>&nbsp;&nbsp; 1.安装apche,tomcat</strong></p>
<p>&nbsp;&nbsp; <a href="http://httpd.apache.org/">http://httpd.apache.org/</a>&nbsp;下载Apache 2.0.55</p>
<p>&nbsp;&nbsp;&nbsp; <a href="http://tomcat.apache.org/download-55.cgi">http://tomcat.apache.org/download-55.cgi</a>&nbsp;下载tomcat5.5 zip版本（解压即可，绿色版）</p>
<p>&nbsp;&nbsp; <a href="http://apache.justdn.org/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/">http://apache.justdn.org/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/</a>&nbsp; 下载mod_jk,注意和&nbsp; apache版本匹配</p>
<p>&nbsp;&nbsp; 按照jdk,我的路径为:E:"ide"apache"Apache2</p>
<p>&nbsp;&nbsp; 解压两份Tomcat, 路径分别为 E:"ide"tomcat1,E:"ide"tomcat2</p>
<div forimg="1"><img small="0" src="http://hiphotos.baidu.com/luodaijun/pic/item/9d61f003d5034eec09fa935b.jpg" alt="" border="0" /></div>
<p>下载mod_jk</p>
<div forimg="1"><img small="0" src="http://hiphotos.baidu.com/luodaijun/pic/item/52855e82373a3ea20df4d224.jpg" alt="" border="0" /></div>
<div forimg="1"><img small="0" src="http://hiphotos.baidu.com/luodaijun/pic/item/46899c50d44e3b628435245b.jpg" alt="" border="0" /></div>
<p><strong>2.修改Apache配置文件http.conf</strong></p>
<p>&nbsp;&nbsp; 在apache安装目录下conf目录中找到http.conf</p>
<p>&nbsp;&nbsp; 在文件最后加上下面一句话就可以了</p>
<p>&nbsp; include "E:"ide"apache"Apache2"conf"mod_jk.conf"</p>
<div forimg="1"><img small="0" src="http://hiphotos.baidu.com/luodaijun/pic/item/d1c28cd49b8d6901a08bb720.jpg" alt="" border="0" /></div>
<div forimg="1"><strong>2. http.conf 同目录下新建mod_jk.conf文件，内容如下</strong></div>
<div forimg="1">&nbsp;&nbsp; </div>
<div forimg="1">#加载mod_jk Module<br />
LoadModule jk_module modules/mod_jk-apache-2.0.55.so</div>
<div forimg="1">#指定 workers.properties文件路径<br />
JkWorkersFile conf/workers.properties</div>
<div forimg="1">#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器</div>
<div forimg="1">JkMount /*.jsp controller</div>
<div forimg="1"><strong>3.在http.conf同目录下新建 workers.properties文件，内容如下</strong></div>
<div forimg="1">&nbsp;</div>
<div forimg="1">worker.list = controller,tomcat1,tomcat2&nbsp; #server 列表</div>
<div forimg="1">#========tomcat1========</div>
<div forimg="1">worker.tomcat1.port=8009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #ajp13 端口号，在tomcat下server.xml配置,默认8009<br />
worker.tomcat1.host=localhost&nbsp; #tomcat的主机地址，如不为本机，请填写ip地址<br />
worker.tomcat1.type=ajp13<br />
worker.tomcat1.lbfactor = 1&nbsp;&nbsp; #server的加权比重，值越高，分得的请求越多</div>
<div forimg="1">#========tomcat2========</div>
<div forimg="1">worker.tomcat2.port=9009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #ajp13 端口号，在tomcat下server.xml配置,默认8009<br />
worker.tomcat2.host=localhost&nbsp; #tomcat的主机地址，如不为本机，请填写ip地址<br />
worker.tomcat2.type=ajp13<br />
worker.tomcat2.lbfactor = 1&nbsp;&nbsp; #server的加权比重，值越高，分得的请求越多</div>
<div forimg="1"><br />
#========controller,负载均衡控制器========<br />
worker.controller.type=lb<br />
worker.controller.balanced_workers=tomcat1,tomcat2&nbsp;&nbsp; #指定分担请求的tomcat<br />
worker.controller.sticky_session=1</div>
<div forimg="1"><strong>4.修改tomcat配置文件server.xml</strong></div>
<div forimg="1">如果你在不同电脑上安装tomcat,tomcat的安装数量为一个，可以不必修改tomcat配置文件</div>
<div forimg="1">我这里是在同一台电脑上安装两个tomcat，所以需要更改其中一个的设置</div>
<div forimg="1">打开tomcat2/conf/server.xml文件</div>
<img small="0" src="http://hiphotos.baidu.com/luodaijun/pic/item/a3d133a8ed4063b1ca130c36.jpg" alt="" border="0" />
<div forimg="1"><img small="0" src="http://hiphotos.baidu.com/luodaijun/pic/item/8c3cae7727b25d1bb151b937.jpg" alt="" border="0" /></div>
<div forimg="1"><img small="0" src="http://hiphotos.baidu.com/luodaijun/pic/item/56b04b085ba7f3950b7b8230.jpg" alt="" border="0" /></div>
<div forimg="1"><strong>5.编写一个测试jsp</strong></div>
<div forimg="1">建立一个目录test.里面新建一个test.jsp,内容为</div>
<div forimg="1">&lt;% <br />
&nbsp;&nbsp; System.out.println("===========================");<br />
%&gt;<br />
</div>
<div forimg="1">把test放到tomcat1,tomcat2的webapps下</div>
<div forimg="1"><strong>6.启动apache,tomcat1,tomcat2,进行测试</strong></div>
<div forimg="1">通过 <a href="http://localhost/test/test.jsp">http://localhost/test/test.jsp</a>&nbsp;访问，查看tomcat1的窗口，可以看到打印了一行"=========="</div>
<div forimg="1">再刷新一次，tomcat2也打印了一条，再刷新，可以看到请求会被tomcat1,tomcat2轮流处理,实现了负载均衡</div>
<div forimg="1"><img small="0" src="http://hiphotos.baidu.com/luodaijun/pic/item/acf2fcf2c8b77d13b17ec53d.jpg" alt="" border="0" width="860" /></div>
<div forimg="1"><strong>第二部分，配置集群</strong></div>
<div forimg="1">&nbsp;&nbsp; 只配置负载均衡还不行，还要session复制，也就是说其中任何一个tomcat的添加的session，是要同步复制到其它tomcat， 集群内的tomcat都有相同的session</div>
<div forimg="1"><strong>1. 修改tomcat1, tomcat2的server.xml</strong>,将集群部分配置的在注释符删掉,并将tomcat2的4001端口改为4002，以避免与tomcat冲突，当然，如果是两台电脑，是不用改端口的，去掉注释符即可</div>
&nbsp;&nbsp;
<div forimg="1"><img small="0" src="http://hiphotos.baidu.com/luodaijun/pic/item/aa4ab5fb0f3582224f4aeab2.jpg" alt="" border="0" /></div>
<div forimg="1">
<div forimg="1"><img small="0" src="http://hiphotos.baidu.com/luodaijun/pic/item/89b84c3627ecc1dda3cc2b92.jpg" alt="" border="0" /></div>
</div>
<div forimg="1"><img small="0" src="http://hiphotos.baidu.com/luodaijun/pic/item/cc4b858b603d47d3fd1f10b2.jpg" alt="" border="0" /></div>
<div forimg="1"><strong>
<div forimg="1"><img small="0" class="blogimg" src="http://hiphotos.baidu.com/luodaijun/pic/item/52dfdac4bc506ecb38db4959.jpg" alt="" border="0" /></div>
</strong></div>
<div forimg="1"><strong>2，修改测试项目test</strong></div>
<div forimg="1">修改test.jsp,内容如下</div>
<div forimg="1">&nbsp; &lt;%@ page contentType="text/html; charset=GBK" %&gt;<br />
&lt;%@ page import="java.util.*" %&gt;<br />
&lt;html&gt;&lt;head&gt;&lt;title&gt;Cluster App Test&lt;/title&gt;&lt;/head&gt;<br />
&lt;body&gt;<br />
Server Info:<br />
&lt;%<br />
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"&lt;br&gt;");%&gt;<br />
&lt;%<br />
&nbsp; out.println("&lt;br&gt; ID " + session.getId()+"&lt;br&gt;");</div>
<div forimg="1">&nbsp; // 如果有新的 Session 属性设置<br />
&nbsp; String dataName = request.getParameter("dataName");<br />
&nbsp; if (dataName != null &amp;&amp; dataName.length() &gt; 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; String dataValue = request.getParameter("dataValue");<br />
&nbsp;&nbsp;&nbsp;&nbsp; session.setAttribute(dataName, dataValue);<br />
&nbsp; }</div>
<div forimg="1">&nbsp; out.print("&lt;b&gt;Session 列表&lt;/b&gt;");</div>
<div forimg="1">&nbsp; Enumeration e = session.getAttributeNames();<br />
&nbsp; while (e.hasMoreElements()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; String name = (String)e.nextElement();<br />
&nbsp;&nbsp;&nbsp;&nbsp; String value = session.getAttribute(name).toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp; out.println( name + " = " + value+"&lt;br&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println( name + " = " + value);<br />
&nbsp;&nbsp; }<br />
%&gt;<br />
&nbsp; &lt;form action="index.jsp" method="POST"&gt;<br />
&nbsp;&nbsp;&nbsp; 名称:&lt;input type=text size=20 name="dataName"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; 值:&lt;input type=text size=20 name="dataValue"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;br&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;input type=submit&gt;<br />
&nbsp;&nbsp; &lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</div>
<div forimg="1">然后在test 新建WEB-INF目录，WEB-INF下新建web.xml,内容如下</div>
<div forimg="1">&lt;web-app xmlns="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a>" xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a> <a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</a>" version="2.4"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;display-name&gt;TomcatDemo&lt;/display-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><font color="#ff0000"> &lt;distributable/&gt;</font></strong><br />
&lt;/web-app&gt;</div>
<div forimg="1">注意：在你的应用的web.xml加入&nbsp;<font color="#ff0000"><strong> &lt;distributable/&gt;</strong> </font><font color="#000000">即可</font></div>
<div forimg="1">ok,讲test复制到tomcat1,tomcat2的webapps下，重启apache,tomcat1,tomcat2,</div>
<div forimg="1">输入网址 <a href="http://localhost/test/test.jsp">http://localhost/test/test.jsp</a>&nbsp;&nbsp; </div>
<div forimg="1">新建一个 名称为 xiaoluo&nbsp; ,值为 cdut 的session,提交查询，新开一个ie窗口，再提交查询，如图，可以看到，两个tomcat 是负载均衡，并且session同步的</div>
<div forimg="1">
<div forimg="1"><img small="0" src="http://hiphotos.baidu.com/luodaijun/pic/item/79a9317af99aa5ed2e73b385.jpg" alt="" border="0" width="860" /></div>
</div>
<img src ="http://www.blogjava.net/anchor110/aggbug/331460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2010-09-09 09:48 <a href="http://www.blogjava.net/anchor110/articles/331460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat线程池apr和threadPool（注：转载于http://hi.baidu.com/%CE%E2_%F0%A9/blog/item/da3a56441965cb3386947350.html）</title><link>http://www.blogjava.net/anchor110/articles/330166.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Sun, 29 Aug 2010 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/330166.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/330166.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/330166.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/330166.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/330166.html</trackback:ping><description><![CDATA[<div id="blog_text" class="cnt"><font size="3">Tomcat是使用最广的Java <strong style="background-color: rgb(255, 255, 102); color: black;">Web容器</strong>，功能强大，可扩展性强。最新版本的Tomcat（5.5.17）为了提高响应速度和效率，使用了</font><a target="_blank" href="http://apr.apache.org/"><font size="3">Apache Portable Runtime</font></a><font size="3">（APR）作为最底层，使用了APR中包含Socket、缓冲池等多种技术，性能也提高了。APR也是Apache HTTPD的最底层。可想而知，同属于</font><a target="_blank" href="http://www.apache.org/"><font size="3">ASF</font></a><font size="3">（Apache Software Foundation）中的成员，互补互用的情况还是很多的，虽然使用了不同的开发语言。 </font>
<p><font size="3">Tomcat 的<strong style="background-color: rgb(153, 255, 153); color: black;">线程池</strong>位于tomcat-util.jar文件中，包含了两种<strong style="background-color: rgb(153, 255, 153); color: black;">线程池</strong>方案。</font></p>
<p><font size="3">方案一：使用APR的Pool技术，使用了JNI；</font></p>
<p><font size="3">方案二：使用Java实现的ThreadPool。这里介绍的是第二种。如果想了解APR的Pool技术，可以查看APR的源代码。</font></p>
<p><font size="3">ThreadPool默认创建了5个线程，保存在一个200维的线程数组中，创建时就启动了这些线程，当然在没有请求时，它们都处理&#8220;等待&#8221;状态（其实就是一个while循环，不停的等待notify）。如果有请求时，空闲线程会被唤醒执行用户的请求。</font></p>
<p><font size="3">具体的请求过程是：
服务启动时，创建一个一维线程数组（maxThread＝200个），并创建空闲线程(minSpareThreads＝5个)随时等待用户请求。
当有用户请求时，调用
threadpool.runIt(ThreadPoolRunnable)方法，将一个需要执行的实例传给ThreadPool中。其中用户需要执行的
实例必须实现ThreadPoolRunnable接口。 ThreadPool
首先查找空闲的线程，如果有则用它运行要执行ThreadPoolRunnable；如果没有空闲线程并且没有超过maxThreads，就一次性创建
minSpareThreads个空闲线程；如果已经超过了maxThreads了，就等待空闲线程了。总之，要找到空闲的线程，以便用它执行实例。找到
后，将该线程从线程数组中移走。 接着唤醒已经找到的空闲线程，用它运行执行实例（ThreadPoolRunnable）。
运行完ThreadPoolRunnable后，就将该线程重新放到线程数组中，作为空闲线程供后续使用。 </font></p>
<p><font size="3">由此可以看出，Tomcat的<strong style="background-color: rgb(153, 255, 153); color: black;">线程池</strong>实现是比较简单的，ThreadPool.java也只有840行代码。用一个一维数组保存空闲的线程，每次以一个较小步伐（5个）创建空闲线程并放到<strong style="background-color: rgb(153, 255, 153); color: black;">线程池</strong>中。使用时从数组中移走空闲的线程，用完后，再&#8220;归还&#8221;给<strong style="background-color: rgb(153, 255, 153); color: black;">线程池</strong>。</font><font size="3"><br />
</font></p>
<p><font size="3">tomcat5.5.10以上版本支持apr，支持通过apache runtime module进行JNI调用，使用本地代码来加速网络处理。 </font></p>
<p><font size="3">如果不使用apr之前，Tomcat的Servlet线程池使用的是阻塞IO的模式，使用apr之后，线程池变成了
NIO的非阻塞模式，而且这种NIO还是使用了操作系统的本地代码，看tomcat文档上面的说法是，极大提升web处理能力，不再需要专门放一个web
server处理静态页面了。 <br />
我自己直观的感受是，不用apr之前，你配置多少个等待线程，tomcat就会启动多少个线程挂起等待，使用apr以后，不管你配置多少，就只有几个NIO调度的线程，这一点你可以通过kill -3 PID，然后察看log得知。 </font></p>
<p><font size="3">假设不使用apr，可能端口的线程调度能力比较差，所以通过iptables进行端口转发，让两个端口去分担一个端口的线程调度，就有可能减少线程调度的并发，从而提高处理能力，减少资源消耗。</font></p>
</div>
<img src ="http://www.blogjava.net/anchor110/aggbug/330166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2010-08-29 14:15 <a href="http://www.blogjava.net/anchor110/articles/330166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JConsole远程监控Tomcat服务器</title><link>http://www.blogjava.net/anchor110/articles/330061.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Fri, 27 Aug 2010 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/330061.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/330061.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/330061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/330061.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/330061.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 为了解决内存溢出的问题，会用到一些监视内存的工具，jconsole这个工具是jdk5.0自带的工具，<br />
所以如果你的jdk是5.0那么就不用去安装。<br />
&nbsp;&nbsp;&nbsp; 这个工具可以查看系统的 堆，非堆，线程，等等的一些整体的情况，从而可以判断出系统的一个大概的性能情况。 <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 那么配置如下：如果你是用tomcat，在catalina.bat来设置set JAVA_OPTS=%JAVA_OPTS%&nbsp; -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=7080 -Dcom.sun.management.jmxremote <br />
<br />
&nbsp;&nbsp;&nbsp; 特别注意：-Dcom.sun.management.jmxremote.port=7080，这个端点是jconsole专用的，不要和你的系统的端点冲突。再启动你的应用。 <br />
&nbsp;&nbsp;&nbsp; ok，配置好了后，就直接进dos命令,输入jconsole，它会弹出一个界面，你直接点&#8220;远程连接&#8221;的选项卡，主机就填你要监控的ip地址名，端口与 你配的-Dcom.sun.management.jmxremote.port 的端口一致就可以了，再连接就可以了。如果连接成功就会进入监控你的系统。<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; 常见问题：在linux下，运行hostname -i，如果名称显示为127.0.0.1，则jconsole将连接不上远程服务器。解决办法如下：<br />
&nbsp;&nbsp;&nbsp; vi /etc/hosts<br />
&nbsp;&nbsp;&nbsp; 增加192.168.0.4&nbsp;&nbsp;&nbsp; anchor110<br />
<br />
&nbsp;&nbsp;&nbsp; 然后在jconsole的连接选项中，填写192.168.0.4:[port]即可。<br />
<img src ="http://www.blogjava.net/anchor110/aggbug/330061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2010-08-27 14:30 <a href="http://www.blogjava.net/anchor110/articles/330061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TOMCAT监控工具Probe的正确安装与使用（注：互联网资料整理而成）</title><link>http://www.blogjava.net/anchor110/articles/330055.html</link><dc:creator>小一败涂地</dc:creator><author>小一败涂地</author><pubDate>Fri, 27 Aug 2010 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/anchor110/articles/330055.html</guid><wfw:comment>http://www.blogjava.net/anchor110/comments/330055.html</wfw:comment><comments>http://www.blogjava.net/anchor110/articles/330055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/anchor110/comments/commentRss/330055.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/anchor110/services/trackbacks/330055.html</trackback:ping><description><![CDATA[<br />
<div>LambdaProbe，专门为TOMCAT监控而设计，下面讲解其用法： <br />
<br />
1 下载：
<br />
http://www.lambdaprobe.org/downloads/1.7/probe.1.7b.zip <br />
2
解压缩后，把probe.war放到TOMCAT的webapps下<br />
3
设置用户如下，在tomcat_user.xml中 <br />
&nbsp;&nbsp; vi /usr/local/tomcat/conf//tomcat-users.xml
<br />
<br />
&lt;?xml version='1.0' encoding='utf-8'?&gt; <br />
&lt;tomcat-users&gt;
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;role rolename="manager"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;user username="tomcat" password="tomcat" roles="manager"/&gt;<br />
&lt;/tomcat-users&gt; <br />
<br />
4
设置环境变量，获取服务器状态 <br />
# vi /etc/profile
<br />
JAVA_OPTS=-Dcom.sun.management.jmxremote <br />
export JAVA_OPTS <br />
<br />
5
重启动服务器 <br />
6 输入http://localhost/probe/,输入用户名和密码 <br />
7
即可进入，这里比较精彩的是对内存的监视，动态显示了JVM的内存图表<br />
<br />
注：在WINDOWS环境下，上述第四步设置环境变量后，查看&#8220;内存信息&#8221;，会显示正常图示。<br />
但在LINUX下，即使设置了环境变量，也不行，会报错：
<p><span>This page requires Java5 with enabled JMX
Agent. To enable the JXM Agent please add
"-Dcom.sun.management.jmxremote" to java command line or $JAVA_OPTS
environment variable.</span></p>
<p><span>解决办法如下：</span></p>
<br />
<p>Vi /usr/local/tomcat/bin/catalina.sh </p>
<p>CATALINA_HOME=/usr/local/tomcat</p>
<p>JAVA_OPTS="-Xms512m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=128m <strong>-Dcom.sun.management.jmxremote</strong>"</p>
<p><br />
</p>
<p>再重启服务器即可。<br />
</p>
<br />
<br />
</div>
<img src ="http://www.blogjava.net/anchor110/aggbug/330055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/anchor110/" target="_blank">小一败涂地</a> 2010-08-27 14:04 <a href="http://www.blogjava.net/anchor110/articles/330055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>