﻿<?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-都市淘沙者-文章分类-Tomcat/Weblogic/Resin/Jboss</title><link>http://www.blogjava.net/jelver/category/19887.html</link><description>http://www.gaolucha.com上线了，嘿嘿</description><language>zh-cn</language><lastBuildDate>Wed, 26 Dec 2012 12:26:51 GMT</lastBuildDate><pubDate>Wed, 26 Dec 2012 12:26:51 GMT</pubDate><ttl>60</ttl><item><title>Nginx根据UA区分PC或手机访问不同网站</title><link>http://www.blogjava.net/jelver/articles/392971.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Fri, 14 Dec 2012 02:44:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/392971.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/392971.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/392971.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/392971.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/392971.html</trackback:ping><description><![CDATA[根据浏览器的UA可以判断，当然不是完全准确，但是可以匹配大部分的访问，关键的Nginx配置如下：<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; ">#默认的root为web，符合手机后则到wap目录下<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;&nbsp;</span><span style="color: #808080; ">/</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;</span><span style="color: #808080; ">/</span><span style="color: #000000; ">usr</span><span style="color: #808080; ">/</span><span style="color: #000000; ">local</span><span style="color: #808080; ">/</span><span style="color: #000000; ">website</span><span style="color: #808080; ">/</span><span style="color: #000000; ">web;<br />&nbsp;&nbsp;&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: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(&nbsp;$http_user_agent&nbsp;</span><span style="color: #808080; ">~</span><span style="color: #000000; ">&nbsp;"(MIDP)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(WAP)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(UP.Browser)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Smartphone)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Obigo)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Mobile)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(AU.Browser)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(wxd.Mms)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(WxdB.Browser)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(CLDC)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(UP.Link)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(KM.Browser)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(UCWEB)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(SEMC\</span><span style="color: #808080; ">-</span><span style="color: #000000; ">Browser)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Mini)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Symbian)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Palm)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Nokia)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Panasonic)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(MOT\</span><span style="color: #808080; ">-</span><span style="color: #000000; ">)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(SonyEricsson)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(NEC\</span><span style="color: #808080; ">-</span><span style="color: #000000; ">)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Alcatel)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Ericsson)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(BENQ)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(BenQ)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Amoisonic)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Amoi\</span><span style="color: #808080; ">-</span><span style="color: #000000; ">)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Capitel)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(PHILIPS)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(SAMSUNG)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Lenovo)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Mitsu)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Motorola)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(SHARP)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(WAPPER)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(LG\</span><span style="color: #808080; ">-</span><span style="color: #000000; ">)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(LG</span><span style="color: #808080; ">/</span><span style="color: #000000; ">)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(EG900)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(CECT)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Compal)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(kejian)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Bird)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(BIRD)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(G900</span><span style="color: #808080; ">/</span><span style="color: #000000; ">V1.</span><span style="color: #800000; font-weight: bold; ">0</span><span style="color: #000000; ">)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Arima)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(CTL)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(TDG)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Daxian)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(DAXIAN)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(DBTEL)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Eastcom)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(EASTCOM)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(PANTECH)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Dopod)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Haier)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(HAIER)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(KONKA)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(KEJIAN)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(LENOVO)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Soutec)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(SOUTEC)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(SAGEM)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(SEC\</span><span style="color: #808080; ">-</span><span style="color: #000000; ">)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(SED\</span><span style="color: #808080; ">-</span><span style="color: #000000; ">)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(EMOL\</span><span style="color: #808080; ">-</span><span style="color: #000000; ">)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(INNO55)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(ZTE)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(iPhone)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Android)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Windows&nbsp;CE)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Wget)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Java)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(curl)</span><span style="color: #808080; ">|</span><span style="color: #000000; ">(Opera)"&nbsp;){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;</span><span style="color: #808080; ">/</span><span style="color: #000000; ">usr</span><span style="color: #808080; ">/</span><span style="color: #000000; ">local</span><span style="color: #808080; ">/</span><span style="color: #000000; ">website</span><span style="color: #808080; ">/</span><span style="color: #808080; "></span><span style="color: #000000; ">wap;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&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: #0000FF; ">index</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">index</span><span style="color: #000000; ">.html&nbsp;</span><span style="color: #0000FF; ">index</span><span style="color: #000000; ">.htm;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span></div><br /><img src ="http://www.blogjava.net/jelver/aggbug/392971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2012-12-14 10:44 <a href="http://www.blogjava.net/jelver/articles/392971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat6.0远程调试【转】</title><link>http://www.blogjava.net/jelver/articles/371062.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Thu, 01 Mar 2012 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/371062.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/371062.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/371062.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/371062.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/371062.html</trackback:ping><description><![CDATA[<div><p>红薯&#8220;http://www.oschina.net/question/12_8196&#8221;<br /></p><p>有些时候，调试不得不用外网，比如说做支付宝的支付接口，服务器后台通 知就不得不用外网的ip。无奈，只能扔到服务器远程调试了。</p> <p>网上讲关于远程调试tomcat的倒是蛮多，基本都是将改啥catalina.sh,startup.sh的，操作还是复杂点。下面这篇就只针对于 linux下的tomcat远程调试，不用改啥文件，简单而又没啥副作用。本人在tomcat6 的情况下远程调试成功。</p> <p>相信很  多J2EE的开发者都是在Windows上面开发程序，然后把程序上传到Linux下运行的吧。可是有时候在自己机器上运行的好好的程序，放到服务器下就  出错了。单单看出错信息也推断不出是哪里的问题。这时候试试用Java的JPDA远程调试程序，一定可以让你很满意。</p> <p>tomcat服务器已经内置了JPDA支持，只要用:</p> <p>catalina.sh jpda start</p> <p>这条命令启动tomcat，它就会监听8000端口，等待调试器的连接。要注意不<span style="font-size: 1em;">能使</span>用 startup.sh脚本。tomcat会使用 JPDA_ADDRESS这个环境变量的值。比如想监听8017端口：</p> <p>export&nbsp; JPDA_ADDRESS=8017 <br />catalina.sh jpda start</p> <p>接着，选一个自己喜欢的调试器，基本上现在主流的如Eclipse、NetBean都可以。我主要使用Eclipse，操作只要三步：</p> <p>1.选择&#8220;Run&#8221;菜单里的&#8220;Open Debug Dialog&#8221;。</p> <p>2.在对话框里找到&#8220;Remote Java Application&#8221;。 右键菜单选择&#8220;New&#8221;创建一个配置。</p> <p>3.新创建的配置的Project选择服务器上的工程。Host和Port分别填写你服务器的IP和JPDA的端口，默认是8000，或 者$JPDA_ADDRESS。</p> <p>现在就可以像本机调试一样， 设置断点和跟踪调试了。</p></div><img src ="http://www.blogjava.net/jelver/aggbug/371062.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2012-03-01 11:11 <a href="http://www.blogjava.net/jelver/articles/371062.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Resin 跨服务器的session传递[zhuan]</title><link>http://www.blogjava.net/jelver/articles/289502.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Sun, 02 Aug 2009 13:50:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/289502.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/289502.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/289502.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/289502.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/289502.html</trackback:ping><description><![CDATA[<p>Resin 跨服务器的session传递</p>
<p>--By oldjavaman </p>
<p>&nbsp;http://blog.csdn.net/oldjavaman/archive/2009/07/10/4338315.aspx</p>
<p>1.&nbsp;&nbsp; 基于文件的session持久化技术</p>
<p>Seesion能够被跨服务器持久化， 包含我们的web应用的Class发生变化， 譬如在开发期间，使用基于文件的持久化Seesion技术是非常便捷的， 尤其是我们在开发时， 当Servlet会发生经常变化</p>
<p>在resin.conf中配置如下</p>
<p>&lt;web-app xmlns="http://caucho.com/ns/resin"&gt;&nbsp; &lt;session-config&gt;&nbsp;&nbsp;&nbsp; &lt;file-store&gt;WEB-INF/sessions&lt;/file-store&gt;&nbsp; &lt;/session-config&gt;&lt;/web-app&gt; </p>
<p>这样的配置是将Session写在一个在&lt;file-store&gt;中定义的文件目录中，当Session发生变化时，将会把session写入一个文件， 当web应用被加载时， resin会从文件里面加载session</p>
<p>但是，基于文件的session技术在做跨服务器的session传递时是没有作用的，有人提出使用NFS技术， 在多个服务器之间共享这个session持久文件， 但是NFS往往会从本地调用缓存， 这样一来， 实际存放session的文件发生变化时，不能及时在另一台服务器上得到体现</p>
<p>2.&nbsp;&nbsp; 分布式session<br />
分布式session比文件持久session复杂得多， 文件持久session是一个简单的基于内存的session管理， 但是分布式session必须事先在多台服务器之间实现session变化的传递</p>
<p>多台机器的负载均衡， 使用的session技术不外乎sticky sessions （粘性session）或者symmetrical sessions（对称session）。前者关注的是负载均衡技术， 后者是关注JVM的技术。使用何种技术依赖于你有什么样的硬件，多少台机器，你要如何管理session.</p>
<p>2.1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对称session<br />
对称session技术多用于负载均衡，一个session可以从A机器中取出，存放在B机器里面，采用JDBC session技术的对称session ,需要描述resin.conf中的&#8220;always-load-session&#8221;属性。 每个请求都获得最新状态的session</p>
<p>对于对称的session来说， 一个完全一致的服务器环境是他可以工作的基础，所以较粘性session来说， 由于它每次web请求都需要更新session信息， 所以比较低效。</p>
<p>2.2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 粘性session<br />
粘性的session依赖JVM来实现， 只要session开始工作，那么负载均衡将永远把相同的session存放于同一个机器上， 举个例子来说,有一个ID为aaaXXX的session永远放在A机器的JVM-A上， 而bbbXXX的session用于放在B机器的JVM-B上。</p>
<p>使用这种技术的是比较可靠的， 如果A机器宕机， 则可以从B机器上取得我们需要的session， 而使用者并无从查觉，另外使用粘性session是高效率的，只有session发生变更时才需要重写到服务器。</p>
<p>2.3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; always-load-session<br />
正如上文提及的对称式的session技术需要使用&lt;always-load-session&gt;属性来标识是否每个请求都要从服务器更新session， 如果使用的是jdbc-session技术， 那么这个标识是一定要在配置文件中加上的， 但是如果是基于tcp-session技术的话， 可以不用标识， 因为tcp-session的技术更为老练一些。</p>
<p>always-save-session属性强制了客户的每次web请求需要从服务器的session存储中获得更新，默认情况，用户只有在创建session才从服务器持久层取得session，但是使用了多个服务器的话， 就需要标识来强制每个请求都从服务器持久层取得session来保证每个服务器的session是一致的。</p>
<p>2.4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; always-save-session<br />
默认情况, 当session发生变化时Resin会将session写入到服务器， 如：你在程序中调用了setAttribute()方法，但是假设你仅仅是更新了session中的对象的一个属性， 譬如存放的是一个用户对象， 你改变了这个用户对象的年纪， 这个时候resin并不能侦测到session的变化，也不会保存这个变化。</p>
<p>使用&lt;always-save-session &gt;属性， 可以确保在客户么个请求结束后， 都会在服务器保存session的变化， 尽管低效， 但是非常可靠。</p>
<p>&nbsp;</p>
<p>3.&nbsp;&nbsp; 基于数据库的session同步技术<br />
基于数据库的session技术非常容易理解， resin把session写入到数据库中， 每次请求session从数据库中来获得。</p>
<p>为了效率的考虑， jvm所在机器必须保存session的缓存，只有当session发生变化时，这个机器才会向数据库重新查询，如果另一个jvm里面的代码改变了session，将会通知这个机器向数据库请求获得更新。</p>
<p>这样的数据库同步技术会导致向一个已经存在session的机器分发变更了的session数据，这样数据库可能会成为瓶颈， 为了解决这样的问题， 采用便捷轻巧的mysql来存储session，使用Oracle来存放业务数据是一个不错的主意。</p>
<p>使用数据库技术&lt;database&gt;属性是必须的， 加上这个属性，resin会自动在制定数据库上创建session存储的表</p>
<p>&lt;resin xmlns="http://caucho.com/ns/resin"&gt;&lt;server&gt;&nbsp; &lt;http id='a' port='80'/&gt;&nbsp; &lt;http id='b' port='80'/&gt;&nbsp;&nbsp; &lt;database jndi-name="jdbc/session"&gt;&nbsp;&nbsp;&nbsp; ...&nbsp; &lt;/database&gt;&nbsp;&nbsp; &lt;cluster&gt;&nbsp;&nbsp;&nbsp; &lt;srun id='a' host='host-a' port='6802'/&gt;&nbsp;&nbsp;&nbsp; &lt;srun id='b' host='host-b' port='6802'/&gt;&nbsp; &lt;/cluster&gt;&nbsp;&nbsp; &lt;persistent-store type="jdbc"&gt;&nbsp;&nbsp;&nbsp; &lt;init&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;data-source&gt;jdbc/session&lt;data-source&gt;&nbsp;&nbsp;&nbsp; &lt;/init&gt;&nbsp; &lt;/persistent-store&gt;&nbsp; ...&nbsp;&nbsp; &lt;web-app-default&gt;&nbsp;&nbsp;&nbsp; &lt;session-config&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;use-persistent-store/&gt;&nbsp;&nbsp;&nbsp; &lt;/session-config&gt;&nbsp; &lt;/web-app-default&gt; <br />
&nbsp;</p>
<p>持久化的session必须在上文的&lt;sever&gt;中使用&lt;persistent-store&gt;来定义。而每一个web-app应用必须使用&lt;use-persistent-store/&gt;来表示需要分布式session技术</p>
<p>ata-source<br />
&nbsp;数据源<br />
&nbsp;<br />
table-name<br />
&nbsp;存放session数据的表名 <br />
&nbsp;<br />
blob-type<br />
&nbsp; Blob类型<br />
&nbsp;<br />
max-idle-time<br />
&nbsp; 释放时间 <br />
&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>CREATE TABLE persistent_session (</p>
<p>&nbsp; id VARCHAR(64) NOT NULL,</p>
<p>&nbsp; data BLOB,</p>
<p>&nbsp; access_time int(11),</p>
<p>&nbsp; expire_interval int(11),</p>
<p>&nbsp; PRIMARY KEY(id)</p>
<p>)<br />
&nbsp;</p>
<p>下面是一个使用持久层session的web-app定义示例：</p>
<p>&lt;web-app xmlns="http://caucho.com/ns/resin"&gt;&nbsp; &lt;session-config&gt;&nbsp;&nbsp;&nbsp; &lt;use-persistent-store/&gt;&nbsp;&nbsp;&nbsp; &lt;always-save-session/&gt;&nbsp; &lt;/session-config&gt;&lt;/web-app&gt; </p>
<p>4.&nbsp;&nbsp; 基于集群session技术<br />
基于集群的session技术应用在服务器集群领域， 在一些案例中采用数据库的session分布技术是高效的， 有些场合，采用集群的session是高效的。</p>
<p>在集群的session每一个服务器拥有一个jvm和一个备份jvm， session同时保存在自己的jvm和备份jvm里面。</p>
<p>同样地， 你必须修改&lt;sever&gt;中的&lt;cluster&gt;下面的&lt;srun&gt;属性来达到集群session的效果， 在web-app中使用&lt;use-persistent-store&gt;属性来标识这个应用采用session持久化技术</p>
<p>配置如下：</p>
<p>&lt;resin xmlns="http://caucho.com/ns/resin"&gt;</p>
<p>&nbsp; ...</p>
<p>&nbsp;</p>
<p>&lt;server&gt;</p>
<p>&nbsp; &lt;cluster&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;srun id="a" host="192.168.0.1" port="6802" index="1"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;srun id="b" host="192.168.0.2" port="6802" index="2"/&gt;</p>
<p>&nbsp; &lt;/cluster&gt;</p>
<p>&nbsp;</p>
<p>&nbsp; &lt;persistent-store type="cluster"&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;init path="cluster"/&gt;</p>
<p>&nbsp; &lt;/persistent-store&gt;</p>
<p>&nbsp; ...<br />
&nbsp;</p>
<p>&nbsp;</p>
<p>&lt;web-app xmlns="http://caucho.com/ns/resin"&gt;&nbsp; &lt;session-config&gt;&nbsp;&nbsp;&nbsp; &lt;use-persistent-store="true"/&gt;&nbsp; &lt;/session-config&gt;&lt;/web-app&gt; <br />
&nbsp;</p>
<p>&lt;srun&gt;和&lt;srun-backup&gt;都被视为一个集群服务器， 当一个服务器上的session发生变化时， 它会自动寻找其他的备份服务器， 并把备份服务器上的session更新， 当这个服务器重新启动时， 他会向备份服务器请求session，并获得备份。</p>
<p>&lt;resin xmlns="http://caucho.com/ns/resin"&gt;&lt;server&gt;&nbsp; &lt;http id='a' port='80'/&gt;&nbsp; &lt;http id='b' port='80'/&gt;&nbsp;&nbsp; &lt;cluster&gt;&nbsp;&nbsp;&nbsp; &lt;srun id='a' host='host-a' port='6802'/&gt;&nbsp;&nbsp;&nbsp; &lt;srun id='b' host='host-b' port='6802'/&gt;&nbsp; &lt;/cluster&gt;&nbsp;&nbsp; &lt;persistent-store type="cluster"&gt;&nbsp;&nbsp;&nbsp; &lt;init path="cluster"/&gt;&nbsp; &lt;/persistent-store&gt;&nbsp;&nbsp; &lt;host id=''&gt;&nbsp; &lt;web-app id=''&gt;&nbsp;&nbsp; &lt;session-config&gt;&nbsp;&nbsp;&nbsp; &lt;use-persistent-store="true"/&gt;&nbsp; &lt;/session-config&gt;&nbsp;&nbsp; &lt;/web-app&gt;&nbsp; &lt;/host&gt;&lt;/server&gt;&lt;/resin&gt; <br />
&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;<br />
&nbsp;<br />
5. 关于作者 <br />
OldJavaMan，长期致力于Java相关领域的技术工作， 主要参与J2EE相关程序的设计， 目前在南京的一家软件企业就职，他希望和广大的Java爱好者结交朋友。大家可以通过 mail 联系他 。</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/oldjavaman/archive/2009/07/10/4338315.aspx</p>
<img src ="http://www.blogjava.net/jelver/aggbug/289502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2009-08-02 21:50 <a href="http://www.blogjava.net/jelver/articles/289502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Resin集群及双机备份方案【转】</title><link>http://www.blogjava.net/jelver/articles/285406.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Fri, 03 Jul 2009 12:15:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/285406.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/285406.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/285406.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/285406.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/285406.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em">Resin集群及双机备份方案（resin集群＋冷备）</p>
<p style="text-indent: 2em">作者：darkblue</p>
<p style="text-indent: 2em">有两台服务器</p>
<p style="text-indent: 2em">主机名：web-srv</p>
<p style="text-indent: 2em">内网IP：10.199.55.1</p>
<p style="text-indent: 2em">外网IP：121.183.173.225</p>
<p style="text-indent: 2em">域名：web.xxxx.com</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">主机名：wap-srv</p>
<p style="text-indent: 2em">内网IP：10.199.55.3</p>
<p style="text-indent: 2em">外网IP：121.183.173.226</p>
<p style="text-indent: 2em">域名：wap.xxxx.com</p>
<p style="text-indent: 2em">防火墙：PIX525，服务器OS:RedHat ES4U2</p>
<p style="text-indent: 2em">需求：</p>
<p style="text-indent: 2em">web-srv和wap-srv均使用apache2+resin3.1.2提供http服务，监听端口都是80。</p>
<p style="text-indent: 2em">1、当两台主机都正常运作的时候，通过resin来实现负载均衡，web-srv的80端口提供web服务，wap-srv的80端口提供wap服务；</p>
<p style="text-indent: 2em">2、当web-srv宕机后，手工启用wap-srv上面的另一个apache进程，监听8080端口，提供web服务，这个时候两个公网IP同时指向一个私网IP10.199.55.3，结果是：80端口提供的是wap服务，8080端口提供的是web服务；</p>
<p style="text-indent: 2em">3、当wap-srv宕机后，手工启用web-srv上面的另一个apache进程，监听8080端口，提供wap服务，这个时候两个公网IP同时指向一个私网IP10.199.55.1，结果是：80端口提供的是web服务，8080端口提供的是wap服务；</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">配置：</p>
<p style="text-indent: 2em">一、DNS</p>
<p style="text-indent: 2em">增加两条纪录，分别是121.183.173.225 &lt;---&gt; web.xxxx.com，121.183.173.226 &lt;---&gt; wap.xxxx.com。</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">二、web-srv</p>
<p style="text-indent: 2em">2.1 安装apache2、resin-3.1.0</p>
<p style="text-indent: 2em">安装apache2略</p>
<p style="text-indent: 2em">安装resin-3.1.0</p>
<p style="text-indent: 2em">Wget &#8220;http://www.caucho.com/download/resin-3.1.0.tar.gz&#8221;</p>
<p style="text-indent: 2em">Cp resin-3.1.0.tar.gz /usr/local/</p>
<p style="text-indent: 2em">Tar &#8211;xzvf resin-3.1.0.tar.gz</p>
<p style="text-indent: 2em">cd resin-3.1.0</p>
<p style="text-indent: 2em">./ configure --with-apache=/usr/local/apache2</p>
<p style="text-indent: 2em">Make</p>
<p style="text-indent: 2em">Make install</p>
<p style="text-indent: 2em">2.2 准备配置文件和目录</p>
<p style="text-indent: 2em">copy /usr/local/apache2/conf/httpd.conf httpdweb.conf</p>
<p style="text-indent: 2em">copy /usr/local/apache2/conf/httpd.conf httpdwap.conf</p>
<p style="text-indent: 2em">mkdir /usr/local/apache2/htdocs/web</p>
<p style="text-indent: 2em">mkdir /usr/local/apache2/htdocs/wap</p>
<p style="text-indent: 2em">cp -r /usr/local/resin-3.1.0 /usr/local/resin-web</p>
<p style="text-indent: 2em">cp -r /usr/local/resin-3.1.0 /usr/local/resin-wap</p>
<p style="text-indent: 2em">2.3 修改httpdweb.conf的监听端口(80)和web的路径</p>
<p style="text-indent: 2em">file: /usr/local/apache2/conf/httpdweb.conf</p>
<p style="text-indent: 2em">ResinConfigServer 10.199.55.3 6802</p>
<p style="text-indent: 2em">ResinConfigServer 10.199.55.1 6802</p>
<p style="text-indent: 2em">CauchoConfigCacheDirectory /tmp</p>
<p style="text-indent: 2em">CauchoStatus yes</p>
<p style="text-indent: 2em">2.4 修改httpdwap.conf的监听端口(8080)和wap的路径</p>
<p style="text-indent: 2em">file: /usr/local/apache2/conf/httpdweb.conf</p>
<p style="text-indent: 2em">ResinConfigServer 10.199.55.3 6803</p>
<p style="text-indent: 2em">ResinConfigServer 10.199.55.1 6803</p>
<p style="text-indent: 2em">CauchoConfigCacheDirectory /tmp</p>
<p style="text-indent: 2em">CauchoStatus yes</p>
<p style="text-indent: 2em">2.5 修改resin3.1.2的集群和相关的java配置</p>
<p style="text-indent: 2em">file: /usr/local/resin-web/conf/resin.conf</p>
<p style="text-indent: 2em">&lt;cluster&gt; </p>
<p style="text-indent: 2em">&nbsp; &lt;server id="10.199.55.1" address="10.199.55.1" port="6802"&gt;</p>
<p style="text-indent: 2em">&nbsp;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;</p>
<p style="text-indent: 2em">&lt;/cluster&gt;</p>
<p style="text-indent: 2em">file: /usr/local/resin-wap/conf/resin.conf</p>
<p style="text-indent: 2em">&lt;cluster&gt; </p>
<p style="text-indent: 2em">&nbsp; &lt;server id="10.199.55.1" address="10.199.55.1" port="6803"&gt;</p>
<p style="text-indent: 2em">&nbsp;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;</p>
<p style="text-indent: 2em">&lt;/cluster&gt;</p>
<p style="text-indent: 2em">2.6 启动apache和resin</p>
<p style="text-indent: 2em">apache2</p>
<p style="text-indent: 2em">/usr/local/apache2/bin/httpd -f ./conf/httpdweb.conf</p>
<p style="text-indent: 2em">/usr/local/apache2/bin/httpd -f ./conf/httpdwap.conf</p>
<p style="text-indent: 2em">resin</p>
<p style="text-indent: 2em">/usr/local/resin-web/bin/httpd.sh -server 10.199.55.1 start</p>
<p style="text-indent: 2em">/usr/local/resin-wap/bin/httpd.sh -server 10.199.55.1 start</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">三、wap-srv</p>
<p style="text-indent: 2em">3.1 安装apache2、resin-3.1.0</p>
<p style="text-indent: 2em">安装apache2略</p>
<p style="text-indent: 2em">安装resin-3.1.0</p>
<p style="text-indent: 2em">Wget &#8220;http://www.caucho.com/download/resin-3.1.0.tar.gz&#8221;</p>
<p style="text-indent: 2em">Cp resin-3.1.0.tar.gz /usr/local/</p>
<p style="text-indent: 2em">Tar &#8211;xzvf resin-3.1.0.tar.gz</p>
<p style="text-indent: 2em">cd resin-3.1.0</p>
<p style="text-indent: 2em">./ configure --with-apache=/usr/local/apache2</p>
<p style="text-indent: 2em">Make</p>
<p style="text-indent: 2em">Make install</p>
<p style="text-indent: 2em">3.2 准备配置文件和目录</p>
<p style="text-indent: 2em">copy /usr/local/apache2/conf/httpd.conf httpdweb.conf</p>
<p style="text-indent: 2em">copy /usr/local/apache2/conf/httpd.conf httpdwap.conf</p>
<p style="text-indent: 2em">mkdir /usr/local/apache2/htdocs/web</p>
<p style="text-indent: 2em">mkdir /usr/local/apache2/htdocs/wap</p>
<p style="text-indent: 2em">cp -r /usr/local/resin-3.1.0 /usr/local/resin-web</p>
<p style="text-indent: 2em">cp -r /usr/local/resin-3.1.0 /usr/local/resin-wap</p>
<p style="text-indent: 2em">3.3 修改httpdweb.conf的监听端口(8080)和web的路径</p>
<p style="text-indent: 2em">file: /usr/local/apache2/conf/httpdweb.conf</p>
<p style="text-indent: 2em">端口和目录略</p>
<p style="text-indent: 2em">ResinConfigServer 10.199.55.3 6802</p>
<p style="text-indent: 2em">ResinConfigServer 10.199.55.1 6802</p>
<p style="text-indent: 2em">CauchoConfigCacheDirectory /tmp</p>
<p style="text-indent: 2em">CauchoStatus yes</p>
<p style="text-indent: 2em">3.4 修改httpdwap.conf的监听端口(80)和wap的路径</p>
<p style="text-indent: 2em">file: /usr/local/apache2/conf/httpdweb.conf</p>
<p style="text-indent: 2em">端口和目录略</p>
<p style="text-indent: 2em">ResinConfigServer 10.199.55.3 6803</p>
<p style="text-indent: 2em">ResinConfigServer 10.199.55.1 6803</p>
<p style="text-indent: 2em">CauchoConfigCacheDirectory /tmp</p>
<p style="text-indent: 2em">CauchoStatus yes</p>
<p style="text-indent: 2em">3.5 修改resin3.1.2的集群和相关的java配置</p>
<p style="text-indent: 2em">file: /usr/local/resin-web/conf/resin.conf</p>
<p style="text-indent: 2em">&lt;cluster&gt; </p>
<p style="text-indent: 2em">&nbsp; &lt;server id="10.199.55.3" address="10.199.55.3" port="6802"&gt;</p>
<p style="text-indent: 2em">&nbsp;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;</p>
<p style="text-indent: 2em">&lt;/cluster&gt;</p>
<p style="text-indent: 2em">file: /usr/local/resin-wap/conf/resin.conf</p>
<p style="text-indent: 2em">&lt;cluster&gt; </p>
<p style="text-indent: 2em">&nbsp; &lt;server id="10.199.55.3" address="10.199.55.3" port="6803"&gt;</p>
<p style="text-indent: 2em">&nbsp;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;</p>
<p style="text-indent: 2em">&lt;/cluster&gt;</p>
<p style="text-indent: 2em">3.6 启动apache和resin</p>
<p style="text-indent: 2em">apache2</p>
<p style="text-indent: 2em">/usr/local/apache2/bin/httpd -f ./conf/httpdweb.conf</p>
<p style="text-indent: 2em">/usr/local/apache2/bin/httpd -f ./conf/httpdwap.conf</p>
<p style="text-indent: 2em">resin</p>
<p style="text-indent: 2em">/usr/local/resin-web/bin/httpd.sh -server 10.199.55.3 start</p>
<p style="text-indent: 2em">/usr/local/resin-wap/bin/httpd.sh -server 10.199.55.3 start</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">四、防火墙的配置</p>
<p style="text-indent: 2em">因为web-srv和wap-srv只提供www服务，所以只需要对这两个内外网的IP地址对做端口映射。</p>
<p style="text-indent: 2em">static (dmz,outside) tcp 121.183.173.225 www 10.199.55.1 www netmask 255.255.255.255</p>
<p style="text-indent: 2em">static (dmz,outside) tcp 121.183.173.226 www 10.199.55.3 www netmask 255.255.255.255</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">五、冷备的实现 </p>
<p style="text-indent: 2em">5.1 当web-srv宕机后：</p>
<p style="text-indent: 2em">5.1.1 修改防火墙配置</p>
<p style="text-indent: 2em">no static (dmz,outside) tcp 121.183.173.225 www 10.199.55.1 www netmask 255.255.255.255</p>
<p style="text-indent: 2em">static (dmz,outside) tcp 121.183.173.225 www 10.199.55.3 8080 netmask 255.255.255.255</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">5.1.2 启动wap-srv的第二个apache进程，监听8080端口，提供web服务</p>
<p style="text-indent: 2em">/usr/local/apache2/bin/httpd -f ./conf/httpdweb.conf</p>
<p style="text-indent: 2em">用户访问<a href="http://web.xxxx.com/"><font color="#000000">http://web.xxxx.com</font></a>将指向10.199.55.3:8080</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">5.2 当wap-srv宕机后：</p>
<p style="text-indent: 2em">&nbsp;</p>
<p style="text-indent: 2em">5.2.1 修改防火墙配置</p>
<p style="text-indent: 2em">no static (dmz,outside) tcp 121.183.173.226 www 10.199.55.3 www netmask 255.255.255.255</p>
<p style="text-indent: 2em">static (dmz,outside) tcp 121.183.173.226 www 10.199.55.1 8080 netmask 255.255.255.255</p>
<p style="text-indent: 2em">5.2.2&nbsp;启动web-srv的第二个apache进程，监听8080端口，提供wap服务</p>
<p style="text-indent: 2em">/usr/local/apache2/bin/httpd -f ./conf/httpdwap.conf</p>
<p style="text-indent: 2em">用户访问<a href="http://wap.xxxx.com/"><font color="#000000">http://wap.xxxx.com</font></a>将指向10.199.55.1:8080</p>
<img src ="http://www.blogjava.net/jelver/aggbug/285406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2009-07-03 20:15 <a href="http://www.blogjava.net/jelver/articles/285406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache2与resin 3.1.6 在linux下的整合与负载均衡【转】</title><link>http://www.blogjava.net/jelver/articles/285358.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Fri, 03 Jul 2009 07:37:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/285358.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/285358.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/285358.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/285358.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/285358.html</trackback:ping><description><![CDATA[<div id="art" style="margin: 15px">&lt;1&gt; 安装apache <br />
<br />
./configure --prefix=/opt/apache2 --enable-so&nbsp; --enable-dav --enable-dav-fs --enable-mods-shared=most &nbsp;<br />
make <br />
make install<br />
安装resin :<br />
./configure --prefix=/opt/resin3.1.6 --with-apxs=/opt/apache2/bin/apxs&nbsp; --with-apache=/opt/apache2<br />
make <br />
make install<br />
上述操作编译安装完后，会自动修改apache，包括：<br />
1. copy mod_caucho.so到apache目录（就是前面指定的--with-apache=/data/aoxj/artest/apache）的modules<br />
2. 修改apache的配置文件conf/httpd.conf，自动增加以下内容<br />
LoadModule caucho_module ***/modules/mod_caucho.so<br />
ResinConfigServer localhost 6800<br />
CauchoConfigCacheDirectory /tmp<br />
CauchoStatus yes <br />
如果没有自动修改，请自己手动添加，或者检查，是否配置正确。<br />
<br />
1）linux下使用resin的单服务器配置<br />
<br />
使用单服务器方案，只要安装完毕，配置一下Resin的resin.conf文件和app_default.xml文件就可以了，resin.conf文件中需要配置两处，<br />
一是端口号，另一处是Web程序存放目录，app_default.xml内可配置默认首页的搜索顺序。<br />
由于原网站使用多个端口配置，所以单服务器只能用于做单个站点的测试使用。<br />
配置如下：<br />
修改resin/conf/resin.conf <br />
&nbsp;&lt;server id="a" address="192.168.1.116" port="6800"/&gt;<br />
启动 /opt/resin/bin/httpd -server a start<br />
如果使用如下命令默认启动,<br />
/opt/resin/bin/httpd start<br />
必须如下配置.默认 是id 为空<br />
&lt;server id="" address="192.168.1.116" port="6800"/&gt;<br />
启动 /opt/apache2/bin/apachectl start<br />
访问 http://localost/caucho-status 看是否成功.<br />
==========================================================================================================<br />
2）linux下使用resin的多服务器配置<br />
<br />
&nbsp;有时候需要运行多个服务器以在同一个ＩＰ上监听多个端口，这时候就需要使用单独的Resin服务器运行多个实例，以监听多个端口来部署多个Web站点。<br />
这种方法为多次使用httpd.sh的参数指定配置文件和运行时的pid文件，实现多个实例的运行。<br />
使用的命令行如下所示：<br />
$RESIN_HOME/bin/httpd.sh -conf conf/resin2.conf -server b start/stop<br />
解释：<br />
&nbsp;-conf 选项为选择此服务器实例所用的配置文件，在这个文件里面配置不同的端口和主目录。<br />
具体配置如下:<br />
配置一:<br />
copy 一份resin.conf，命名为resin2.conf,找到&nbsp;&nbsp; &lt;http address="*" port="8080"/&gt;<br />
将其注释掉。修改为： &lt;!--http address="*" port="8080"/--&gt;.<br />
添加&lt;server id="b" address="192.168.1.166" port="6801"/&gt;。<br />
修改apache配置文件 ：<br />
LoadModule caucho_module modules/mod_caucho.so<br />
ResinConfigServer 192.168.1.166 6800<br />
ResinConfigServer 192.168.1.166 6801<br />
CauchoConfigCacheDirectory /tmp<br />
CauchoStatus yes<br />
然后用如下命令启动：<br />
/opt/resin3.1.6/bin/httpd.sh -conf /opt/resin3.1.6/conf/resin2.conf -server b start<br />
访问 http://localost/caucho-status 看是否成功.<br />
<br />
配置二:<br />
copy 一份resin.conf，命名为resin3.conf,找到&nbsp;&nbsp; &lt;http address="*" port="8080"/&gt;<br />
将其注释掉。修改为： &lt;!--http address="*" port="8080"/--&gt;.<br />
添加 <br />
&lt;server id='b' address='192.168.1.166' port='6802' watchdog-port="6602"&gt;<br />
&nbsp; &lt;http port="8081"/&gt;<br />
&lt;/server&gt;<br />
这样配置，即启动了两套resin服务。优点是比较安全。缺点是 比较浪费系统资源。<br />
修改apache配置文件 ：<br />
LoadModule caucho_module modules/mod_caucho.so<br />
ResinConfigServer 192.168.1.166 6800<br />
ResinConfigServer 192.168.1.166 6802<br />
CauchoConfigCacheDirectory /tmp<br />
CauchoStatus yes<br />
然后用如下命令启动：<br />
/opt/resin3.1.6/bin/httpd.sh -conf /opt/resin3.1.6/conf/resin3.conf -server b start<br />
访问 http://localost/caucho-status 看是否成功.<br />
如果访问不了。接着添加如下配置到httpd.conf中。<br />
&lt;Location /caucho-status&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetHandler caucho-status<br />
&lt;/Location&gt;<br />
============================================================================================================<br />
&lt;2&gt; apache,resin与虚拟主机<br />
上面只是配好apache与resin的整合，其它很多企业应用中还涉及到配置apache与resin的虚拟主机的配置，<br />
接着来说说如何利用apache与resin配置虚拟主机了，注意以下介绍的都是基于一个IP多个域名的虚拟主机的配法：<br />
配置apache2:<br />
NameVirtualHost *:80<br />
&lt;VirtualHost *:80&gt;<br />
&nbsp;&nbsp;&nbsp; DocumentRoot "/www/test1"<br />
&nbsp;&nbsp;&nbsp; ServerName www.test1.com<br />
&nbsp;&nbsp;&nbsp; ServerAlias www.test1.com<br />
&nbsp;&nbsp;&nbsp; ErrorLog "logs/test1_err.log"<br />
&nbsp;&nbsp;&nbsp; CustomLog "logs/test1_access.log" common<br />
&nbsp;&nbsp;&nbsp; ResinConfigServer 192.168.1.166 6800<br />
&lt;/VirtualHost&gt;<br />
&lt;VirtualHost *:80&gt;<br />
&nbsp;&nbsp;&nbsp; DocumentRoot "/www/test2"<br />
&nbsp;&nbsp;&nbsp; ServerName www.test2.com<br />
&nbsp;&nbsp;&nbsp; ServerAlias www.test2.com<br />
&nbsp;&nbsp;&nbsp; ErrorLog "logs/test2_error.log"<br />
&nbsp;&nbsp;&nbsp; CustomLog "logs/test2_access.log" common<br />
&nbsp;&nbsp;&nbsp; ResinConfigServer 192.168.1.166 6801<br />
&lt;/VirtualHost&gt;<br />
修改apache 配置文件如下：<br />
<br />
LoadModule caucho_module modules/mod_caucho.so<br />
ResinConfigServer 192.168.1.166 6800<br />
ResinConfigServer 192.168.1.166 6801<br />
CauchoConfigCacheDirectory /tmp<br />
CauchoStatus yes<br />
&lt;Location /caucho-status&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetHandler caucho-status<br />
&lt;/Location&gt;<br />
也可以将 第二行和第三行注释掉。<br />
<br />
添加目录访问权限：<br />
&lt;Directory "/www"&gt;<br />
&nbsp;&nbsp;&nbsp; Options Indexes FollowSymLinks<br />
&nbsp;&nbsp;&nbsp; Order allow,deny<br />
&nbsp;&nbsp;&nbsp; Allow from all<br />
&lt;/Directory&gt;<br />
配置resin.conf ,添加如下：<br />
&lt;host id="www.test1.com" root-directory="."&gt; &nbsp;<br />
&nbsp;&nbsp; &nbsp;&lt;host-alias&gt;www.test1.com&lt;/host-alias&gt; &nbsp;<br />
&nbsp;&nbsp; &nbsp;&lt;web-app id="/" root-directory="/www/test1/"&gt;&lt;/web-app&gt; &nbsp;<br />
&lt;/host&gt; <br />
配置resin2.conf 添加如下内容：<br />
&lt;host id="www.tet2.com" root-directory="."&gt; &nbsp;<br />
&nbsp;&nbsp; &nbsp;&lt;host-alias&gt;www.test2.com&lt;/host-alias&gt; &nbsp;<br />
&nbsp;&nbsp; &nbsp;&lt;web-app id="/" root-directory="/www/test2/"&gt;&lt;/web-app&gt; &nbsp;<br />
&lt;/host&gt; <br />
注意，&lt;host-alias&gt;一定要和apache中的ServerAlias相对应。 <br />
分别启动resin：<br />
/opt/resin3.1.6/bin/httpd.sh -server a start<br />
/opt/resin3.1.6/bin/httpd.sh -conf /opt/resin3.1.6/conf/resin2.conf -server b start<br />
分别在/www/test1和 /www/test2/目录下建立test1.jsp 和test2.jsp测试，是否成功。如果访问成功。<br />
说明配置成功。<br />
<br />
以上是不同主机用不同的JVM，如果你只有一个虚拟host的话<br />
可以在Apache的httpd.conf中这么这样设置<br />
&lt;Location /applicationA/*&gt;<br />
ResinConfigServer 192.168.1.166 6800<br />
&lt;/Location&gt;<br />
&lt;Location /applicationB/*&gt;<br />
ResinConfigServer 192.168.1.166 6801<br />
&lt;/Location&gt;<br />
不同的模块，使用不同的jvm </div>
<img src ="http://www.blogjava.net/jelver/aggbug/285358.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2009-07-03 15:37 <a href="http://www.blogjava.net/jelver/articles/285358.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用apache+resin实现负载均衡设置【转载】</title><link>http://www.blogjava.net/jelver/articles/285351.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Fri, 03 Jul 2009 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/285351.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/285351.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/285351.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/285351.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/285351.html</trackback:ping><description><![CDATA[<p>原文：<a href="http://liujintao.blog.51cto.com/413051/86242">http://liujintao.blog.51cto.com/413051/86242</a><br />
上周六参加了51CTO的负载均衡的技术沙龙,主要是基于LVS的负载均衡,受益匪浅,开阔了思路,回去要好好研究一下.<br />
&nbsp;&nbsp;&nbsp;&nbsp; 其实使用web服务器自身的设置也能达到负载均衡的目的,我们公司使用的web服务器是resin,resin自生就可以进行负载均衡设置,但是只有professional版本才支持,这个东西的license一个CPU要$500,所以实际使用的apache+resin的组合(免费嘛:)),由于公司的系统只有运营商和CP会登录访问,并发压力并不大,使用负载均衡主要是为了防止系统死掉后无法登录，所以这样的设计基本够用了。如果并发访问量很大的话,就应该考虑在apache前面加squid做cache、通过dns轮寻等方案了。 </p>
<div>&nbsp;&nbsp;&nbsp; 虽然网上也有<font size="2">apache+resin进行负载均衡设置的例子,但是由于apach和resin不同版本的配置的配置文件有一定的差距,按照网上的资料不一定能设置成功,下面的例子是在linux环境下使用httpd-2.0.59和Resin-3.1.6进行负载均衡设置的,如果使用其他版本请参考apache和resin官方网站的配置说明</font></div>
<div><font size="2">&nbsp;&nbsp;&nbsp; 需要准备3台linux机器(如果是在没有,可以先用一台机器熟悉一下),每台机器都要安装apache和resin(其实1台装apach,另外2台装resin就够用了,,之所以要全装是为了以后的扩展考虑),其中一台作为前端服务器(apache),另外2台作为后台服务器(resin)</font></div>
<div><font size="2"></font>&nbsp;</div>
<h4>1 演示环境</h4>
<div>192.168.11.5:<font size="2">前端服务器</font></div>
<div><font size="2">192.168.11.111:后台服务器</font></div>
<div><font size="2">192.168.11.11:后台服务器</font></div>
<div><font size="2"></font>&nbsp;</div>
<h3>2 安装Apache</h3>
<div><br />
到Apache的官方网站 <a href="http://www.apache.org/">[url]http://www.Apache.org[/url]</a>可以下载。<br />
演示时使用的是httpd-2.0.59版本<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">[root@yf3 liujt]# tar &#8211;xzvf httpd-2.0.59.tar.gz&nbsp;&nbsp;&nbsp;&nbsp; //解压缩安装文件 <br />
[root@yf3 liujt]# cd httpd-2.0.59&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //进入解压缩的文件 <br />
[root@yf3 httpd-2.0.59] # ./configure --prefix /usr/local/Apache2 -&#8211;enable-rewrite=shared --enable-speling=shared <br />
[root@yf3 httpd-2.0.59] # make <br />
[root@yf3 httpd-2.0.59] # make install </div>
</div>
<div><br />
完成以上操作后,进入/usr/local/Apache2,发现Apache已经安装完成.</div>
<h4><br />
3 安装Resin</h4>
<div><br />
到Resin的官方网站可以下载<br />
演示时使用的是Resin-3.1.6版本<br />
和普通安装Resin的方式有一点区别，Resin要联合Apache安装,也就是使用参数--with-Apache=/usr/local/Apache2<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">[root@yf3 liujt]# tar &#8211;xzvf Resin-3.1.6.tar.gz&nbsp;&nbsp;&nbsp;&nbsp; //解压缩安装文件 <br />
[root@yf3 liujt]# cd Resin-3.1.6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//进入解压缩的文件 <br />
[root@yf3 Resin-3.1.6] # ./configure --prefix=/usr/local/Resin --withapxs=/usr/local/ <br />
Apache2/bin/apxs&nbsp;&nbsp;<br />
[root@yf3 Resin-3.1.6] # make <br />
[root@yf3 Resin-3.1.6] # make install</div>
</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<h4>3 &nbsp;配置Resin</h4>
<div><br />
需要修改2台后服务器的Resin的配置文件Resin.conf，路径/usr/local/Resin/conf/Resin.conf,如果有多个Resin,均按此方式配置<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">[root@yf3 Resin-3.1.6] # vi /usr/local/Resin/conf/Resin.conf</div>
</div>
<h5><br />
3.1&nbsp;配置默认的负责均衡</h5>
<div><br />
找到配置文件中的&lt;!-- define the servers in the cluster --&gt;,修改负载均衡配置,需要设置服务的ID、IP和port，例如192.168.11.11的设置如下<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">&lt;server id="a" address="127.0.0.1" port="6805"/&gt;</div>
</div>
<div><br />
如果同一个项目要启动多个服务,可以配置多项,但是要使用不同的id名称和port,例如:<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">&lt;server id="a" address="127.0.0.1" port="6805"/&gt; <br />
&lt;server id="b" address="127.0.0.1" port="6806/&gt;</div>
</div>
<div>&nbsp;</div>
<div>如果要在同一个resin中部署多个项目,可以设置不同的配置文件,指向不同的虚拟目录来实现,启动resin时启动不同的配置文件即可.</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<h4><br />
4 配置Apache</h4>
<div><br />
需要对前端程序(192.168.11.5)的apach的配置文件httpd.conf进行修改，路径:/usr/local/Apache2/conf/httpd.conf</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">[root@yf3 Resin-3.1.6] # vi /usr/local/Apache2/conf/httpd.conf</div>
</div>
<div>&nbsp;</div>
<h5>4.1 修改监听接口</h5>
<div><br />
找到配置文件中的Listen 80，此端口是在web页面访问时使用的端口,例如安装apache的服务器IP是192.168.11.5,如果web的需要将web访问地址设为<a href="http://192.168.11.5:8080/">[url]http://192.168.11.5:8080[/url]</a>,需要如下配置</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">Listen 8080</div>
</div>
<div>&nbsp;</div>
<h5>4.2 修改DocumentRoot</h5>
<div><br />
找到配置文件中的DocumentRoot配置<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">DocumentRoot "/usr/local/Apache2/htdocs"</div>
</div>
<div><br />
修改为实际需要的路径,例如改为实际的发布路径为/usr/local/Apache2/htdocs/test，就需要改成以下形式<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">DocumentRoot "/usr/local/Apache2/htdocs/test"</div>
</div>
<h5><br />
4.3 Directory</h5>
<div><br />
找到配置文件中的Directory配置<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">&lt;Directory "/usr/local/Apache2/htdocs"&gt;</div>
</div>
<div><br />
修改为实际需要的路径,例如改为实际的发布路径为/usr/local/Apache2/htdocs/test，就需要改成以下形式<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">&lt;Directory "/usr/local/Apache2/htdocs/test"&gt;; <br />
</div>
</div>
<h5><br />
4.4 修改DirectoryIndex</h5>
<div><br />
找到配置文件中的DirectoryIndex配置<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">DirectoryIndex index.html index.html.var</div>
</div>
<div><br />
增加index.jsp。修改为：<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">DirectoryIndex index.jsp index.html index.html.var</div>
</div>
<h5><br />
4.5 &nbsp;修改Rensin相关配置</h5>
<div><br />
在apache的配置文件httpd.conf最后增加以下内容<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">LoadModule caucho_module /usr/local/Apache2/modules/mod_caucho.so <br />
ResinConfigServer&nbsp;192.168.11.11 6805<br />
ResinConfigServer&nbsp;192.168.11.111 6806 <br />
CauchoConfigCacheDirectory /tmp <br />
CauchoStatus yes</div>
</div>
<div><br />
其中ResinConfigServer配置的是调用的Resin的设置的负载均衡器的IP地址和端口号<br />
11.5的apach分别调用了11.11和11.111的两个Resin<br />
11.11的Resin的负载生成器的配置为<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">&lt;server id="a" address="192.168.11.11" port="6805"/&gt;</div>
</div>
<div><br />
11.111的Resin的负载生成器的配置为<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">&lt;server id="a" address="192.168.11.111" port="6806"/&gt;</div>
</div>
<h4><br />
5 访问测试</h4>
<h5><br />
5.1. 编写测试页面</h5>
<div><br />
为了检查负载均衡是否生效,需要编写测试页面a.jsp,通过在web页面和各Resin的日志中显示的内容进行辨别,下面11.11的其中一个Resin为例说明<br />
</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">&lt;%System.out.println("server 192.168.11.11");%&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//在Resin日志中显示 <br />
server 192.168.11.11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//在web页面显示</div>
</div>
<div><br />
其他Resin的a.jsp参照上面的例子,只需要将其中的内容替换掉,例如11.111的a.jsp文件可以写成</div>
<div>
<div style="border-right: #cccccc 1px solid; padding-right: 4px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 10pt; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; color: #000000; word-break: break-all; line-height: 16px; padding-top: 4px; border-bottom: #cccccc 1px solid; font-family: verdana,宋体; background-color: #eeeeee">&lt;%System.out.println("server 192.168.11.111");%&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//在Resin日志中显示 <br />
server 192.168.11.111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//在web页面显示</div>
</div>
<h5><br />
5.2 发布项目</h5>
<div><br />
<strong>1.&nbsp;Apche项目发布</strong><br />
将a.jsp文件放到设置的apche的虚拟目录中,演示的设置的虚拟目录是<br />
DocumentRoot "/usr/local/Apache2/test"<br />
因此需要将a.jsp放到/usr/local/Apache2/test目录下<br />
<strong>2.&nbsp;Resin项目发布</strong><br />
分别将来两个a.jsp文件放到192.168.11.11和192.168.11.111设置的Resin的虚拟目录中,如果某Resin的虚拟目录是<br />
&lt;web-app id="/" root-directory="webapps/ROOT"/&gt;<br />
则需要将a.jsp放到Resin的webapps/ROOT目录下</div>
<h5><br />
5.3. 启动服务</h5>
<div><br />
<strong>1.&nbsp;启动Apache</strong><br />
[root@yf3 httpd-2.0.59] # /usr/local/Apache2/bin/httpd -f ./conf/httpd.conf<br />
<strong>2.&nbsp;分别启动调用的Resin</strong></div>
<p><strong></strong></p>
<div><br />
例如启动11.11的Resin-3.1.6中id为"a"的服务,需要在11.11服务器执行如下命令<br />
[root@ yf3 Resin-3.1.6] # / usr/local/Resin-web/bin/httpd.sh -server a start<br />
启动11.111的Resin-3.1.6中id为"a"的服务,需要在11.111服务器执行如下命令<br />
[root@ localhost Resin-3.1.6] # / usr/local/Resin-web/bin/httpd.sh -server&nbsp;a start</div>
<h5><br />
5.4. 验证a.jsp</h5>
<div><br />
使用IE多次访问web发布页面,通过页面显示的内容和Resin日志打印的内容,检查是否随机调用各Resin的a.jsp文件。<br />
Web页面的访问地址如下<br />
<a href="http://192.168.11.5:8080/a.jsp">[url]http://192.168.11.5:8080/a.jsp[/url]</a><br />
查看rensin的方法如下，如果要看查看11.111的Resin-3.1.6中id为"a"服务的日志，需要在11.111服务器执行如下命令<br />
[root@ localhost Resin-3.1.6] # tail &#8211;f / usr/local/Resin-3.16 /log/a.log</div>
<div>多次访问<a href="http://192.168.11.5:8080/a.jsp">[url]http://192.168.11.5:8080/a.jsp[/url]</a>,如果每次会随机显示其中一个Resin的a.jsp文件的内容,之后关闭其中个几个Resin（不是全部关闭），<a href="http://192.168.11.5:8080/a.jsp">[url]http://192.168.11.5:8080/a.jsp[/url]</a>仍能正常访问，至此就完成了负载均衡的测试。证明配置成功。之后就可以正是发布项目了</div>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/jelver/aggbug/285351.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2009-07-03 14:48 <a href="http://www.blogjava.net/jelver/articles/285351.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Resin 3.1 配置文件详细说明</title><link>http://www.blogjava.net/jelver/articles/183638.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Tue, 04 Mar 2008 03:10:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/183638.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/183638.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/183638.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/183638.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/183638.html</trackback:ping><description><![CDATA[&lt;!--&nbsp; Resin 3.1 配置文件. --&gt;&nbsp;&nbsp; <br />
&lt;resin xmlns="http://caucho.com/ns/resin" xmlns:resin="http://caucho.com/ns/resin/core"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;!-- 加载resin/lib下的所有.jar文件--&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;class-loader&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;tree-loader path="${resin.home}/lib"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;tree-loader path="${resin.root}/lib"/&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/class-loader&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;!--&nbsp; 管理配置 --&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;management path="${resin.root}/admin"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/management&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;!--&nbsp;&nbsp; JDK日志接口的配置.&nbsp;&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;log name="" path="stdout:" timestamp="[%H:%M:%S.%s] "/&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;!-- 日志信息的级别：'info' 生产环境&nbsp; 'fine' 开发环境 'finer' 调试环境 --&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;logger name="com.caucho" level="info"/&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;logger name="com.caucho.java" level="config"/&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;logger name="com.caucho.loader" level="config"/&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;!--&nbsp; 环境上下文的检测时间，对于生产站点, 这个要设置长一点，例如600秒，10分钟&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;dependency-check-interval&gt;2s&lt;/dependency-check-interval&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;!--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 发送邮件通知的SMTP服务器&nbsp;&nbsp;&nbsp;&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;system-property mail.smtp.host="127.0.0.1"/&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;system-property mail.smtp.port="25"/&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;!--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 你可以把编译器改成 "javac", "eclipse" 或者 "internal".&nbsp;&nbsp;&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;javac compiler="internal" args="-source 1.5"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp; &lt;!-- Security providers. --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;security-provider&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; com.sun.net.ssl.internal.ssl.Provider&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/security-provider&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp; &lt;!-- 去掉注释，如果你使用resin提供的xml应用 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;system-property javax.xml.parsers.DocumentBuilderFactory&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ="com.caucho.xml.parsers.XmlDocumentBuilderFactory"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;system-property javax.xml.parsers.SAXParserFactory&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ="com.caucho.xml.parsers.XmlSAXParserFactory"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &lt;cluster id="app-tier"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;!-- 设置集群上下文的根, 相对于server.root --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;root-directory&gt;.&lt;/root-directory&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;server-default&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- HTTP服务的端口--&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;http address="*" port="8080"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- SSL端口配置: --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;http address="*" port="8443"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;openssl&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;certificate-file&gt;keys/gryffindor.crt&lt;/certificate-file&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;certificate-key-file&gt;keys/gryffindor.key&lt;/certificate-key-file&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;password&gt;test123&lt;/password&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/openssl&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/http&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JVM参数设置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jvm-arg&gt;-Xmx256m&lt;/jvm-arg&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jvm-arg&gt;-Xss1m&lt;/jvm-arg&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jvm-arg&gt;-Xdebug&lt;/jvm-arg&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jvm-arg&gt;-Dcom.sun.management.jmxremote&lt;/jvm-arg&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Uncomment to enable admin heap dumps 去掉这个如果你想管理内存堆的倾倒 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jvm-arg&gt;-agentlib:resin&lt;/jvm-arg&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;watchdog-arg&gt;-Dcom.sun.management.jmxremote&lt;/watchdog-arg&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--&nbsp;&nbsp; 强制resin强制重起时的最小空闲内存&nbsp;&nbsp;&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;memory-free-min&gt;1M&lt;/memory-free-min&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 最大线程数量. --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;thread-max&gt;256&lt;/thread-max&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--&nbsp; 套接字等待时间 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;socket-timeout&gt;65s&lt;/socket-timeout&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 配置 keepalive --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;keepalive-max&gt;128&lt;/keepalive-max&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;keepalive-timeout&gt;15s&lt;/keepalive-timeout&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果使用的是UNIX,这里是启动的帐号和用户组. --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;user-name&gt;resin&lt;/user-name&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;group-name&gt;resin&lt;/group-name&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/server-default&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;!-- 定义群集服务器 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;server id="" address="127.0.0.1" port="6800"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;!--&nbsp;&nbsp;&nbsp; Configures the persistent store for single-server or clustered <br />
配置独立服务器或者群集的持久化存储，专业版的功能&nbsp;&nbsp;&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;resin:if test="${resin.isProfessional()}"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;persistent-store type="cluster"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init path="session"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/persistent-store&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/resin:if&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;!--&nbsp;&nbsp; 为了安全, 你可以为SSL会话(SSL sessions)定义一个不同的cookie. --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ssl-session-cookie&gt;SSL_JSESSIONID&lt;/ssl-session-cookie&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;!--&nbsp; 缓存启用 (专业版的功能)&nbsp;&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;resin:if test="${isResinProfessional}"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache path="cache" memory-size="64M"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Vary header rewriting for IE --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rewrite-vary-as-private/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/cache&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/resin:if&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;!-- 启用周期性的服务器状态检查和死锁检查，所有的服务器可以添加 &lt;url&gt; 来检查。&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;resin:if test="${isResinProfessional}"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ping&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- &lt;url&gt;http://localhost:8080/test-ping.jsp&lt;/url&gt; --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ping&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/resin:if&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;!-- 包含web应用的默认行为&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;resin:import path="${resin.home}/conf/app-default.xml"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;!-- 每一个web应用的默认参数&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;web-app-default&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 扩展库的公共jar文件，扩展是安全的即使没有类装载器知道的jars，<br />
装载的类将为每个应用分别装载，也就是这些类都是不同的 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;class-loader&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tree-loader path="${server.root}/ext-webapp"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/class-loader&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--&nbsp; 设置缓存页、静态也的延时值&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache-mapping url-pattern="/" expires="5s"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache-mapping url-pattern="*.gif" expires="60s"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache-mapping url-pattern="*.jpg" expires="60s"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache-mapping url-pattern="*.png" expires="60s"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 启用EL表达式 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;allow-servlet-el/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--&nbsp;&nbsp; 安全原因, 默认禁用了会话的URLs --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;session-config&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;enable-url-rewriting&gt;false&lt;/enable-url-rewriting&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/session-config&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 安全原因, 在cookies中设置HttpOnly标志 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cookie-http-only/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--一些JSP包有不正确的 .tld文件。可以把validate-taglib-schema设置成false,可能继续正常工作 <br />
Some JSP packages have incorrect .tld files.&nbsp; It's possible to set validate-taglib-schema to false to work around these packages. --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jsp&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;validate-taglib-schema&gt;true&lt;/validate-taglib-schema&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fast-jstl&gt;true&lt;/fast-jstl&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fast-jsf&gt;true&lt;/fast-jsf&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/jsp&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/web-app-default&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;!-- 简单的数据池配置 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The JDBC name is java:comp/env/jdbc/test&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;database&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jndi-name&gt;jdbc/mysql&lt;/jndi-name&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;driver type="org.gjt.mm.mysql.Driver"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url&gt;jdbc:mysql://localhost:3306/test&lt;/url&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;user&gt;&lt;/user&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;password&gt;&lt;/password&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/driver&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prepared-statement-cache-size&gt;8&lt;/prepared-statement-cache-size&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;max-connections&gt;20&lt;/max-connections&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;max-idle-time&gt;30s&lt;/max-idle-time&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/database&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;!-- 定义所有虚拟主机的默认配置 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;host-default&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 如果和别的web服务器整合，这个可以被去掉，因为web服务器也可以记录这些信息。&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;access-log path="logs/access.log" format='%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"' rollover-period="1W"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- war 文件的布置目录&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;web-app-deploy path="webapps"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- ear文件的布置目录 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ear-deploy path="deploy"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ear-default&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ejb-server&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;config-directory&gt;WEB-INF&lt;/config-directory&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;data-source&gt;jdbc/test&lt;/data-source&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ejb-server&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ear-default&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ear-deploy&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- rar文件的布置目录 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;resource-deploy path="deploy"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/host-default&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;!-- 虚拟主机的布置目录 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;host-deploy path="hosts"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;host-default&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;resin:import path="host.xml" optional="true"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/host-default&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/host-deploy&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;!-- 默认的虚拟主机配置 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;host id="" root-directory="."&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 配置默认的应用 webapp's ROOT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;web-app id="/" root-directory="webapps/ROOT"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;web-app id="/resin-admin" root-directory="${resin.home}/php/admin"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--&nbsp; 管理应用程序 /resin-admin password is the md5 hash of the password。md5码的密码。 <br />
localhost is true to limit access to the localhost。localhost设置成true,这样只有localhost才能访问 --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prologue&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;resin:set var="resin_admin_user" value=""/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;resin:set var="resin_admin_password" value=""/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;resin:set var="resin_admin_external" value="false"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/prologue&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/web-app&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/host&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/cluster&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;!--&nbsp; Configuration for the web-tier/load-balancer&nbsp; --&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;resin:if test="${resin.isProfessional()}"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;cluster id="web-tier"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;server-default&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- The http port --&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;http address="*" port="9080"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/server-default&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;server id="web-a" address="127.0.0.1" port="6700"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache path="cache" memory-size="64M"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;host id=""&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;web-app id="/"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rewrite-dispatch&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;load-balance regexp="" cluster="app-tier"/&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/rewrite-dispatch&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/web-app&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/host&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/cluster&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/resin:if&gt;&nbsp;&nbsp; <br />
&lt;/resin&gt;&nbsp;&nbsp; 
<img src ="http://www.blogjava.net/jelver/aggbug/183638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-03-04 11:10 <a href="http://www.blogjava.net/jelver/articles/183638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Resin 3.1 pro版本中集群与负载均衡的实现</title><link>http://www.blogjava.net/jelver/articles/183449.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Mon, 03 Mar 2008 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/183449.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/183449.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/183449.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/183449.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/183449.html</trackback:ping><description><![CDATA[<table cellspacing="0" cellpadding="3" width="100%" border="0">
    <tbody>
        <tr>
            <td align="left"><a href="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet/download/123297-3334-1857/resin1.conf"><img alt="附件" src="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet?attachImage=true&amp;contentType=application%2Foctet-stream&amp;attachment=1857" border="0" /></a></td>
        </tr>
        <tr>
            <td align="left" width="99%"><a href="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet/download/123297-3334-1857/resin1.conf">resin1.conf</a>(9.3 K)</td>
        </tr>
        <tr>
            <td align="left"><a href="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet/download/123297-3334-1858/resin-web.conf"><img alt="附件" src="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet?attachImage=true&amp;contentType=application%2Foctet-stream&amp;attachment=1858" border="0" /></a></td>
        </tr>
        <tr>
            <td align="left" width="99%"><a href="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet/download/123297-3334-1858/resin-web.conf">resin-web.conf</a>(8.8 K)</td>
        </tr>
        <tr>
            <td align="left"><a href="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet/download/123297-3334-1859/resin-313-cluster-app-1.gif"><img alt="附件" src="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet?attachImage=true&amp;contentType=image%2Fgif&amp;attachment=1859" border="0" /></a></td>
        </tr>
        <tr>
            <td align="left" width="99%"><a href="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet/download/123297-3334-1859/resin-313-cluster-app-1.gif">resin-313-cluster-app-1.gif</a>(6.8 K)</td>
        </tr>
        <tr>
            <td align="left"><a href="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet/download/123297-3334-1860/resin-313-cluster-app-2.gif"><img alt="附件" src="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet?attachImage=true&amp;contentType=image%2Fgif&amp;attachment=1860" border="0" /></a></td>
        </tr>
        <tr>
            <td align="left" width="99%"><a href="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet/download/123297-3334-1860/resin-313-cluster-app-2.gif">resin-313-cluster-app-2.gif</a>(6.8 K)</td>
        </tr>
        <tr>
            <td align="left"><a href="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet/download/123297-3334-1861/resin-313-cluster-web-1.gif"><img alt="附件" src="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet?attachImage=true&amp;contentType=image%2Fgif&amp;attachment=1861" border="0" /></a></td>
        </tr>
        <tr>
            <td align="left" width="99%"><a href="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet/download/123297-3334-1861/resin-313-cluster-web-1.gif">resin-313-cluster-web-1.gif</a>(6.3 K)</td>
        </tr>
        <tr>
            <td style="border-top: #ccc 1px solid" colspan="2">&nbsp;</td>
        </tr>
    </tbody>
</table>
<a href="http://anotherbug.blog.chinajavaworld.com/entry/3334/0/">切换到幻灯片模式</a><br />
<br />
<!--attachment end-->需要配置前端web层和后端应用层： <br />
<br />
1.web层配置： <br />
<br />
&lt;!--<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Configuration <font color="navy"><strong>for</strong></font> the web-tier/load-balancer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cluster id=<font color="red">"web-tier"</font>&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;server-default&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- The http port --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;http address=<font color="red">"*"</font> port=<font color="red">"80"</font>/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/server-default&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;server id=<font color="red">"web-a"</font> address=<font color="red">"127.0.0.1"</font> port=<font color="red">"6700"</font>/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache path=<font color="red">"cache"</font> memory-size=<font color="red">"64M"</font>/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;host id=<font color="red">""</font>&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;web-app id=<font color="red">"/"</font>&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rewrite-dispatch&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;load-balance regexp=<font color="red">""</font> cluster=<font color="red">"app-tier"</font>/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/rewrite-dispatch&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/web-app&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/host&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/cluster&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cluster id=<font color="red">"app-tier"</font>&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;server id=<font color="red">"a"</font> address=<font color="red">"127.0.0.1"</font> port=<font color="red">"6800"</font>/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;server id=<font color="red">"b"</font> address=<font color="red">"127.0.0.1"</font> port=<font color="red">"6801"</font>/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;persistent-store type=<font color="red">"cluster"</font>&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init path=<font color="red">"cluster"</font>/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/persistent-store&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;web-app-default&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;session-config&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;use-persistent-store/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/session-config&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/web-app-default&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;host id=<font color="red">""</font>&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/host&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/cluster&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
以上配置将来自80的请求分发给app-tier应用层集群处理。 <br />
<br />
2.应用层集群配置： <br />
<pre>    &lt;!-- define the servers in the cluster --&gt;
&lt;server id=<font color="red">"a"</font> address=<font color="red">"127.0.0.1"</font> port=<font color="red">"6800"</font>/&gt;
&lt;server id=<font color="red">"b"</font> address=<font color="red">"127.0.0.1"</font> port=<font color="red">"6801"</font>/&gt;
</pre>
<br />
<br />
3.启动应用层服务器： <br />
D:\resin-pro-3.1.3\httpd.exe -conf conf/resin1.conf -server a<br />
&nbsp;D:\resin-pro-3.1.3\httpd.exe -conf conf/resin1.conf -server b<br />
<br />
以上启动了两个应用服务器a和b. <br />
<br />
4.启动前端WEB服务器： <br />
<table cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd"><font color="#555555">
            <pre>1<br />
            </pre>
            </font></td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&gt; D:\resin-pro-3.1.3\httpd.exe -conf conf/resin-web.conf -server web-a
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
5.写测试JSP a.jsp： <br />
<table cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd"><font color="#555555">
            <pre>1<br />
            </pre>
            </font></td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;%System.out.println(<font color="red">"aaaaaaaaaaaa"</font>);%&gt;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
6.在浏览器中访问： <br />
<br />
http://localhost/a.jsp <br />
<br />
观察一下控制台，会在两个窗口控制台轮流打印出 aaaaaaaaaaaa，说明负载均衡Servlet工作正常。 <br />
<br />
关掉一个应用服务器，再次访问，会发现访问正常。 <br />
 <img src ="http://www.blogjava.net/jelver/aggbug/183449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-03-03 14:11 <a href="http://www.blogjava.net/jelver/articles/183449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Resin3.1 优化（转）</title><link>http://www.blogjava.net/jelver/articles/183376.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Mon, 03 Mar 2008 01:51:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/183376.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/183376.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/183376.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/183376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/183376.html</trackback:ping><description><![CDATA[<p>使用resin已经有四、五年了，但以前都是做一些小系统，resin的压力并不大，近段时间做一个大系统，日平均ip上10万，resin的压力非常的大，除了对程序做优化以外，resin 的优化也小不了。<br />
&nbsp;<br />
&nbsp;<br />
一、优化配置<br />
　　修改　conf/resin.conf　文章中的　ＪＶＭ参数<br />
&nbsp;<br />
&lt;jvm-arg&gt;-Xms512m&lt;/jvm-arg&gt;<br />
&lt;jvm-arg&gt;-Xss128k&lt;/jvm-arg&gt;<br />
&lt;jvm-arg&gt;-Xmn184m&lt;/jvm-arg&gt;<br />
&lt;jvm-arg&gt;-XX:ParallelGCThreads=20&lt;/jvm-arg&gt;<br />
&lt;jvm-arg&gt;-XX:+UseConcMarkSweepGC&lt;/jvm-arg&gt;<br />
&lt;jvm-arg&gt;-XX:+UseParNewGC&lt;/jvm-arg&gt;<br />
&lt;jvm-arg&gt;-Xdebug&lt;/jvm-arg&gt;<br />
&lt;jvm-arg&gt;-Xloggc:gc.log&lt;/jvm-arg&gt;<br />
&nbsp;<br />
　　修改 最大thread-max为2500<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Maximum number of threads. --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;thread-max&gt;2500&lt;/thread-max&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Configures the socket timeout --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;socket-timeout&gt;65s&lt;/socket-timeout&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Configures the keepalive --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;keepalive-max&gt;10240&lt;/keepalive-max&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;keepalive-timeout&gt;30s&lt;/keepalive-timeout&gt;<br />
&nbsp;<br />
二、利用resin-admin监控resin运行情况。</p>
<p>&nbsp;</p>
<div><img alt="" src="http://www.strongd.net/images/b.jpg" /><br />
第一行是Thread pool情况，如果发现Peak大于thread max，就应该修改conf/resin.conf 中的thread-max，相应的增大thread-max。<br />
第二行是Threads，如果长期出现在这里而又不是ＳＵＮ的方法，或者resin的方法的话，就要对这些方法进行测试、优化。<br />
<br />
<br />
<br />
<div>以下内容都是自己不断实验总结的，而非resin官方的建议，可能不适合你的情况，我的经验仅做为参考。）<br />
最近发现有人用黑客类工具恶意点击网站，或发送大量垃圾包，具体是什么不清楚，但是很明显是故意的，造成80端口无法正常访问，或访问速度极慢。<br />
用netstat -an &gt;&gt;c:\temp\aaa.txt 命令查看了当时情况，发现某几个ip的连接数量巨大，是不正常的。<br />
不管是访问量大，还是有黑客骚扰，我想还是试试看把resin优化一下。<br />
首先要在访问量巨大的时候进行观察。<br />
先将resin.conf文件中的thread-min，thread-max，thread-keepalive三个参数设置的比较大，分别写上，1000，3000，1000，当然这是根据你的机器情况和可能同时访问的数量决定的，如果你的网站访问量很大的，应该再适当放大。<br />
然后观察任务管理器中的java线程变化情况，看看到底是线程达到多大的时候，java进程当掉的。我的是在379左右当掉。<br />
然后将thread-min，thread-max，thread-keepalive分别写为150，400，300；，也就是将当掉的时候的最大值稍微放大点，作为thread-max的值，因为该系统一般不会超过这个值。然后其他两个参数根据情况设置一下。<br />
这只是我的估计值，根据机器性能和访问量不同，应该有所不同。<br />
然后将accept-buffer-size值设置的较大，我设置到10000以上，这样可以让java能使用到更多的内存资源。<br />
这样的设置基本上能够满足resin的正常运行，当掉resin服务的情况大大减少，本设置适合于中小型网站。&nbsp;</div>
<div>
<table cellspacing="0" cellpadding="5" width="100%" border="0">
    <tbody>
        <tr class="section">
            <td><font color="#336699" size="+2"><strong><a name="Resin-Threads">Resin Threads</a></strong></font></td>
        </tr>
    </tbody>
</table>
<p>Resin will automatically allocate and free threads as the load requires. Since the threads are pooled, Resin can reuse old threads without the performance penalty of creating and destroying the threads. When the load drops, Resin will slowly decrease the number of threads in the pool until is matches the load.</p>
<p>Most users can set <span class="meta">thread-max</span> to something large (200 or greater) and then forget about the threading. Some ISPs dedicate a JVM per user and have many JVMs on the same machine. In that case, it may make sense to reduce the <span class="meta">thread-max</span> to throttle the requests.</p>
<p>Since each servlet request gets its own thread, <span class="meta">thread-max</span> determines the maximum number of concurrent users. So if you have a peak of 100 users with slow modems downloading a large file, you'll need a <span class="meta">thread-max</span> of at least 100. The number of concurrent users is unrelated to the number of active sessions. Unless the user is actively downloading, he doesn't need a thread (except for "keepalives"). </p>
<p>
<table cellspacing="0" cellpadding="5" width="100%" border="0">
    <tbody>
        <tr class="section">
            <td><font color="#336699" size="+2"><strong><a name="Keepalives">Keepalives</a></strong></font></td>
        </tr>
    </tbody>
</table>
<p>Keepalives make HTTP and srun requests more efficient. Connecting to a TCP server is relatively expensive. The client and server need to send several packets back and forth to establish the connection before the first data can go through. HTTP/1.1 introduced a protocol to keep the connection open for more requests. The srun protocol between Resin and the web server plugin also uses keepalives. By keeping the connection open for following requests, Resin can improve performance. </p>
<p>
<table class="egpad" cellspacing="0" width="90%">
    <caption><font size="+1">resin.conf for thread-keepalive</font> </caption>
    <tbody>
        <tr>
            <td class="example" bgcolor="#ffeecc">
            <pre>&lt;resin ...&gt;
            &lt;thread-pool&gt;
            &lt;thread-max&gt;250&lt;/thread-max&gt;
            &lt;/thread-pool&gt;
            &lt;server&gt;
            &lt;keepalive-max&gt;500&lt;/keepalive-max&gt;
            &lt;keepalive-timeout&gt;120s&lt;/keepalive-timeout&gt;
            ...
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<h3><a name="Timeouts"><font color="#336699">Timeouts</font></a></h3>
<p>Requests and keepalive connections can only be idle for a limited time before Resin closes them. Each connection has a read timeout, <span class="meta">request-timeout</span>. If the client doesn't send a request within the timeout, Resin will close the TCP socket. The timeout prevents idle clients from hogging Resin resources.</p>
<p>
<table class="egpad" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td class="example" bgcolor="#ffeecc">
            <pre>...
            &lt;thread-pool&gt;
            &lt;thread-max&gt;250&lt;/thread-max&gt;
            &lt;/thread-pool&gt;
            &lt;server&gt;
            &lt;http port="8080" read-timeout="30s" write-timeout="30s"/&gt;
            ...
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>
<table class="egpad" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td class="example" bgcolor="#ffeecc">
            <pre>...
            &lt;thread-max&gt;250&lt;/thread-max&gt;
            &lt;server&gt;
            &lt;cluster&gt;
            &lt;client-live-time&gt;20s&lt;/client-live-time&gt;
            &lt;srun id="a" port="6802" read-timeout="30s"/&gt;
            &lt;/cluster&gt;
            ...
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>In general, the read-timeout and keepalives are less important for Resin standalone configurations than Apache/IIS/srun configurations. Very heavy traffic sites may want to reduce the timeout for Resin standalone.</p>
<p>Since <span class="meta">read-timeout</span> will close srun connections, its setting needs to take into consideration the <span class="meta">client-live-time</span> setting for mod_caucho or isapi_srun. <span class="meta">client-live-time</span> is the time the plugin will keep a connection open. <span class="meta">read-timeout</span> must always be larger than <span class="meta">client-live-time</span>, otherwise the plugin will try to reuse a closed socket.</p>
<h3><a name="Plugin-keepalives-(mod_caucho/isapi_srun)"><font color="#336699">Plugin keepalives (mod_caucho/isapi_srun)</font></a></h3>
<p>The web server plugin, mod_caucho, needs configuration for its keepalive handling because requests are handled differently in the web server. Until the web server sends a request to Resin, it can't tell if Resin has closed the other end of the socket. If the JVM has restarted or if closed the socket because of <span class="meta">read-timeout</span>, mod_caucho will not know about the closed socket. So mod_caucho needs to know how long to consider a connection reusable before closing it. <span class="meta">client-live-time</span> tells the plugin how long it should consider a socket usable.</p>
<p>Because the plugin isn't signalled when Resin closes the socket, the socket will remain half-closed until the next web server request. A <span class="meta">netstat</span> will show that as a bunch of sockets in the FIN_WAIT_2 state. With Apache, there doesn't appear to be a good way around this. If these become a problem, you can increase <span class="meta">read-timeout</span> and <span class="meta">client-live-time</span> so the JVM won't close the keepalive connections as fast.</p>
<p>
<table class="egpad" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td class="example" bgcolor="#ffeecc">
            <pre>unix&gt; netstat
            ...
            localhost.32823      localhost.6802       32768      0 32768      0 CLOSE_WAIT
            localhost.6802       localhost.32823      32768      0 32768      0 FIN_WAIT_2
            localhost.32824      localhost.6802       32768      0 32768      0 CLOSE_WAIT
            localhost.6802       localhost.32824      32768      0 32768      0 FIN_WAIT_2
            ...
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<h3><a name="TCP-limits-(TIME_WAIT)"><font color="#336699">TCP limits (TIME_WAIT)</font></a></h3>
<p>A client and a server that open a large number of TCP connections can run into operating system/TCP limits. If mod_caucho isn't configured properly, it can use too many connections to Resin. When the limit is reached, mod_caucho will report "can't connect" errors until a timeout is reached. Load testing or benchmarking can run into the same limits, causing apparent connection failures even though the Resin process is running fine.</p>
<p>The TCP limit is the TIME_WAIT timeout. When the TCP socket closes, the side starting the close puts the socket into the TIME_WAIT state. A <span class="meta">netstat</span> will short the sockets in the TIME_WAIT state. The following shows an example of the TIME_WAIT sockets generated while benchmarking. Each client connection has a unique ephemeral port and the server always uses its public port:</p>
<p>
<table class="egpad" cellspacing="0" width="90%">
    <caption><font size="+1">Typical Benchmarking Netstat</font> </caption>
    <tbody>
        <tr>
            <td class="example" bgcolor="#ffeecc">
            <pre>unix&gt; netstat
            ...
            tcp   0   0 localhost:25033  localhost:8080  TIME_WAIT
            tcp   0   0 localhost:25032  localhost:8080  TIME_WAIT
            tcp   0   0 localhost:25031  localhost:8080  TIME_WAIT
            tcp   0   0 localhost:25030  localhost:8080  TIME_WAIT
            tcp   0   0 localhost:25029  localhost:8080  TIME_WAIT
            tcp   0   0 localhost:25028  localhost:8080  TIME_WAIT
            ...
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>The socket will remain in the TIME_WAIT state for a system-dependent time, generally 120 seconds, but usually configurable. Since there are less than 32k ephemeral socket available to the client, the client will eventually run out and start seeing connection failures. On some operating systems, including RedHat Linux, the default limit is only 4k sockets. The full 32k sockets with a 120 second timeout limits the number of connections to about 250 connections per second.</p>
<p>If mod_caucho or isapi_srun are misconfigured, they can use too many connections and run into the TIME_WAIT limits. Using keepalives effectively avoids this problem. Since keepalive connections are reused, they won't go into the TIME_WAIT state until they're finally closed. A site can maximize the keepalives by setting <span class="meta">thread-keepalive</span> large and setting <span class="meta">live-time</span> and <span class="meta">request-timeout</span> to large values. <span class="meta">thread-keepalive</span> limits the maximum number of keepalive connections. <span class="meta">live-time</span> and <span class="meta">request-timeout</span> will configure how long the connection will be reused.</p>
<p>
<table class="egpad" cellspacing="0" width="90%">
    <caption><font size="+1">Configuration for a medium-loaded Apache</font> </caption>
    <tbody>
        <tr>
            <td class="example" bgcolor="#ffeecc">
            <pre>...
            &lt;thread-pool&gt;
            &lt;thread-max&gt;250&lt;/thread-max&gt;
            &lt;/thread-pool&gt;
            &lt;server&gt;
            &lt;keepalive-max&gt;250&lt;/keepalive-max&gt;
            &lt;keepalive-timeout&gt;120s&lt;/keepalive-timeout&gt;
            &lt;cluster&gt;
            &lt;client-live-time&gt;120s&lt;/client-live-time&gt;
            &lt;srun id="a" port="6802" read-timeout="120s"/&gt;
            &lt;/cluster&gt;
            ...
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p><span class="meta">read-timeout</span> must always be larger than <span class="meta">client-live-time</span>. In addition, <span class="meta">keepalive-max</span> should be larger than the maximum number of Apache processes.</p>
<h3><a name="Apache-1.3-issues"><font color="#336699">Apache 1.3 issues</font></a></h3>
<p>Using Apache as a web server on Unix introduces a number of issues because Apache uses a process model instead of a threading model. The Apache processes don't share the keepalive srun connections. Each process has its own connection to Resin. In contrast, IIS uses a threaded model so it can share Resin connections between the threads. The Apache process model means Apache needs more connections to Resin than a threaded model would.</p>
<p>In other words, the keepalive and TIME_WAIT issues mentioned above are particularly important for Apache web servers. It's a good idea to use <span class="meta">netstat</span> to check that a loaded Apache web server isn't running out of keepalive connections and running into TIME_WAIT problems.</p>
<p>&nbsp;</p>
<p><br />
先将resin.conf文件中的thread-min，thread-max，thread-keepalive三个参数设置的比较大，分别写上，1000，3000，1000，当然这是根据你的机器情况和可能同时访问的数量决定的，如果你的网站访问量很大的，应该再适当放大。<br />
然后观察任务管理器中的java线程变化情况，看看到底是线程达到多大的时候，java进程当掉的。我的是在379左右当掉。<br />
然后将thread-min，thread-max，thread-keepalive分别写为150，400，300；，也就是将当掉的时候的最大值稍微放大点，作为thread-max的值，因为该系统一般不会超过这个值。然后其他两个参数根据情况设置一下。<br />
这只是我的估计值，根据机器性能和访问量不同，应该有所不同。<br />
然后将accept-buffer-size值设置的较大，我设置到10000以上，这样可以让java能使用到更多的内存资源。<br />
这样的设置基本上能够满足resin的正常运行，当掉resin服务的情况大大减少，本设置适合于中小型网站。</p>
<p>Resin优化： <br />
<br />
The allocation of memory for the JVM is specified using -X options when starting Resin <br />
<br />
(the exact options may depend upon the JVM that you are using, the examples here are for the Sun JVM). <br />
<br />
JVM option passed to Resin Meaning <br />
-Xms initial java heap size <br />
-Xmx maximum java heap size <br />
-Xmn the size of the heap for the young generation <br />
<br />
Resin startup with heap memory options unix&gt; bin/httpd.sh -Xmn100M -Xms500M -Xmx500M win&gt; bin/httpd.exe -Xmn100M -Xms500M -Xmx500M install win service&gt; bin/httpd.exe -Xmn100M -Xms500M -Xmx500M -install <br />
<br />
原文：http://www.caucho.com/resin-3.0/performance/jvm-tuning.xtp <br />
<br />
<br />
JVM 优化： <br />
<br />
java -Xms&lt;size&gt; <br />
set initial Java heap size. default:Xms32m <br />
java -Xmx&lt;size&gt; <br />
set maximum Java heap size. default:Xmx128m <br />
<br />
set it like that: <br />
<br />
java -Xms=32m -Xmx=256m <br />
If the problem persist, increase Xmx more than 256 ( 512m for example ) <br />
<br />
-J-mx&lt;num&gt; </p>
<p>&nbsp;</p>
<p><span class="javascript" id="text174266">Resin启动时通过bin目录下的wrapper.pl文件进行控制，我们可以修改这个文件来加一些参数，比如要加入Java的-Xms和-Xmx参数 <br />
<br />
进行 <br />
vi /usr/local/resin-2.1/bin/wrapper.pl <br />
找到并修改以下这行为： <br />
$JAVA_ARGS="-Xms512m -Xmx512m"; <br />
<br />
具体参数请根据自己的应用进行调节 </span><br />
<br />
</p>
<div class="tit">Resin的优化---日志的设置</div>
<div class="date">2007年03月06日 星期二 10:25</div>
<p>
<table style="table-layout: fixed">
    <tbody>
        <tr>
            <td>
            <div class="cnt">
            <p>log设置&nbsp;<br />
            &lt;log&nbsp;name=''&nbsp;level='info'&nbsp;path='stdout:'&nbsp;rollover-period='1W'&nbsp;timestamp='[%Y/%m/%d&nbsp;%H:%M:%S.%s]&nbsp;'/&gt;&nbsp;<br />
            &lt;log&nbsp;name='com.caucho.java'&nbsp;level='fine'&nbsp;path='stdout:'&nbsp;rollover-period='1W'&nbsp;timestamp='[%Y/%m/%d&nbsp;%H:%M:%S.%s]&nbsp;'/&gt;&nbsp;<br />
            &lt;log&nbsp;name='com.caucho.loader'&nbsp;level='config'&nbsp;path='stdout:'&nbsp;rollover-period='1W'&nbsp;timestamp='[%Y/%m/%d&nbsp;%H:%M:%S.%s]&nbsp;'/&gt;&nbsp;</p>
            <p>name&nbsp;是指定对各个层次应用进行debug，name&nbsp;设定有几种情况，如：&nbsp;<br />
            Name=&#8217;&#8217;&nbsp;name为空，这对所有应用、包括端口全面进行调试记载日志&nbsp;<br />
            Name=&#8217;com.caucho.jsp&#8217;&nbsp;指定只对jsp进行调试记载日志&nbsp;<br />
            Name=&#8217;com.caucho.java&#8217;&nbsp;指定只对java类进行调试&nbsp;<br />
            Name=&#8217;com.caucho.server.port&#8217;&nbsp;指定只对端口、线程进行调试&nbsp;<br />
            Name=&#8217;com.caucho.server.port.AcceptPool&nbsp;指定只对端口线程的创建和释放进行debug&nbsp;<br />
            &#8230;.&nbsp;</p>
            <p>level&nbsp;的级别一般有：:&nbsp;<br />
            Off&nbsp;Severe&nbsp;info&nbsp;config&nbsp;fine&nbsp;finer&nbsp;finest&nbsp;all&nbsp;这几中配置级别；&nbsp;<br />
            Off&nbsp;关闭日志输出&nbsp;<br />
            Severe&nbsp;只输出些严重的出错信息&nbsp;<br />
            Info&nbsp;输出一般的综合信息&nbsp;<br />
            Config&nbsp;输出配置信息&nbsp;<br />
            Fine&nbsp;输出resin的跟踪信息&nbsp;<br />
            Finer&nbsp;输出详细的跟踪信息&nbsp;<br />
            Finest&nbsp;输出比Finer更详细的跟踪消息、细节问题&nbsp;<br />
            All&nbsp;输出所有的访问输出消息&nbsp;</p>
            <p>path：&nbsp;输出文件路径指向,可以形式如&nbsp;path=&#8217;stdout:&#8217;&nbsp;注意后面有冒号；或指定绝对路径path=&#8217;/usr/local/resin-3.0.7/log/stdout.log&#8217;&nbsp;<br />
            Timestamp&nbsp;:&nbsp;完整的输出日期格式[%Y/%m/%d&nbsp;%H:%M:%S.%s]；&nbsp;</p>
            <p>一般设置日志文件一周轮循一次,即&nbsp;rollover-period=&#8217;1M&#8217;&nbsp;或&nbsp;rollover-period=&#8217;7D&#8217;&nbsp;,&nbsp;当满一周,系统会自动生成新日志记录文件,格式如:&nbsp;stderr.log.20041201&nbsp;stderr.log.20041208&nbsp;<br />
            rollover-period=&#8217;D&#8217;&nbsp;天&nbsp;<br />
            rollover-period=&#8217;h&#8217;&nbsp;小时&nbsp;<br />
            rollover-period=&#8217;W&#8217;&nbsp;周&nbsp;<br />
            rollover-period=&#8217;M&#8217;&nbsp;月&nbsp;</p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><span class="javascript" id="text174282">当不需要改动程序时,关闭java自动编译会更快些.<br />
<br />
&lt;compiling-loader path="webapps/WEB-INF/classes" /&gt;<br />
加个属性<br />
batch="false"</span></p>
</div>
<p>&nbsp;</p>
<p><span class="javascript"><span class="javascript" id="text174537">$JAVA_ARGS="-server";<br />
<br />
据说java中的-server参数是让本地化编译更完全. </span><br />
</span></p>
<br />
</div>
<img src ="http://www.blogjava.net/jelver/aggbug/183376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-03-03 09:51 <a href="http://www.blogjava.net/jelver/articles/183376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Resin 3.1.2分析系统性能瓶颈（转）</title><link>http://www.blogjava.net/jelver/articles/183349.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Mon, 03 Mar 2008 00:52:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/183349.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/183349.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/183349.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/183349.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/183349.html</trackback:ping><description><![CDATA[<table cellspacing="0" cellpadding="3" width="100%" border="0">
    <tbody>
        <tr>
            <td align="left"><a href="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet/download/123297-2938-1309/resin-performance-ans-1.gif"><br />
            <img alt="附件" src="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet?attachImage=true&amp;contentType=image%2Fgif&amp;attachment=1309" border="0" /></a></td>
        </tr>
        <tr>
            <td align="left" width="99%"><a href="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet/download/123297-2938-1309/resin-performance-ans-1.gif">resin-performance-ans-1.gif</a>(5.0 K)</td>
        </tr>
        <tr>
            <td align="left"><a href="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet/download/123297-2938-1310/cpu-use.gif"><img alt="附件" src="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet?attachImage=true&amp;contentType=image%2Fgif&amp;attachment=1310" border="0" /></a></td>
        </tr>
        <tr>
            <td align="left" width="99%"><a href="http://anotherbug.blog.chinajavaworld.com/servlet/AttachmentServlet/download/123297-2938-1310/cpu-use.gif">cpu-use.gif</a>(11.1 K)</td>
        </tr>
        <tr>
            <td style="border-top: #ccc 1px solid" colspan="2">&nbsp;</td>
        </tr>
    </tbody>
</table>
<a href="http://anotherbug.blog.chinajavaworld.com/entry/2938/0/">切换到幻灯片模式</a><br />
<br />
<!--attachment end-->这两天发现blog系统访问响应变慢，经分析发现服务器CPU接近100%，而且降不下来，经分析应该是有大量类似循环的操作导致。 <br />
<br />
采用Resin 3.1.2，打开后台的Threads监控页面（如附件），访问前台页面，多刷新几次，在后台再刷新Threads页面，如果其中的Active项中含有非Resin或Jdk的方法，说明该方法存在严重的性能问题一直处于执行状态而不能结束，特别是如果是你自己写的方法。 <br />
<br />
经此方法检查，anotherbug发现当前Active的线程中经常停留在一个方法，于是将该方法暂时禁用，再重启Resin进行跟踪，发现Active不再出现该方法。 <br />
<br />
附件是Resin的Active项的界面，还有优化后的CPU使用情况（几乎为0）。 <br />
http://anotherbug.blog.chinajavaworld.com/entry/2938/0/<br />
<img src ="http://www.blogjava.net/jelver/aggbug/183349.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-03-03 08:52 <a href="http://www.blogjava.net/jelver/articles/183349.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Resin 3 pro高并发,响应性与稳定性方案(转)</title><link>http://www.blogjava.net/jelver/articles/183345.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Mon, 03 Mar 2008 00:47:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/183345.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/183345.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/183345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/183345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/183345.html</trackback:ping><description><![CDATA[以下方案我是在Intel xeon(至强) 3.2G 2个双核物理CPU+2G内存(Ecc)上进行： <br />
<br />
resin版本为resin-pro-3.0.21，JVM为Jrockit 1.5_06， resin java 启动参数 -Xms256m -Xmx512m <br />
<br />
1. 以下为resin.conf配置 <br />
<table cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd"><font color="#555555">
            <pre>1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            20<br />
            21<br />
            22<br />
            23<br />
            24<br />
            25<br />
            26<br />
            27<br />
            28<br />
            29<br />
            30<br />
            31<br />
            32<br />
            33<br />
            34<br />
            35<br />
            36<br />
            37<br />
            38<br />
            39<br />
            40<br />
            41<br />
            42<br />
            43<br />
            44<br />
            45<br />
            46<br />
            47<br />
            48<br />
            49<br />
            50<br />
            51<br />
            52<br />
            53<br />
            54<br />
            55<br />
            56<br />
            57<br />
            58<br />
            59<br />
            60<br />
            61<br />
            62<br />
            63<br />
            64<br />
            65<br />
            66<br />
            67<br />
            68<br />
            69<br />
            70<br />
            71<br />
            72<br />
            73<br />
            74<br />
            75<br />
            76<br />
            77<br />
            78<br />
            79<br />
            80<br />
            81<br />
            82<br />
            83<br />
            84<br />
            85<br />
            86<br />
            87<br />
            88<br />
            89<br />
            90<br />
            91<br />
            92<br />
            93<br />
            94<br />
            95<br />
            96<br />
            97<br />
            98<br />
            99<br />
            100<br />
            101<br />
            102<br />
            103<br />
            104<br />
            105<br />
            106<br />
            107<br />
            108<br />
            109<br />
            110<br />
            111<br />
            112<br />
            113<br />
            114<br />
            115<br />
            116<br />
            117<br />
            118<br />
            119<br />
            120<br />
            121<br />
            122<br />
            123<br />
            124<br />
            </pre>
            </font></td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;!--
            - Resin 3.0 configuration file.
            --&gt;
            &lt;resin xmlns=<font color="red">"http://caucho.com/ns/resin"</font>
            xmlns:resin=<font color="red">"http://caucho.com/ns/resin/core"</font>&gt;
            &lt;!--
            - Logging configuration <font color="navy"><strong>for</strong></font> the JDK logging API.
            --&gt;
            &lt;log name=<font color="red">""</font> level=<font color="red">"all"</font> path=<font color="red">"stdout:"</font> timestamp=<font color="red">"[%H:%M:%S.%s] "</font>/&gt;
            &nbsp;
            &lt;logger name=<font color="red">"com.caucho.java"</font> level=<font color="red">"config"</font>/&gt;
            &lt;logger name=<font color="red">"com.caucho.loader"</font> level=<font color="red">"config"</font>/&gt;
            &nbsp;
            &lt;dependency-check-interval&gt;600s&lt;/dependency-check-interval&gt;
            &nbsp;
            &lt;javac compiler=<font color="red">"internal"</font> args=<font color="red">""</font>/&gt;
            &nbsp;
            &lt;thread-pool&gt;
            &lt;thread-max&gt;10240&lt;/thread-max&gt;
            &lt;spare-thread-min&gt;50&lt;/spare-thread-min&gt;
            &lt;/thread-pool&gt;
            &nbsp;
            &lt;min-free-memory&gt;5M&lt;/min-free-memory&gt;
            &nbsp;
            &lt;server&gt;
            &lt;class-loader&gt;
            &lt;tree-loader path=<font color="red">"${resin.home}/lib"</font>/&gt;
            &lt;tree-loader path=<font color="red">"${server.root}/lib"</font>/&gt;
            &lt;/class-loader&gt;
            &nbsp;
            &lt;keepalive-max&gt;1024&lt;/keepalive-max&gt;
            &lt;keepalive-timeout&gt;60s&lt;/keepalive-timeout&gt;
            &nbsp;
            &lt;resin:<font color="navy"><strong>if</strong></font> test=<font color="red">"${resin.isProfessional()}"</font>&gt;
            &lt;select-manager enable=<font color="red">"true"</font>/&gt;
            &lt;/resin:if&gt;
            &nbsp;
            &lt;bind-ports-after-start/&gt;
            &nbsp;
            &lt;http server-id=<font color="red">""</font> host=<font color="red">"*"</font> port=<font color="red">"80"</font>/&gt;
            &nbsp;
            &lt;cluster&gt;
            &lt;srun server-id=<font color="red">""</font> host=<font color="red">"127.0.0.1"</font> port=<font color="red">"6802"</font>/&gt;
            &lt;/cluster&gt;
            &nbsp;
            &lt;resin:<font color="navy"><strong>if</strong></font> test=<font color="red">"${resin.isProfessional()}"</font>&gt;
            &lt;persistent-store type=<font color="red">"cluster"</font>&gt;
            &lt;init path=<font color="red">"session"</font>/&gt;
            &lt;/persistent-store&gt;
            &lt;/resin:if&gt;
            &nbsp;
            &lt;ignore-client-disconnect&gt;true&lt;/ignore-client-disconnect&gt;
            &nbsp;
            &lt;resin:<font color="navy"><strong>if</strong></font> test=<font color="red">"${isResinProfessional}"</font>&gt;
            &lt;cache path=<font color="red">"cache"</font> memory-size=<font color="red">"20M"</font>/&gt;
            &lt;/resin:if&gt;
            &nbsp;
            &lt;web-app-default&gt;
            &lt;class-loader&gt;
            &lt;tree-loader path=<font color="red">"${server.root}/ext-webapp"</font>/&gt;
            &lt;/class-loader&gt;
            &nbsp;
            &lt;cache-mapping url-pattern=<font color="red">"/"</font> expires=<font color="red">"60s"</font>/&gt;
            &lt;cache-mapping url-pattern=<font color="red">"*.gif"</font> expires=<font color="red">"600s"</font>/&gt;
            &lt;cache-mapping url-pattern=<font color="red">"*.jpg"</font> expires=<font color="red">"600s"</font>/&gt;
            &nbsp;
            &lt;servlet servlet-name=<font color="red">"directory"</font>
            servlet-class=<font color="red">"com.caucho.servlets.DirectoryServlet"</font>&gt;
            &lt;init enable=<font color="red">"false"</font>/&gt;
            &lt;/servlet&gt;
            &nbsp;
            &lt;allow-servlet-el/&gt;
            &nbsp;
            &lt;session-config&gt;
            &lt;enable-url-rewriting&gt;false&lt;/enable-url-rewriting&gt;
            &lt;/session-config&gt;
            &nbsp;
            &lt;/web-app-default&gt;
            &nbsp;
            &lt;host-default&gt;
            &lt;class-loader&gt;
            &lt;compiling-loader path=<font color="red">"webapps/WEB-INF/classes"</font>/&gt;
            &lt;library-loader path=<font color="red">"webapps/WEB-INF/lib"</font>/&gt;
            &lt;/class-loader&gt;
            &nbsp;
            &lt;!--access-log path=<font color="red">"logs/access.log"</font>
            format=<font color="navy">'%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"'</font>
            rollover-period=<font color="red">"1W"</font>/--&gt;
            &nbsp;
            &lt;web-app-deploy path=<font color="red">"webapps"</font>/&gt;
            &nbsp;
            &lt;ear-deploy path=<font color="red">"deploy"</font>&gt;
            &lt;ear-default&gt;
            &lt;!-- Configure <font color="navy"><strong>this</strong></font> <font color="navy"><strong>for</strong></font> the ejb server
            -
            - &lt;ejb-server&gt;
            -   &lt;config-directory&gt;WEB-INF&lt;/config-directory&gt;
            -   &lt;data-source&gt;jdbc/test&lt;/data-source&gt;
            - &lt;/ejb-server&gt;
            --&gt;
            &lt;/ear-default&gt;
            &lt;/ear-deploy&gt;
            &nbsp;
            &lt;resource-deploy path=<font color="red">"deploy"</font>/&gt;
            &nbsp;
            &lt;web-app-deploy path=<font color="red">"deploy"</font>/&gt;
            &lt;/host-default&gt;
            &nbsp;
            &lt;resin:<font color="navy"><strong>import</strong></font> path=<font color="red">"${resin.home}/conf/app-default.xml"</font>/&gt;
            &nbsp;
            &lt;host-deploy path=<font color="red">"hosts"</font>&gt;
            &lt;host-default&gt;
            &lt;resin:<font color="navy"><strong>import</strong></font> path=<font color="red">"host.xml"</font> optional=<font color="red">"true"</font>/&gt;
            &lt;/host-default&gt;
            &lt;/host-deploy&gt;
            &nbsp;
            &lt;host id=<font color="red">""</font> root-directory=<font color="red">"."</font>&gt;
            &lt;web-app id=<font color="red">"/"</font> document-directory=<font color="red">"d:\website\chat"</font>&gt;
            &lt;/web-app&gt;
            &lt;/host&gt;
            &lt;/server&gt;
            &lt;/resin&gt;
            &nbsp;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
2. 在应用的web.xml中加入resin status查看servlet映射 <br />
<br />
<table cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd"><font color="#555555">
            <pre>1<br />
            2<br />
            3<br />
            4<br />
            </pre>
            </font></td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>      &lt;servlet-mapping servlet-class=<font color="navy">'com.caucho.servlets.ResinStatusServlet'</font>&gt;
            &lt;url-pattern&gt;/resin-status&lt;/url-pattern&gt;
            &lt;init enable=<font color="red">"read"</font>/&gt;
            &lt;/servlet-mapping&gt;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
3. 启动resin，确认应用正常启动。 <br />
<br />
4. 写访问测试程序 <br />
<br />
<table cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd"><font color="#555555">
            <pre>1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            20<br />
            21<br />
            </pre>
            </font></td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre><font color="navy"><strong>import</strong></font> java.io.InputStream;
            <font color="navy"><strong>import</strong></font> java.net.URL;
            &nbsp;
            &nbsp;
            <font color="navy"><strong>public</strong></font> <font color="navy"><strong>class</strong></font> TestURL
            <font color="navy">{</font>
            <font color="navy"><strong>public</strong></font> <font color="navy"><strong>static</strong></font> <font color="navy"><strong>void</strong></font> main(String[] args) <font color="navy"><strong>throws</strong></font> Exception
            <font color="navy">{</font>
            <font color="navy"><strong>long</strong></font> a = System.currentTimeMillis();
            System.out.println(<font color="red">"Starting request url:"</font>);
            <font color="navy"><strong>for</strong></font>(<font color="navy"><strong>int</strong></font> i = 0; i &lt; 10000; i++)<font color="navy">{</font>
            URL url = <font color="navy"><strong>new</strong></font> URL(<font color="red">"http://192.168.1.200/main.jsp"</font>);
            &nbsp;
            InputStream is = url.openStream();
            is.close();
            System.out.println(<font color="red">"Starting request url:"</font>+i);
            <font color="navy">}</font>
            System.out.println(<font color="red">"request url end.take "</font>+(System.currentTimeMillis()-a)+<font color="red">"ms"</font>);
            <font color="navy">}</font>
            &nbsp;
            <font color="navy">}</font>
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
5. 在Jbuilder中执行TestURL <br />
<br />
在执行过程中，一边刷新http://192.168.1.200/resin-status，查看resin状态,在http://*:80 中的 Active Threads 和 Total，会一直增长，当长到512的时候不再增长，这时再刷新resin-status页面时，会发现打开很慢。原因是服务器已经达到最大连接数，在等待前面连接的释放而不能接受新的连接。 <br />
<br />
于是下载Resin 3.0.21源码，搜索 512，发现com.caucho.server.port.Port类中有以下代码： <br />
<table cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd"><font color="#555555">
            <pre>1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            </pre>
            </font></td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>  <font color="darkgreen">// default timeout</font>
            <font color="navy"><strong>private</strong></font> <font color="navy"><strong>long</strong></font> _timeout = 65000L;
            &nbsp;
            <font color="navy"><strong>private</strong></font> <font color="navy"><strong>int</strong></font> _connectionMax = 512;<font color="darkgreen">//<font color="red">就是这行，查找resin所有源码后，发现没有对这个值进行设置</font></font>
            <font color="navy"><strong>private</strong></font> <font color="navy"><strong>int</strong></font> _minSpareConnection = 16;
            &nbsp;
            <font color="navy"><strong>private</strong></font> <font color="navy"><strong>int</strong></font> _keepaliveMax = -1;
            &nbsp;
            <font color="navy"><strong>private</strong></font> <font color="navy"><strong>int</strong></font> _minSpareListen = 5;
            <font color="navy"><strong>private</strong></font> <font color="navy"><strong>int</strong></font> _maxSpareListen = 10;
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
将_connectionMax 改为 20480，然后重新编译并替换resin.jar中的Port类。 <br />
<br />
6. 重新启动Resin，再次运行TestURL进行测试，这次你会发现Threads Active 和 Total 一直变大，且可以超过512一直增大，在测试程序运行过程中刷新页面，页面响应性能还是不错的. <br />
<br />
另，测试过程中Resin会打印出 1-3次 强制执行GC的信息，属于正常。 <br />
<br />
7.待测试完毕，Threads Active 和 Total 马上降为1.Idle为9，总内存为536.87Meg 空闲内存为480.33M <br />
<br />
再经多次测试，结果一致，内存回收正常，表明当前 resin 稳定性和响应性可靠。
<img src ="http://www.blogjava.net/jelver/aggbug/183345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2008-03-03 08:47 <a href="http://www.blogjava.net/jelver/articles/183345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Resin服务器安装配置手册(Windows and Linux)  （转）</title><link>http://www.blogjava.net/jelver/articles/162397.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Thu, 22 Nov 2007 08:10:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/162397.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/162397.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/162397.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/162397.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/162397.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt"><font size="3"><strong><font face="Times New Roman">Resin服务器安装配置手册(Windows and Linux)&nbsp;&nbsp; <script src="http://blog.csdn.net/count.aspx?ID=773723&amp;Type=Rank"></script><br />
http://blog.csdn.net/zynovo/archive/2006/06/05/773723.aspx<br />
一、Windows</font><span style="font-family: 宋体">下</span><font face="Times New Roman">resin</font><span style="font-family: 宋体">的安装以及配置</span></strong></font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><strong><font face="Times New Roman">1 </font><span style="font-family: 宋体">、安装</span></strong></font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><font face="Times New Roman">1</font><span style="font-family: 宋体">）</span><span style="font-family: 宋体">安装好</span><font face="Times New Roman">JDK</font></font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><font face="Times New Roman">2</font><span style="font-family: 宋体">）</span><span style="font-family: 宋体">把</span><font face="Times New Roman">resin-3.0.x.zip</font><span style="font-family: 宋体">解压缩</span></font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><font face="Times New Roman">3</font><span style="font-family: 宋体">）</span><span style="font-family: 宋体">运行</span><font face="Times New Roman">resin-3.0.x/httpd.exe</font></font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><font face="Times New Roman">4</font><span style="font-family: 宋体">）</span><span style="font-family: 宋体">打开</span><font face="Times New Roman">http://localhost:8080</font><span style="font-family: 宋体">查看测试页面</span></font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体"><font size="3">如果正确打开，窗口会显示如下信息：</font></span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">C:"win32&gt; resin-3.0.0"bin"httpd</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">Resin 3.0.0-beta (built Thu Feb 13 18:21:13 PST 2003)</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">Copyright(c) 1998-2002 Caucho Technology. All rights reserved.</font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><font face="Times New Roman">Starting Resin on Sat</font><span style="font-family: 宋体">，</span><font face="Times New Roman"> 01 Mar 2003 19:11:52 -0500 (EST)</font></font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">[19:11:56.479] ServletServer[] starting</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">[19:11:57.000] Host[] starting</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">[19:11:58.312] Application[http://localhost:8080/doc] starting</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">[19:12:11.872] Application[http://localhost:8080/quercus] starting</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">...</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">[19:12:12.803]http listening to *:8080</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">[19:12:12.933]hmux listening to *:6802</font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><strong><font face="Times New Roman">2</font><span style="font-family: 宋体">、配置</span></strong></font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体">部署为</span><font face="Times New Roman">Windows</font><span style="font-family: 宋体">下的服务：</span></font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">The Resin Web Server can be installed as an Windows service.</font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><font face="Times New Roman">Resin</font><span style="font-family: 宋体">服务器可以被安装成为</span><font face="Times New Roman">Windows</font><span style="font-family: 宋体">的服务</span></font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体">要安装为</span><font face="Times New Roman">Windows</font><span style="font-family: 宋体">的服务，可以用下面的命令</span></font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">C:"&gt; resin-3.0.x"bin"httpd -install -conf conf/myconf.conf</font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体">这样</span><font face="Times New Roman">Resin</font><span style="font-family: 宋体">就会作为服务随着机器的启动而自动开启。</span></font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体"><font size="3">要想移除此服务</font></span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">C:"&gt; resin-3.0.x"bin"httpd -remove</font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体">你也可以用如下命令开启和关闭</span><font face="Times New Roman">Resin</font><span style="font-family: 宋体">的服务：</span></font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">C:"&gt; net start resin</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">...</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">C:"&gt; net stop resin</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体"><font size="3">多服务起配置：</font></span></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体">使用参数</span><font face="Times New Roman"> -install-as foo</font><span style="font-family: 宋体">来指定一个特定的服务名</span></font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">C:"&gt; resin-3.0.x"bin"httpd -install-as ResinA -conf conf/myconf.conf</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">-server a</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">C:"&gt; net start ResinA</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体"><font size="3">注意：</font></span></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体">有一些</span><font face="Times New Roman">JDK</font><span style="font-family: 宋体">存在这样的</span><font face="Times New Roman">Bug</font><span style="font-family: 宋体">，当管理员帐户注销以后服务也会随着关闭，解决办法是在安装的时候使用参数</span><span style="font-family: 宋体">&#8211;</span><font face="Times New Roman">Xrs:</font></font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">C:"&gt; resin3.0.0/httpd.exe -install &#8211;Xrs</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3"><strong>二、Linux<span style="font-family: 宋体">下resin<span style="font-family: 宋体">的安装以及配置：</span></strong></font></span></p>
<p style="margin: 0cm 0cm 0pt"><strong>1<span style="font-family: 宋体">、安装</span></strong></p>
<p style="margin: 0cm 0cm 0pt">1<span style="font-family: 宋体">）</span> <span style="font-family: 宋体">安装</span> JDK 1.4 </p>
<p style="margin: 0cm 0cm 0pt">2） <span style="font-family: 宋体">确定环境变量</span>JAVA_HOME<span style="font-family: 宋体">设置正确</span></p>
<p style="margin: 0cm 0cm 0pt">3） <span style="font-family: 宋体">安装</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">单独运行：</span></p>
<p style="margin: 0cm 0cm 0pt"># tar zxvf resin-3.0.4.tar.gz </p>
<p style="margin: 0cm 0cm 0pt"># mv resin03.0.6 /usr/local/resin</p>
<p style="margin: 0cm 0cm 0pt">#cd /usr/local/resin</p>
<p style="margin: 0cm 0cm 0pt"># ./configure </p>
<p style="margin: 0cm 0cm 0pt"># make </p>
<p style="margin: 0cm 0cm 0pt"># make install</p>
<p style="margin: 0cm 0cm 0pt">#cd bin</p>
<p style="margin: 0cm 0cm 0pt">#./httpd.sh start</p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体"><strong>自动启动：</strong></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">在</span>/etc/rc.d/rc.local<span style="font-family: 宋体">中加入如下语句：</span></p>
<p style="margin: 0cm 0cm 0pt">/usr/local/resin/bin/httpd.sh start</p>
<p style="margin: 0cm 0cm 0pt"><strong><span style="font-family: 宋体">和</span>Apache<span style="font-family: 宋体">整合：</span></strong></p>
<p style="margin: 0cm 0cm 0pt">1）Apache<span style="font-family: 宋体">安装</span><br />
#&nbsp;tar&nbsp;zxvf&nbsp;httpd-2.49.tar.gz <br />
#&nbsp;cd&nbsp;httpd-2.49 <br />
#&nbsp;./configure&nbsp;--prefix=/usr/local/httpd&nbsp;--enable-modules=so --enable-so&nbsp;<br />
--prefix<br />
--enable-modules<span style="font-family: 宋体">用来指定系统允许使用的功能扩展模块的类型，这里指定为</span>so<span style="font-family: 宋体">类型。</span><br />
--enabel-so <span style="font-family: 宋体">用来指定允许使用</span>DSO<span style="font-family: 宋体">（</span>Dynamic Share Object<span style="font-family: 宋体">动态共享对象）。</span><br />
#&nbsp;make <br />
#&nbsp;make&nbsp;install<br />
<span style="font-family: 宋体">设置</span>apache<span style="font-family: 宋体">自动启动：</span><br />
<span style="font-family: 宋体">将</span>Apache<span style="font-family: 宋体">的启动文件</span>apachectl<span style="font-family: 宋体">写入</span>rc.local<span style="font-family: 宋体">中</span><br />
/usr/local/httpd/bin/apachectl start</p>
<p style="margin: 0cm 0cm 0pt">2）Resin<span style="font-family: 宋体">安装</span></p>
<p style="margin: 0cm 0cm 0pt">#&nbsp;tar&nbsp;zxvf&nbsp;resin-3.0.4.tar.gz <br />
#&nbsp;cd&nbsp;resin-3.0.4 <br />
#&nbsp;./configure&nbsp;--prefix=/usr/local/resin&nbsp;--with-apache=/usr/local/httpd <br />
#&nbsp;make <br />
#&nbsp;make&nbsp;install<br />
<span style="font-family: 宋体">此时已经生成</span>Resin<span style="font-family: 宋体">连接</span>Apache2<span style="font-family: 宋体">的</span>.so<span style="font-family: 宋体">文件了，其存在与</span>$APACHE_HOMEe/modules/mod_caucho.so</p>
<p style="margin: 0cm 0cm 0pt">conf/httpd.conf<span style="font-family: 宋体">中就会多出以下语句：</span></p>
<p style="margin: 0cm 0cm 0pt">LoadModule caucho_modules modules/mod_caucho.so&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;ResinConfigServer localhost 6802&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 10.5pt; font-family: 宋体">分别先后启动</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'">Resin</span><span style="font-size: 10.5pt; font-family: 宋体">和</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'">Apache <br />
</span><span style="font-size: 10.5pt; font-family: 宋体">访问</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'">http://hostname/caucho-status </span><span style="font-size: 10.5pt; font-family: 宋体">可以看到</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'">Resin</span><span style="font-size: 10.5pt; font-family: 宋体">的状态页面</span></p>
<span style="font-size: 10.5pt; font-family: 宋体">
<p style="margin: 0cm 0cm 0pt"><strong><font face="Times New Roman">2 </font><span style="font-family: 宋体">、配置</span></strong></p>
<p style="margin: 0cm 0cm 0pt"><strong><font face="Times New Roman">1</font><span style="font-family: 宋体">）</span><font face="Times New Roman">linux</font><span style="font-family: 宋体">下使用</span><font face="Times New Roman">resin</font><span style="font-family: 宋体">的单服务器配置</span></strong></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">使用单服务器方案，只要安装完毕，配置一下</span><font face="Times New Roman">Resin</font><span style="font-family: 宋体">的</span><font face="Times New Roman">resin.conf</font><span style="font-family: 宋体">文件和</span><font face="Times New Roman">app_default.xml</font><span style="font-family: 宋体">文件就可以了，</span><font face="Times New Roman">resin.conf</font><span style="font-family: 宋体">文件中需要配置两处，一是端口号，另一处是</span><font face="Times New Roman">Web</font><span style="font-family: 宋体">程序存放目录，</span><font face="Times New Roman">app_default.xml</font><span style="font-family: 宋体">内可配置默认首页的搜索顺序。由于原网站使用多个端口配置，所以单服务器只能用于做单个站点的测试使用。</span></p>
<p style="margin: 0cm 0cm 0pt"><strong><font face="Times New Roman">2</font><span style="font-family: 宋体">）</span><font face="Times New Roman">linux</font><span style="font-family: 宋体">下使用</span><font face="Times New Roman">resin</font><span style="font-family: 宋体">的多服务器配置以及多实例开机自动运行的配置</span></strong></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><span style="font-family: 宋体">有时候需要运行多个服务器以在同一个ＩＰ上监听多个端口，这时候就需要使用单独的</span><font face="Times New Roman">Resin</font><span style="font-family: 宋体">服务器运行多个实例，以监听多个端口来部署多个</span><font face="Times New Roman">Web</font><span style="font-family: 宋体">站点。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">可以有如下两种配置方法：</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体"><strong><em>第一种方法：</em></strong></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">这种方法为多次使用</span><font face="Times New Roman">httpd.sh</font><span style="font-family: 宋体">的参数指定配置文件和运行时的</span><font face="Times New Roman">pid</font><span style="font-family: 宋体">文件，实现多个实例的运行。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">使用的命令行如下所示：</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">$RESIN_HOME/bin/httpd.sh -conf conf/resin1.conf -pid resin1.pid start</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">解释：</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -conf&nbsp;</font><span style="font-family: 宋体">选项为选择此服务器实例所用的配置文件，在这个文件里面配置不同的端口和主目录。</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">-pid&nbsp;</font><span style="font-family: 宋体">进程</span><font face="Times New Roman">id</font><span style="font-family: 宋体">及所用</span><font face="Times New Roman">pid</font><span style="font-family: 宋体">文件。</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start</font><span style="font-family: 宋体">启动。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">用以上命令，在建立多个服务器配置文件以后就可以手工打开多个服务器实例。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">把这些语句加到</span><font face="Times New Roman">/etc/rc.d/rc.local</font><span style="font-family: 宋体">中就可以实现开机自动启动了。</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman"><strong><em>&nbsp;</em></strong></font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体"><strong><em>第二种方法：</em></strong></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">这种方法使用</span><font face="Times New Roman">Chkconfig</font><span style="font-family: 宋体">命令设置多服务器自动启动，运行于不同</span><span style="font-family: 宋体">系统运行级别的</span><span style="font-family: 宋体">后台方式。并使他们成为可在图形界面下管理的服务。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">设置好</span><font face="Times New Roman">JAVA_HOME</font><span style="font-family: 宋体">环境变量后将</span><font face="Times New Roman">RESIN</font><span style="font-family: 宋体">解包到</span><font face="Times New Roman">/home/resin</font><span style="font-family: 宋体">下，执行编译脚本</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">#tar zxf resin-version.tar.gz</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">#mv resin-version /home/resin</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">#cd /home/resin/</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">#./configure</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">#make</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">#make install</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">将</span><font face="Times New Roman">make install</font><span style="font-family: 宋体">生成的</span><font face="Times New Roman">$RESIN_HOME/contrib/init.resin</font><span style="font-family: 宋体">复制到</span><font face="Times New Roman">/etc/rc.d/init.d/</font><span style="font-family: 宋体">目录下改名为</span><font face="Times New Roman">resinx</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">修改</span><font face="Times New Roman">resin</font><span style="font-family: 宋体">文件的内容（三处）</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">（</span><font face="Times New Roman">1</font><span style="font-family: 宋体">）</span><font face="Times New Roman">JAVA</font><span style="font-family: 宋体">环境设置</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><span style="font-family: 宋体">找到以下代码段</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JAVA_HOME=/usr/java</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">RESIN_HOME=/usr/local/resin</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">并修改他们为相应的目录，第一个为</span><font face="Times New Roman">JDK</font><span style="font-family: 宋体">安装主目录，第二个为</span><font face="Times New Roman">Resin</font><span style="font-family: 宋体">安转主目录。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">（</span><font face="Times New Roman">2</font><span style="font-family: 宋体">）</span><font face="Times New Roman">PID=$RESIN_HOME/resin.pid</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">修改为</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">PID=$RESIN_HOME/resin1.pid</font><span style="font-family: 宋体">（很清楚，要不一样的</span><font face="Times New Roman">pid</font><span style="font-family: 宋体">）</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">（</span><font face="Times New Roman">3</font><span style="font-family: 宋体">）、找到程序段</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">start)</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo -n "Starting resin: "</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if test -n "$USER"; then</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;su $USER -c "$EXE -pid $PID start $ARGS"</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;$EXE -pid $PID start $ARGS</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">修改为</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">start)</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo -n "Starting resin: "</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if test -n "$USER"; then</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;su $USER -c "$EXE -conf $RESIN_HOME/conf/resin1.conf -pid $PID start $ARGS"</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;$EXE -conf $RESIN_HOME/conf/resin1.conf -pid $PID start $ARGS</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fi</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">其实上面的程序和第一部分是一样的，只是用脚本来运行了。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">最后</span><font face="Times New Roman">chmod +x resin1</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">用上面的方法拷贝出</span><font face="Times New Roman">resin2</font><span style="font-family: 宋体">，</span><font face="Times New Roman">resin3.....</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">chmod +x resin1</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">chmod +x resin2</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">......</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">命令为：</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">cp contrib/init.resin /etc/rc.d/init.d/resin1</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">vi /etc/rc.d/init.d/resin1</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">i</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">:wq</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">chmod +x /etc/rc.d/init.d/resin1</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">如此你想运行几个服务器实例创建几个这样的文件</span><font face="Times New Roman">(resinx)</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">修改</span><font face="Times New Roman">resin</font><span style="font-family: 宋体">中的一些设置：</span><font face="Times New Roman">JAVA_HOME RESIN_HOME USER</font><span style="font-family: 宋体">等，</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">将</span><font face="Times New Roman">resin</font><span style="font-family: 宋体">服务在不同的启动级中设置成自启动</span><font face="Times New Roman">:</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">#/sbin/chkconfig resin1 reset </font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">#/sbin/chkconfig resin2 reset </font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">......</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">创建不同的配置文件</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">注意每一个配置文件必须保持三处不同：</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">(1)srun</font><span style="font-family: 宋体">（负载平衡配置）部分端口号必须不同，用不同的</span><font face="Times New Roman">ip</font><span style="font-family: 宋体">地址也可以。</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">在原文件的如下部分：</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&lt;cluster&gt;</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;srun server-id="" host="127.0.0.1" port="6802"/&gt;</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&lt;/cluster&gt;</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">(2)</font><span style="font-family: 宋体">默认主文件目录要设为不同，不然就失去了多个实例的意义，不然的话还不如用负载平衡来提高性能</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&lt;web-app id="/" document-directory="webapps/ROOT"/&gt;</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">(3)</font><span style="font-family: 宋体">服务器的端口号必须不同。</span></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&lt;http server-id="" host="*" port="8080"/&gt;</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">&nbsp;</font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-family: 宋体">这样系统启动的时候，</span><font face="Times New Roman">resin</font><span style="font-family: 宋体">就会在后台运行多个实例了，效果和第一步一样。</span></span></p>
<img src ="http://www.blogjava.net/jelver/aggbug/162397.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2007-11-22 16:10 <a href="http://www.blogjava.net/jelver/articles/162397.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下的resin定时重启</title><link>http://www.blogjava.net/jelver/articles/149647.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Sat, 29 Sep 2007 09:55:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/149647.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/149647.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/149647.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/149647.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/149647.html</trackback:ping><description><![CDATA[&nbsp;配置crontab： &nbsp; <br />
&nbsp; #crontab &nbsp; -e &nbsp; <br />
&nbsp; 添加如下一行： &nbsp; <br />
&nbsp; 0&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp; * &nbsp; * &nbsp; * &nbsp; /usr/local/resin-3.0.12/bin/httpd.sh &nbsp; restart &nbsp; <br />
&nbsp; 表示每天凌晨8点自动重启resin &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 此时要注意： &nbsp; <br />
&nbsp; resin自动重启时是不读入环境变量的！！！ &nbsp; <br />
&nbsp; 因此我们要在resin的启动<nobr oncontextmenu="return false;" onmousemove="kwM(0);" id="key0" onmouseover="kwE(event,0, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">文件</nobr>httpd.sh中加上环境变量！ &nbsp; <br />
&nbsp; #vi &nbsp; httpd.sh &nbsp; <br />
&nbsp; 注意一定要把#! &nbsp; /bin/sh放在文件的第一行，否则将无法手动执行httpd.sh文件 &nbsp; <br />
&nbsp; 然后在下面添加如下几行： &nbsp; <br />
&nbsp; CLASSPATH=...... &nbsp; <br />
&nbsp; LANG=...... &nbsp; <br />
&nbsp; JAVA_HOME=...... &nbsp; <br />
&nbsp; PATH=...... &nbsp; <br />
&nbsp; export &nbsp; CLASSPATH &nbsp; LANG &nbsp; JAVA_HOME &nbsp; PATH &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 注意最后一定要export各个变量，否则无法生效 &nbsp; <br />
&nbsp; 这四个变量的值可以通过这个命令： &nbsp; <br />
&nbsp; #env &nbsp; <br />
&nbsp; 来查看当前<nobr oncontextmenu="return false;" onmousemove="kwM(2);" id="key2" onmouseover="kwE(event,2, this);" style="color: #6600ff; border-bottom: #6600ff 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">机器</nobr>上的配置，然后拷贝过去就可以。 &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <br />
&nbsp; 我的blog：http://farmerinchina.blog.sohu.com 
<img src ="http://www.blogjava.net/jelver/aggbug/149647.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2007-09-29 17:55 <a href="http://www.blogjava.net/jelver/articles/149647.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL与Resin版本的问题（转）</title><link>http://www.blogjava.net/jelver/articles/143975.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Mon, 10 Sep 2007 06:12:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/143975.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/143975.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/143975.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/143975.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/143975.html</trackback:ping><description><![CDATA[<div class="postTitle"><a href="http://my.donews.com/web20team/2006/05/23/jstl%e4%b8%8eresin%e7%89%88%e6%9c%ac%e7%9a%84%e9%97%ae%e9%a2%98/" rel="bookmark">JSTL与Resin版本的问题</a></div>
<div class="postText">
<p>JSTL1.0是需要Servlet2.3和JSP1.2的。<br />
JSTL1.1是需要Servlet2.4和JSP2.0的。<br />
&nbsp;<br />
Resin从2.1.2版本开始自己实现了JSTL的core和fmt两个TAGLIB。<br />
&nbsp;<br />
使用Resin自带的JSTL<br />
不需要拷贝JAR和TLD文件，也不需要配置web.xml。<br />
只要在页面引用就可以了，注意与标准JSTL1.1的区别。<br />
http://java.sun.com/jstl/core</a>&#8221; prefix=&#8221;c&#8221;%&gt;<br />
http://java.sun.com/jstl/fmt</a>&#8221; prefix=&#8221;fmt&#8221;%&gt;<br />
http://java.sun.com/jsp/jstl/functions</a>&#8221; prefix=&#8221;fn&#8221;%&gt;<br />
&nbsp;<br />
感觉速度比较快。<br />
如果要禁止自带的JSTL，需要在Resin的配置文件里设置</p>
<p>&nbsp;<br />
&nbsp; &#8230;</p>
<p>使用标准的JSTL1.1<br />
需要将JAR包拷贝到WEB-INF/lib目录下，不需要拷贝TLD文件，不需要配置web.xml。<br />
在页面这样引用<br />
http://java.sun.com/jsp/jstl/core</a>&#8221; prefix=&#8221;c&#8221; %&gt;<br />
http://java.sun.com/jsp/jstl/fmt</a>&#8221; prefix=&#8221;fmt&#8221; %&gt;</p>
<p>使用标准的JSTL1.0<br />
需要将JAR包拷贝到WEB-INF/lib目录下，拷贝需要的TLD文件。<br />
配置web.xml<br />
&nbsp;<br />
&nbsp; jstl-c<br />
&nbsp; /WEB-INF/tld/c.tld<br />
&nbsp;<br />
&nbsp;<br />
&nbsp; jstl-fmt<br />
&nbsp; /WEB-INF/tld/fmt.tld<br />
&nbsp;<br />
在页面这样引用</p>
<p>&nbsp;<br />
如果没有禁止Resin自带的JSTL，然后自己又在Resin2.1.16里配置了标准JSTL1.0。结果可能导致fmt失效。</p>
</div>
<img src ="http://www.blogjava.net/jelver/aggbug/143975.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2007-09-10 14:12 <a href="http://www.blogjava.net/jelver/articles/143975.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Resin定时备份日志</title><link>http://www.blogjava.net/jelver/articles/135176.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Wed, 08 Aug 2007 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/135176.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/135176.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/135176.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/135176.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/135176.html</trackback:ping><description><![CDATA[<p>通过设置resin.conf文件来实现将日志以每日或每周的方式来存放，以便查看日志信息，<br>具体操作很简单，只需要参看红色字体位置的说明设置即可（共两处）<br><br>&lt;!--<br>&nbsp;&nbsp; - Resin 3.0 configuration file.<br>&nbsp; --&gt;<br>&lt;resin xmlns="<a href="http://caucho.com/ns/resin">http://caucho.com/ns/resin</a>"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:resin="<a href="http://caucho.com/ns/resin/core">http://caucho.com/ns/resin/core</a>"&gt;<br>&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp; - Logging configuration for the JDK logging API.<br>&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;log name="" level="info" path="stdout:" timestamp="[%H:%M:%S.%s] "/&gt;<br>&nbsp; &lt;log name="com.caucho.java" level="config" path="stdout:"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timestamp="[%H:%M:%S.%s] "/&gt;<br>&nbsp; &lt;log name="com.caucho.loader" level="config" path="stdout:"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timestamp="[%H:%M:%S.%s] "/&gt;</p>
<p>&lt;!--备份每日日志，并且压缩为.gz格式文件减少占用容量，如果一周备份一次则需要将&#8220;1D&#8221;改为&#8220;1W&#8221;--&gt;<br><span style="COLOR: red">&lt;log name="" level="info" path="log/stdout.log" timestamp="[%H:%M:%S.%s] "<br>&nbsp;&nbsp;&nbsp;&nbsp; archive-format="stdout.log.%Y-%m-%d.gz"<br>&nbsp;&nbsp;&nbsp;&nbsp; rollover-period="1D"/&gt;</span></p>
<p><br>&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp; - For production sites, change dependency-check-interval to something<br>&nbsp;&nbsp;&nbsp;&nbsp; - like 600s, so it only checks for updates every 10 minutes.<br>&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;dependency-check-interval&gt;2s&lt;/dependency-check-interval&gt;</p>
<p>&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp; - You can change the compiler to "javac" or jikes.<br>&nbsp;&nbsp;&nbsp;&nbsp; - The default is "internal" only because it's the most<br>&nbsp;&nbsp;&nbsp;&nbsp; - likely to be available.<br>&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;javac compiler="internal" args=""/&gt;</p>
<p>&nbsp; &lt;!-- Security providers.<br>&nbsp;&nbsp;&nbsp;&nbsp; - &lt;security-provider&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp; com.sun.net.ssl.internal.ssl.Provider<br>&nbsp;&nbsp;&nbsp;&nbsp; - &lt;/security-provider&gt;<br>&nbsp;&nbsp;&nbsp; --&gt;</p>
<p>&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp; - If starting bin/resin as root on Unix, specify the user name<br>&nbsp;&nbsp;&nbsp;&nbsp; - and group name for the web server user.<br>&nbsp;&nbsp;&nbsp;&nbsp; -<br>&nbsp;&nbsp;&nbsp;&nbsp; - &lt;user-name&gt;resin&lt;/user-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; - &lt;group-name&gt;resin&lt;/group-name&gt;<br>&nbsp;&nbsp;&nbsp; --&gt;</p>
<p>&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp; - Configures threads shared among all HTTP and SRUN ports.<br>&nbsp;&nbsp;&nbsp; --&gt; <br>&nbsp; &lt;thread-pool&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!-- Maximum number of threads. --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;thread-max&gt;1024&lt;/thread-max&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!-- Minimum number of spare connection threads. --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;spare-thread-min&gt;25&lt;/spare-thread-min&gt;<br>&nbsp; &lt;/thread-pool&gt;</p>
<p>&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp; - Configures the minimum free memory allowed before Resin<br>&nbsp;&nbsp;&nbsp;&nbsp; - will force a restart.<br>&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;min-free-memory&gt;1M&lt;/min-free-memory&gt;</p>
<p>&nbsp; &lt;server&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!-- adds all .jar files under the resin/lib directory --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;class-loader&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tree-loader path="${resin.home}/lib"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tree-loader path="${server.root}/lib"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/class-loader&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!-- Configures the keepalive --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;keepalive-max&gt;500&lt;/keepalive-max&gt;<br>&nbsp;&nbsp;&nbsp; &lt;keepalive-timeout&gt;120s&lt;/keepalive-timeout&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;resin:if test="${resin.isProfessional()}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;select-manager enable="true"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/resin:if&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!-- listen to the http ports only after the server has started. --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;bind-ports-after-start/&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!-- The http port --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;http server-id="" host="*" port="6060"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - SSL port configuration:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - &lt;http port="8443"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; &lt;openssl&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp; &lt;certificate-file&gt;keys/gryffindor.crt&lt;/certificate-file&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp; &lt;certificate-key-file&gt;keys/gryffindor.key&lt;/certificate-key-file&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp; &lt;password&gt;test123&lt;/password&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; &lt;/openssl&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - &lt;/http&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - The local cluster, used for load balancing and distributed<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - backup.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;!--cluster&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;srun server-id="" host="127.0.0.1" port="6806"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/cluster--&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Configures the persistent store for single-server or clustered<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - in Resin professional.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;resin:if test="${resin.isProfessional()}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;persistent-store type="cluster"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init path="session"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/persistent-store&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/resin:if&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Enables/disables exceptions when the browser closes a connection.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;ignore-client-disconnect&gt;true&lt;/ignore-client-disconnect&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - For security, use a different cookie for SSL sessions.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - &lt;ssl-session-cookie&gt;SSL_JSESSIONID&lt;/ssl-session-cookie&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Enables the cache (available in Resin Professional) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;resin:if test="${isResinProfessional}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache path="cache" memory-size="8M"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/resin:if&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Enables periodic checking of the server status.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - With JDK 1.5, this will ask the JDK to check for deadlocks.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - All servers can add &lt;url&gt;s to be checked.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;resin:if test="${isResinProfessional}"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ping&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- &lt;url&gt;http://localhost:8080/test-ping.jsp&lt;/url&gt; --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ping&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/resin:if&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Defaults applied to each web-app.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;web-app-default&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Extension library for common jar files.&nbsp; The ext is safe<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - even for non-classloader aware jars.&nbsp; The loaded classes<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - will be loaded separately for each web-app, i.e. the class<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - itself will be distinct.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;class-loader&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tree-loader path="${server.root}/ext-webapp"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/class-loader&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Sets timeout values for cacheable pages, e.g. static pages.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache-mapping url-pattern="/" expires="5s"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache-mapping url-pattern="*.gif" expires="60s"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;cache-mapping url-pattern="*.jpg" expires="60s"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Servlet to use for directory display.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet servlet-name="directory"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; servlet-class="com.caucho.servlets.DirectoryServlet"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Enable EL expressions in Servlet and Filter init-param<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;allow-servlet-el/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - for security, disable session URLs by default.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;session-config&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;enable-url-rewriting&gt;true&lt;/enable-url-rewriting&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;save-only-on-shutdown&gt;true&lt;/save-only-on-shutdown&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;file-store&gt;${resin.home}/webapps&lt;/file-store&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ignore-serialization-errors&gt;true&lt;/ignore-serialization-errors&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/session-config&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - For security, set the HttpOnly flag in cookies.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - &lt;cookie-http-only/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/web-app-default&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Sample database pool configuration<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - The JDBC name is java:comp/env/jdbc/test<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;database&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jndi-name&gt;jdbc/mysql&lt;/jndi-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;driver type="org.gjt.mm.mysql.Driver"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url&gt;jdbc:mysql://localhost:3306/test&lt;/url&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;user&gt;&lt;/user&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;password&gt;&lt;/password&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/driver&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prepared-statement-cache-size&gt;8&lt;/prepared-statement-cache-size&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;max-connections&gt;20&lt;/max-connections&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;max-idle-time&gt;30s&lt;/max-idle-time&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/database&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Default host configuration applied to all virtual hosts.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;host-default&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;class-loader&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;compiling-loader path="webapps-/WEB-INF/classes"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;library-loader path="webapps-/WEB-INF/lib"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/class-loader&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - With another web server, like Apache, this can be commented out<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - because the web server will log this information.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp; &lt;!--查看上面红色字体的说明<br>--&gt;<br><span style="COLOR: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;access-log path="logs/access.log"&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=#ff0000> archive-format="stdout.log.%Y-%m-%d.gz"</font><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rollover-period="1D"/&gt;</span>&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- creates the webapps directory for .war expansion --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;web-app-deploy path="webapps-"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- creates the deploy directory for .ear expansion --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ear-deploy path="deploy"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ear-default&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- Configure this for the ejb server<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - &lt;ejb-server&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; &lt;config-directory&gt;WEB-INF&lt;/config-directory&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp; &lt;data-source&gt;jdbc/test&lt;/data-source&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - &lt;/ejb-server&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ear-default&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/ear-deploy&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- creates the deploy directory for .rar expansion --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;resource-deploy path="deploy"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- creates a second deploy directory for .war expansion --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;web-app-deploy path="deploy"/&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/host-default&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!-- includes the web-app-default for default web-app behavior --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;resin:import path="${resin.home}/conf/app-default.xml"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!-- configures a deployment directory for virtual hosts --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;host-deploy path="hosts"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;host-default&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;resin:import path="host.xml" optional="true"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/host-default&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/host-deploy&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;!-- configures the default host, matching any host name --&gt;<br>&nbsp;&nbsp;&nbsp; &lt;host id="" root-directory="."&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - configures an explicit root web-app matching the<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - webapp's ROOT<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--web-app id="/" document-directory="webapps/ROOT"/--&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Administration application /resin-admin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - password is the md5 hash of the password.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - localhost is true to limit access to the localhost<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;resin:set var="resin_admin_password"&nbsp; default=""/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;resin:set var="resin_admin_localhost" default="true"/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--web-app id="/resin-admin" document-directory="${resin.home}/php/admin"/--&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;web-app id="/" document-directory="webapps/job"&gt;</p>
<p>&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/web-app&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--web-app id="resin-doc" document-directory="webapps/resin-doc"/--&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &lt;/host&gt;<br>&nbsp; &lt;/server&gt;<br>&lt;/resin&gt;</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/jelver/aggbug/135176.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2007-08-08 10:35 <a href="http://www.blogjava.net/jelver/articles/135176.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache+tomcat+mysql 负载平衡和集群(zhuan)</title><link>http://www.blogjava.net/jelver/articles/113258.html</link><dc:creator>都市淘沙者</dc:creator><author>都市淘沙者</author><pubDate>Tue, 24 Apr 2007 09:01:00 GMT</pubDate><guid>http://www.blogjava.net/jelver/articles/113258.html</guid><wfw:comment>http://www.blogjava.net/jelver/comments/113258.html</wfw:comment><comments>http://www.blogjava.net/jelver/articles/113258.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jelver/comments/commentRss/113258.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jelver/services/trackbacks/113258.html</trackback:ping><description><![CDATA[前言：<br>公司开发了一个网站，估计最高在线人数是3万，并发人数最多100人。开发的网站是否能否承受这个压力，如何确保网站的负荷没有问题，经过研究决定如下：<br>（1） 采用负载平衡和集群技术，初步机构采用Apache+Tomcat的机群技术。<br>（2） 采用压力测试工具，测试压力。工具是Loadrunner。<br>硬件环境搭建：<br>为了能够进行压力测试，需要搭建一个环境。刚开始时，测试在公司局域网内进行，但很快发现了一个问题，即一个脚本的压力测试结果每次都不一样，并且差别很大。原来是受公司网络的影响，于是决定搭建一个完全隔离的局域网测试。搭建后的局域网配置如下：<br>（1） 网络速度：100M<br>（2） 三台服务器：<br>负载服务器 ：操作系统windows2003，<br>Tomcat服务器：操作系统windows2000 Professional<br>数据库服务器：操作系统windows2000 Professional<br>三台机器的cpu 2.4 G, 内存 1G。<br>软件环境搭建：<br>软件的版本如下：<br>Apache 版本：2.054，<br>Tomcat5.0.30,<br>mysql ：4.1.14.<br>JDK1.5<br>压力测试工具：Loadrunner7.8。
<p><br>负载平衡方案如下：<br>一台机器（操作系统2003）安装apache，作为负载服务器，并安装tomcat作为一个worker；一个单独安装tomcat，作为第二个worker；剩下的一台单独作为数据库服务器。<br>Apache和tomcat的负载平衡采用JK1.2.14（没有采用2.0，主要是2.0不再维护了）。<br>集群方案：<br>采用Tomcat本身的集群方案。在server.xml配置。<br>压力测试问题：<br>压力测试后，发现了一些问题，现一一列出来：<br>（1） 采用Tocmat集群后，速度变得很慢。因为集群后，要进行session复制，导致速度较慢。Tomcatd的复制，目前不支持application复制。复制的作用，主要用来容错的，即一台机器有故障后，apache可以把请求自动转发到另外一个机器。在容错和速度的考虑上，我们最终选择速度，去掉了Tomcat集群。<br>（2） 操作系统最大并发用户的限制：<br>为了采用网站的压力，我们开始的时候，仅测试Tomcat的最大负载数。Tomcat服务器安装的操作系统是windows2000 Professional。当我们用压力测试工具，并发测试时，发现只要超过15个并发用户，会经常出现无法连接服务器的情况。经过研究，发现是操作系统的问题：windows2000 Professional 支持的并发访问用户有限，默认的好像是15个。于是我们把操作系统全部采用windows2003 server版本。<br>（3） 数据库连接池的问题：<br>测试数据库连接性能时，发现数据库连接速度很慢。每增加一些用户，连接性能就差了很多。我们采用的数据库连接池是DBCP，默认的初始化为50个，应该不会很慢吧。查询数据库的连接数，发现初始化，只初始化一个连接。并发增加一个用户时，程序就会重新创建一个连接，导致连接很慢。原因就在这里了。如何解决呢？偶尔在JDK1.4下的Tomcat5.0.30下执行数据库连接压力测试，发现速度很快，程序创建数据库连接的速度也是很快的。看来JDK1.5的JDBC驱动程序有问题。于是我们修改 JDK的版本为1.4.</p>
<p>（4） C3P0和DBCP<br>C3P0是Hibernate3.0默认的自带数据库连接池，DBCP是Apache开发的数据库连接池。我们对这两种连接池进行压力测试对比，发现在并发300个用户以下时，DBCP比C3P0平均时间快1秒左右。但在并发400个用户时，两者差不多。</p>
<p>速度上虽然DBCP比C3P0快些，但是有BUG：当DBCP建立的数据库连接，因为某种原因断掉后，DBCP将不会再重新创建新的连接，导致必须重新启动Tomcat才能解决问题。DBCP的BUG使我们决定采用C3P0作为数据库连接池。<br>调整后的方案：<br>操作系统Windows2003 server版本<br>JDK1.4<br>Tomcat 5.0.30<br>数据库连接池C3P0<br>仅采用负载平衡，不采用集群。<br>软件的配置：<br>Apache配置：主要配置httpd.conf和新增加的文件workers.properties<br>Httpd.conf：<br>#一个连接的最大请求数量<br>MaxKeepAliveRequests 10000 <br>#NT环境，只能配置这个参数来提供性能<br>&lt;IfModule mpm_winnt.c&gt; <br>#每个进程的线程数，最大1920。NT只启动父子两个进程，不能设置启动多个进程<br>ThreadsPerChild 1900 <br>每个子进程能够处理的最大请求数<br>MaxRequestsPerChild 10000<br>&lt;/IfModule&gt;</p>
<p># 加载mod_jk<br>#<br>LoadModule jk_module modules/mod_jk.so<br>#<br># 配置mod_jk<br>#<br>JkWorkersFile conf/workers.properties<br>JkLogFile logs/mod_jk.log<br>JkLogLevel info<br>#请求分发，对jsp文件，.do等动态请求交由tomcat处理<br>DocumentRoot "C:/Apache/htdocs"<br>JkMount /*.jsp loadbalancer<br>JkMount /*.do loadbalancer<br>JkMount /servlet/* loadbalancer<br>#关掉主机Lookup，如果为on，很影响性能，可以有10多秒钟的延迟。<br>HostnameLookups Off<br>#缓存配置<br>LoadModule cache_module modules/mod_cache.so<br>LoadModule disk_cache_module modules/mod_disk_cache.so<br>LoadModule mem_cache_module modules/mod_mem_cache.so</p>
<p>&lt;IfModule mod_cache.c&gt;<br>CacheForceCompletion 100<br>CacheDefaultExpire 3600<br>CacheMaxExpire 86400<br>CacheLastModifiedFactor 0.1<br><br>&lt;IfModule mod_disk_cache.c&gt;<br>CacheEnable disk /<br>CacheRoot c:/cacheroot<br>CacheSize 327680<br>CacheDirLength 4<br>CacheDirLevels 5<br>CacheGcInterval 4<br>&lt;/IfModule&gt;<br>&lt;IfModule mod_mem_cache.c&gt;<br>CacheEnable mem /<br>MCacheSize 8192<br>MCacheMaxObjectCount 10000<br>MCacheMinObjectSize 1<br>MCacheMaxObjectSize 51200<br>&lt;/IfModule&gt;<br>&lt;/IfModule&gt;<br>worker. Properties文件<br>#<br># workers.properties ，可以参考<br><a href="http://jakarta.apache.org/tomcat/connectors-doc/config/workers.html"><u><font color=#0000ff>http://jakarta.apache.org/tomcat/connectors-doc/config/workers.html</font></u></a> <br># In Unix, we use forward slashes:<br>ps=</p>
<p># list the workers by name</p>
<p>worker.list=tomcat1, tomcat2, loadbalancer</p>
<p># ------------------------<br># First tomcat server<br># ------------------------<br>worker.tomcat1.port=8009<br>worker.tomcat1.host=localhost<br>worker.tomcat1.type=ajp13</p>
<p># Specify the size of the open connection cache.<br>#worker.tomcat1.cachesize</p>
<p>#<br># Specifies the load balance factor when used with<br># a load balancing worker.<br># Note:<br># ----&gt; lbfactor must be &gt; 0<br># ----&gt; Low lbfactor means less work done by the worker.<br>worker.tomcat1.lbfactor=900</p>
<p># ------------------------<br># Second tomcat server<br># ------------------------<br>worker.tomcat1.port=8009<br>worker.tomcat1.host=202.88.8.101<br>worker.tomcat1.type=ajp13</p>
<p># Specify the size of the open connection cache.<br>#worker.tomcat1.cachesize</p>
<p>#<br># Specifies the load balance factor when used with<br># a load balancing worker.<br># Note:<br># ----&gt; lbfactor must be &gt; 0<br># ----&gt; Low lbfactor means less work done by the worker.<br>worker.tomcat1.lbfactor=2000</p>
<p># ------------------------<br># Load Balancer worker<br># ------------------------</p>
<p>#<br># The loadbalancer (type lb) worker performs weighted round-robin<br># load balancing with sticky sessions.<br># Note:<br># ----&gt; If a worker dies, the load balancer will check its state<br># once in a while. Until then all work is redirected to peer<br># worker.<br>worker.loadbalancer.type=lb<br>worker.loadbalancer.balanced_workers=tomcat1,tomcat2</p>
<p>#<br># END workers.properties<br>#</p>
<p>Tomcat1配置:<br>&lt;!--配置server.xml<br>去掉8080端口，即注释掉如下代码：--&gt;<br>&lt;Connector <br>port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br>enableLookups="false" redirectPort="8443" acceptCount="100"<br>debug="0" connectionTimeout="20000" <br>disableUploadTimeout="true" /&gt;</p>
<p>&lt;!--配置8009端口如下：--&gt;<br>&lt;Connector port="8009" <br>maxThreads="500" minSpareThreads="400" maxSpareThreads="450"<br>enableLookups="false" redirectPort="8443" debug="0"<br>protocol="AJP/1.3" /&gt;<br>&lt;!--配置引擎--&gt; <br>&lt;Engine name="Catalina" defaultHost="localhost" debug="0" jvmRoute="tomcat1"&gt;</p>
<p>启动内存配置,开发configure tomcat程序即可配置：<br>Initial memory pool: 200 M<br>Maxinum memory pool:300M<br>Tomcat2配置：<br>配置和tomcat1差不多，需要改动的地方如下：<br>&lt;!--配置引擎--&gt; <br>&lt;Engine name="Catalina" defaultHost="localhost" debug="0" jvmRoute="tomcat2"&gt;</p>
<p>启动内存配置,开发configure tomcat程序即可配置：<br>Initial memory pool: 512 M<br>Maxinum memory pool:768M<br>Mysql配置：<br>Server类型：Dedicated MySQL Server Machine <br>Database usage:Transational Database Only<br>并发连接数量：Online Transaction Processing(OLTP)<br>字符集：UTF8<br>数据库连接池的配置：<br>我们采用的是spring 框架，配置如下：<br>&lt;property name="hibernateProperties"&gt;<br>&lt;props&gt;<br>&lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/prop&gt;<br>&lt;prop key="hibernate.connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/prop&gt;<br>&lt;prop key="hibernate.connection.url"&gt;jdbc:mysql://202.88.1.103/db&lt;/prop&gt; <br>&lt;prop key="hibernate.connection.username"&gt;sa&lt;/prop&gt;<br>&lt;prop key="hibernate.connection.password"&gt;&lt;/prop&gt;</p>
<p>&lt;prop key="hibernate.show_sql"&gt;false&lt;/prop&gt;<br>&lt;prop key="hibernate.use_sql_comments"&gt;false&lt;/prop&gt;</p>
<p>&lt;prop key="hibernate.cglib.use_reflection_optimizer"&gt;true&lt;/prop&gt;<br>&lt;prop key="hibernate.max_fetch_depth"&gt;2&lt;/prop&gt;</p>
<p>&lt;prop key="hibernate.c3p0.max_size"&gt;200&lt;/prop&gt;<br>&lt;prop key="hibernate.c3p0.min_size"&gt;5&lt;/prop&gt;<br>&lt;prop key="hibernate.c3p0.timeout"&gt;12000&lt;/prop&gt;<br>&lt;prop key="hibernate.c3p0.max_statements"&gt;50&lt;/prop&gt;<br>&lt;prop key="hibernate.c3p0.acquire_increment"&gt;1&lt;/prop&gt; <br>&lt;/props&gt;<br>&lt;/property&gt;<br>其他的没有额外配置。<br>LoadRunner 常见问题：<br>（1）sofeware caused connction：这种情况，一般是脚本有问题，或者loadrunner有问题。解决方法：重新启动机器，或者重新录制脚本，估计是loadrunner的bug。<br>（2）cannot connect to server:无法连接到服务器。这种情况是服务器的配置有问题，服务器无法承受过多的并发连接了。需要优化服务器的配置，<br>如操作系统采用windows 2003 server，<br>优化tomcat配置：maxThreads="500" minSpareThreads="400" maxSpareThreads="450"。但是tomcat 最多支持500个并发访问<br>优化apache配置：<br>ThreadsPerChild 1900 <br>MaxRequestsPerChild 10000<br>其他的错误如：<br>Action.c(10): Error -27791: Server has shut down the connection prematurely<br>HTTP Status-Code=503 (Service Temporarily Unavailable)<br>一般都是由于服务器配置不够好引起的，按照问题（2）处理，如果仍旧不行，需要优化硬件和调整程序了。<br>Apache问题：<br>（1） File does not exist: C:/Apache/htdocs/favicon.ico：<br>这个问题是apache，htdocs目录没有favicon.ico文件引起的，该文件是网站的图标，仅在firefox,myIE等浏览器出现。<br>（2） 图片无法显示：<br>配置apache后，却无法显示图片。<br>解决方法：把程序的图片，按照程序结构copy到apache的htdocs目录下。<br>（3） 无法处理请求：<br>当我们输入 ***.do 命令后，apache确返回错误信息，而连接tomcat却没有问题。原因是没有把.do命令转发给tomcat处理。解决方法如下：<br>在apache配置文件中配置如下内容：<br>DocumentRoot "C:/Apache/htdocs"<br>JkMount /*.jsp loadbalancer<br>JkMount /*.do loadbalancer</p>
<p><br>总结：<br>网站的压力测试，涉及的知识面挺广的，不仅要熟悉压力测试工具，还要知道如何配置和优化应用服务器和数据库，并且需要知道如何优化网络、操作系统、硬件系统。<br>测试中不仅要善于发现问题，要知道如何解决。最重要的一点，要有良好的测试方法。刚开始测试时，可以从最简单的测试脚本入手，不需要太复杂的脚本，这样便于发现问题。如我们刚开始时，就从一个简单的下载登陆界面的脚本入手，测试一个tomcat的压力负载。一个简单的获取登陆的脚本，帮助我们优化了tomcat的配置；后来再测试数据库连接，也是一个简单的数据库连接脚本，帮助我们优化了数据库连接池；然后利用这些简单的脚本，测试apache的负载平衡，优化了apache配置。最后运行复杂的脚本，模拟多种角色的用户在不同时间下的处理，以测试网站压力负载。</p>
<img src ="http://www.blogjava.net/jelver/aggbug/113258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jelver/" target="_blank">都市淘沙者</a> 2007-04-24 17:01 <a href="http://www.blogjava.net/jelver/articles/113258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>