﻿<?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-bob-文章分类-tomcat</title><link>http://www.blogjava.net/keweibo/category/42866.html</link><description>一专  Java 多能  Delphi,Powerbuilder ... </description><language>zh-cn</language><lastBuildDate>Thu, 16 Jun 2011 10:50:47 GMT</lastBuildDate><pubDate>Thu, 16 Jun 2011 10:50:47 GMT</pubDate><ttl>60</ttl><item><title>Apache2+Tomcat6+MOD_JK集群</title><link>http://www.blogjava.net/keweibo/articles/352413.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 16 Jun 2011 04:02:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/352413.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/352413.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/352413.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/352413.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/352413.html</trackback:ping><description><![CDATA[<div><h1>一、下载软件</h1> <h2>1.Apache 2.2.19</h2> <p><a href="http://mirror.bjtu.edu.cn/apache//httpd/binaries/win32/httpd-2.2.19-win32-x86-no_ssl.msi">http://mirror.bjtu.edu.cn/apache//httpd/binaries/win32/httpd-2.2.19-win32-x86-no_ssl.msi</a></p> <p>2.Tomcat 6.0.32</p> <p><a href="http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-6/v6.0.32/bin/apache-tomcat-6.0.32-windows-x86.zip">http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-6/v6.0.32/bin/apache-tomcat-6.0.32-windows-x86.zip</a></p> <p>3.Apache Tomcat Connector（mod_jk 1.2.31）</p> <p><a href="http://apache.etoak.com//tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/mod_jk-1.2.31-httpd-2.2.3.so">http://apache.etoak.com//tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/mod_jk-1.2.31-httpd-2.2.3.so  </a></p> <h1>二、安装配置</h1> <h2><strong>(1) Apache</strong></h2> <p>1.直接默认下一步安装完成。（默认目录：$APACHE_HOME=C:\Program Files\Apache  Software Foundation\Apache2.2\）</p> <p>2.将下载好的mod_jk-1.2.31-httpd-2.2.3.so拷贝至$APACHE_HOME\modules，并重命名为：mod_jk.so。</p><div>3.编辑Apache目录下的conf/httpd.conf文件，在末尾添加：</div><div># include mod_jk &nbsp;<br />Include conf/jk/mod_jk.conf</div>4.在$APACHE_HOME\conf目录下建立jk目录，并新建mod_jk.conf，uriworkermap.properties，workers.properties三个文件。<br /><div>5.编辑mod_jk.conf并增加：</div><div>LoadModule jk_module modules/mod_jk.so<br />JkWorkersFile conf/jk/workers.properties<br />JkMountFile conf/jk/uriworkermap.properties<br />JkLogFile logs/mod_jk.log<br />JkShmFile logs/mod_jk.shm<br />JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"<br />JkRequestLogFormat "%w %V %T"<br />JkMount /* controller<br /><br /><div>6.编辑workers.properties并增加：<br /><div>worker.list = controller,status,tomcat1,tomcat2<br /><br />worker.template.type=ajp13<br />worker.template.ping_mode=A<br />worker.template.ping_timeout=20000<br />worker.template.connection_pool_size=1024<br />worker.template.socket_keepalive=true<br />worker.template.socket_connect_timeout=20000<br /><br />worker.tomcat1.reference=worker.template<br />worker.tomcat1.port=8009<br />worker.tomcat1.host=localhost<br /><br />worker.tomcat2.reference=worker.template<br />worker.tomcat2.port=9009<br />worker.tomcat2.host=localhost<br /><br />worker.controller.type=lb<br />worker.controller.balanced_workers=tomcat1,tomcat2<br />worker.controller.sticky_session=false<br /><br />worker.status.type=status<br />worker.status.read_only=true</div><br /><div>7.编辑uriworkermap.properties并增加：</div><div>/*=controller<br />#!/*.gif=controller<br />#!/*.jpg=controller<br />#!/*.png=controller<br />#!/*.css=controller<br />#!/*.js=controller<br />#!/*.htm=controller<br />#!/*.html=controller<br /><br />/jkstatus=status</div><div><h2><strong>(2) TOMCAT</strong></h2> <p>1.解压两次apache-tomcat-6.0.32-windows-x86.zip，文件夹分别命名：tomcat1，tomcat2</p></div>2.如果是同一台电脑上测试，则需要修改其中之一的server.xml文件中的端口<br /><br />其它<br />在Apache Momitor 中添加或者删除Service,<br />使用httpd -k install 或者 httpd -k uninstall （在$APACHE_HOME\bin目录下执行）<br /><div><h2><strong><strong>(3) Session复制<br /></strong></strong></h2></div>具体见%Tomcat_home%/webapps/docs/cluster-howto.html<br /><br /><div><p>To run session replication in your Tomcat 6.0 container, the following steps should be completed:</p> <ul><li>All your session attributes must implement <code>java.io.Serializable</code></li><li>Uncomment the <code>Cluster</code> element in server.xml</li><li>If you have defined custom cluster valves, make sure you have the <code>ReplicationValve</code>  defined as well under the Cluster element in server.xml</li><li>If your Tomcat instances are running on the same machine, make sure the <code>tcpListenPort</code>       attribute is unique for each instance, in most cases Tomcat is  smart enough to resolve this on it's own by autodetecting available  ports in the range 4000-4100</li><li>Make sure your <code>web.xml</code> has the <code>&lt;distributable/&gt;</code> element        or set at your <code>&lt;Context distributable="true" /&gt;</code></li><li>If you are using mod_jk, make sure that jvmRoute attribute is set at your Engine <code>&lt;Engine name="Catalina" jvmRoute="node01" &gt;</code>       and that the jvmRoute attribute value matches your worker name in workers.properties</li><li>Make sure that all nodes have the same time and sync with NTP service!</li><li>Make sure that your loadbalancer is configured for sticky session mode.</li></ul></div></div></div> </div><img src ="http://www.blogjava.net/keweibo/aggbug/352413.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2011-06-16 12:02 <a href="http://www.blogjava.net/keweibo/articles/352413.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>config.getServletContext().getRealPath("/")返回NULL的解決辦法</title><link>http://www.blogjava.net/keweibo/articles/339755.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 03 Dec 2010 14:06:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/339755.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/339755.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/339755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/339755.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/339755.html</trackback:ping><description><![CDATA[代碼片段:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String <font style="background-color: #cce8cf">prefix = config.getServletContext().getRealPath("/");<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (prefix == null || prefix.equals("")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // deployment in weblogic through ear file does not deploy<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // phisically<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // the files,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // so we need to obtain the path through getClass method<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.net.URL url = this.getClass().getResource("/");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String mSchemaPath = url.getFile();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (mSchemaPath != null || !mSchemaPath.equals("")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String separator = "/";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int lastSlash = mSchemaPath.lastIndexOf(separator);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (lastSlash == -1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; separator = "\\";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lastSlash = mSchemaPath.lastIndexOf(separator);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefix = mSchemaPath.substring(0, lastSlash);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefix = prefix.substring(0, prefix.lastIndexOf(separator));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefix = prefix.substring(0, prefix.lastIndexOf(separator) + 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // lastSlash = mSchemaPath.lastIndexOf(separator);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // mSchemaPath = mSchemaPath.substring(0, lastSlash);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // lastSlash = mSchemaPath.lastIndexOf(separator);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // prefix = mSchemaPath.substring(0, lastSlash+1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font>
<img src ="http://www.blogjava.net/keweibo/aggbug/339755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-12-03 22:06 <a href="http://www.blogjava.net/keweibo/articles/339755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse項目發布webapps</title><link>http://www.blogjava.net/keweibo/articles/335787.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 21 Oct 2010 07:34:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/335787.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/335787.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/335787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/335787.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/335787.html</trackback:ping><description><![CDATA[<br />
1：找到 server 面板，右击当前的那个 tomcat，先 remove 掉其中所有的工程<br />
2：再右击那个 tomcat，选择 clean... 清空一下<br />
3：双击那个 tomcat，会打开属性面板，找到左边第二个 server locations，你那个单选框选中的应该是第一个，你选择第三个，在 server path 中输入你想要的路径后，保存即可以了
<img src ="http://www.blogjava.net/keweibo/aggbug/335787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-10-21 15:34 <a href="http://www.blogjava.net/keweibo/articles/335787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 內存溢出</title><link>http://www.blogjava.net/keweibo/articles/308232.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 05 Jan 2010 00:52:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/308232.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/308232.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/308232.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/308232.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/308232.html</trackback:ping><description><![CDATA[<p><font size="3"><strong>一、内存溢出类型</strong></font> <br />
1 、
java.lang.OutOfMemoryError: PermGen space </p>
<p>JVM 管理两种类型的内存，堆和非堆。堆是给开发人员用的上面说的就是，是在 JVM 启动时创建；非堆是留给 JVM
自己用的，用来存放类的信息的。它和堆不同，运行期内 GC 不会释放空间。如果 web app 用了大量的第三方 jar 或者应用有太多的
class 文件而恰好 MaxPermSize 设置较小，超出了也会导致这块内存的占用过多造成溢出，或者 tomcat
热部署时侯不会清理前面加载的环境，只会将 context 更改为新部署的，非堆存的内容就会越来越多。 </p>
<p>2 、 java.lang.OutOfMemoryError: Java heap space </p>
<p>第一种情况是个补充，主要存在问题就是出现在这个情况中。其默认空间 ( 即 -Xms) 是物理内存的 1/64 ，最大空间 (-Xmx)
是物理内存的 1/4 。如果内存剩余不到 40 ％， JVM 就会增大堆到 Xmx 设置的值，内存剩余超过 70 ％， JVM 就会减小堆到
Xms 设置的值。所以服务器的 Xmx 和 Xms 设置一般应该设置相同避免每次 GC 后都要调整虚拟机堆的大小。假设物理内存无限大，那么
JVM 内存的最大值跟操作系统有关，一般 32 位机是 1.5g 到 3g 之间，而 64 位的就不会有限制了。 </p>
<p>注意：如果 Xms 超过了 Xmx 值，或者堆最大值和非堆最大值的总和超过了物理内存或者操作系统的最大限制都会引起服务器启动不起来。 </p>
<p>垃圾回收 GC 的角色 </p>
<p>JVM 调用 GC 的频度还是很高的，主要两种情况下进行垃圾回收： </p>
<p>当应用程序线程空闲；另一个是 java 内存堆不足时，会不断调用 GC ，若连续回收都解决不了内存堆不足的问题时，就会报 out of
memory 错误。因为这个异常根据系统运行环境决定，所以无法预期它何时出现。 </p>
<p>根据 GC 的机制，程序的运行会引起系统运行环境的变化，增加 GC 的触发机会。 </p>
<p>为了避免这些问题，程序的设计和编写就应避免垃圾对象的内存占用和 GC 的开销。显示调用 System.GC() 只能建议 JVM
需要在内存中对垃圾对象进行回收，但不是必须马上回收， </p>
<p>一个是并不能解决内存资源耗空的局面，另外也会增加 GC 的消耗。 </p>
<p><strong><font size="3">二、 JVM 内存区域组成</font></strong> <br />
简单的说
java中的堆和栈 </p>
<p>java把内存分两种：一种是栈内存，另一种是堆内存 </p>
<p>1。在函数中定义的基本类型变量和对象的引用变量都在函数的栈内存中分配； </p>
<p>2。堆内存用来存放由 new创建的对象和数组 </p>
<p>在函数（代码块）中定义一个变量时， java就在栈中为这个变量分配内存空间，当超过变量的作用域后，
java会自动释放掉为该变量所分配的内存空间；在堆中分配的内存由 java虚拟机的自动垃圾回收器来管理 </p>
<p>堆的优势是可以动态分配内存大小，生存期也不必事先告诉编译器，因为它是在运行时动态分配内存的。缺点就是要在运行时动态分配内存，存取速度较慢；
</p>
<p>栈的优势是存取速度比堆要快，缺点是存在栈中的数据大小与生存期必须是确定的无灵活 性。 </p>
<p>java 堆分为三个区： New 、 Old 和 Permanent </p>
<p>GC 有两个线程： </p>
<p>新创建的对象被分配到 New 区，当该区被填满时会被 GC 辅助线程移到 Old 区，当 Old 区也填满了会触发 GC
主线程遍历堆内存里的所有对象。 Old 区的大小等于 Xmx 减去 -Xmn </p>
<p>java栈存放 </p>
<p>栈调整：参数有 +UseDefaultStackSize -Xss256K，表示每个线程可申请 256k的栈空间 </p>
<p>每个线程都有他自己的 Stack</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/308232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-01-05 08:52 <a href="http://www.blogjava.net/keweibo/articles/308232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse 3.5 配置tomcatPlugin、lomboz、phpeclipse(转)</title><link>http://www.blogjava.net/keweibo/articles/308041.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sat, 02 Jan 2010 10:43:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/308041.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/308041.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/308041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/308041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/308041.html</trackback:ping><description><![CDATA[<div class="articalTitle">转自：<strong><font color="#ff0000">http://blog.sina.com.cn/s/blog_5d1455ff0100empp.html</font></strong></div>
<div class="articalContent">
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>eclipse是非常棒的Web开发工具，有各种丰富的插件可以选择，通过eclipse再配置适当的插件，可以让web开发变得轻松，变得更可控。</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>配置eclipse支持jsp,php,js很简单，步骤如下：</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>一、下载软件</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>1.最新稳定版本eclipse-SDK-3.5-win32.zip，根据自己的系统选择版本。这里下载的是Eclipse Classic 3.5 - Windows (141 MB)</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>URL：</strong></font><a href="http://www.eclipse.org/downloads/"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>http://www.eclipse.org/downloads/</strong></font></a></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>2.下载tomcat支持补丁，支持tomcat的补丁。下载的文件是tomcatPluginV321.zip</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>URL：</strong></font><a href="http://www.eclipsetotale.com/tomcatPlugin.html"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>http://www.eclipsetotale.com/tomcatPlugin.html</strong></font></a></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>3.下载jsp开发补丁，语法高亮和自动提示支持。下载的文件是org.objectweb.lomboz-all-in-on<wbr>e-R-3.3-200710290621-win32.zip</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>URL：</strong></font><a href="http://lomboz.objectweb.org/"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>http://lomboz.objectweb.org/</strong></font></a></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>URL：</strong></font><a href="http://lomboz.objectweb.org/downloads/drops/R-3.3-200710290621/"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>http://lomboz.objectweb.org/downloads/drops/R-3.3-200710290621/</strong></font></a></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>4.下载php eclipse，支持php高亮和语法提示。下载的文件是net.sourceforge.phpeclipse_1.1.8.bin.dist.zip&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>URL：</strong></font><a href="http://www.phpeclipse.de/"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>http://www.phpeclipse.de/</strong></font></a></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>URL：</strong></font><a href="http://sourceforge.net/project/showfiles.php?group_id=57621"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>http://sourceforge.net/project/showfiles.php?group_id=57621</strong></font></a></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>5.下载js eclipse，支持js高亮和语法提示。下载的文件是jseclipse_plugin_040207.zip</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>URL：</strong></font><a href="http://www.interaktonline.com/products/eclipse/jseclipse/overview/"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>http://www.interaktonline.com/products/eclipse/jseclipse/overview/</strong></font></a></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>URL：</strong></font><a href="http://labs.adobe.com/technologies/jseclipse/"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>http://labs.adobe.com/technologies/jseclipse/</strong></font></a> <font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>(js eclipse被Adobe收购了，下载时可能需要注册)</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>以上插件补丁也可以去补丁中心查找，地址：</strong></font><a href="http://www.eclipseplugincentral.com/"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>http://www.eclipseplugincentral.com/</strong></font></a></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>二、安装与配置</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>1.解压缩eclipse-SDK-3.3.2-win32.zip到e盘根目录下，改文件夹为eclipse</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>&nbsp;<wbr>&nbsp;<wbr> 1.1.运行eclipse，设置工作目录。建立一个java项目用来开发java桌面程序了</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>2.解压缩tomcatPluginV321.zip，把解压后的文件夹com.sysdeo.eclipse.tomcat_3.2.1放到eclipse/plugins下，重启动eclipse就能看见tomcat标标</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 2.1.在eclipse window &gt; preferences &gt; tomcat里配置tomcat home，customize &gt; perspective 里new里把tomcat project选上，建个tomcat项目试试吧</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>3.解压缩org.objectweb.lomboz-all-in-on<wbr>e-R-3.3-200710290621-win32.zip，分别把解压得到的plugins与features复制到eclipse目录下的同名目录</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>&nbsp;<wbr>&nbsp;<wbr> 3.1.如果下载的是all-in-on<wbr>e包，lomboz本身就可以直接运行，直接jsp高亮语法，但我认为还是使用标准的eclipse的好，只是用lomboz的jsp支持功能</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>&nbsp;<wbr>&nbsp;<wbr> 3.1 定制视图里多了hibernate、spring、j2ee、lomboz-struts等项，可以都打开。lomboz是一套丰富的J2EE Web开发插件，使用它可以帮助我们把事情变得简单</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>4.解压缩net.sourceforge.phpeclipse_1.1.8，分别把解压得到的plugins与features复制到eclipse目录下的同名目录下</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>&nbsp;<wbr>&nbsp;<wbr> 4.1 在定制视图新建里选择php，现在就可以看到php高亮和语法支持了</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>5.解压缩jseclipse_plugin_040207.zip，分别把解压得到的plugins与features复制到eclipse目录下的同名目录下，就是两个jar文件</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>&nbsp;<wbr>&nbsp;<wbr> 5.1 jseclipse默认中文会是乱码，设置window &gt; preferences &gt; general &gt; contentType，选择text &gt; javas<wbr>cript ,将对应的ISO8859-1 改为GBK，按update就可以解决了</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>&nbsp;<wbr>&nbsp;<wbr> 5.2 js开发人员苦恼的是一直没有一个好用的IDE，我们需要一个可以高亮、有提示、有视图、有对象控制，甚至可以调试的工具。js eclipse可以做到这一点，他与去年出来的apatna有类似之处</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>6.全部安装后，在窗口参数设置里可以看到tomcat,jseclipse,phpeclipse web development等项，可以自己去按照提示去配置，一般来讲默认就够用了。</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>&nbsp;<wbr>&nbsp;<wbr> 现在可以打开jsp,php,js文件看一下，是否能高亮和自动提示支持呢？如果都有了，那恭喜，安装配置全部成功。</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: Arial; font-size: 16px" color="#66ff99"><strong>至此一个完善的web开发平台配置完成，有了eclipse，可以让我们效率提高，工作变的事半功倍！</strong></font></p>
<p style="text-indent: 2em"><font style="font-family: 幼圆" color="#ff0000"><strong>本文中提到的插件最好都使用link法加入,这样不用时可以方便去掉,加快启动速度</strong></font></p>
</div>
<img src ="http://www.blogjava.net/keweibo/aggbug/308041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-01-02 18:43 <a href="http://www.blogjava.net/keweibo/articles/308041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache + Tomcat 负载均衡及Session绑定的实现(轉)</title><link>http://www.blogjava.net/keweibo/articles/303779.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 26 Nov 2009 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/303779.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/303779.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/303779.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/303779.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/303779.html</trackback:ping><description><![CDATA[轉自:http://blog.ixpub.net/html/60/12690260-38040.html<br />
<br />
<p>昨天配置Apache+2Tomcat做<a href="javascript:;" onclick="javascript:tagshow(event, '%B8%BA%D4%D8');" target="_self"><u><strong>负载</strong></u></a><a href="javascript:;" onclick="javascript:tagshow(event, '%BE%F9%BA%E2');" target="_self"><u><strong>均衡</strong></u></a>，在网上查了不少资料，有不少都不够完整，现在把资料整理了一下，贴出来以供参考。</p>
<p><strong><font size="2">1 说明</font></strong></p>
<p>本配置实现的是多台机器访问的负载均衡。它使用Apache来实现动态负载均衡，并且实现了会话绑定机制，即用户第一次访问的会话将绑定在首次访问的tomcat上，防止会话信息丢失。<br />
该配置所运行的环境为Windows 2000 <a href="javascript:;" onclick="javascript:tagshow(event, 'server');" target="_self"><u><strong>server</strong></u></a>,实现两台机器的负载均衡，一台机器运行apache,另外两台机器运行tomcat.该配置稍做修改就可以配置在其他操作系统并能实现一台<a href="javascript:;" onclick="javascript:tagshow(event, '%B7%FE%CE%F1%C6%F7');" target="_self"><u><strong>服务器</strong></u></a>跑多个tomcat的负载均衡，以及多于两台服务器的负载均衡。</p>
<p><strong><font size="2">2 需要的软件</font></strong></p>
<p>Apache 2.0.55 download<br />
<a href="http://httpd.apache.org/download.cgi"><font color="#009933">http://httpd.apache.org/download.cgi</font></a></p>
<p>最新版本是2.2.0,但是jk module最新的是支持2.0.55的</p>
<p>Tomcat 5.0<br />
<a href="http://tomcat.apache.org/tomcat-5.0-doc/index.html"><font color="#009933">http://tomcat.apache.org/tomcat-5.0-doc/index.html</font></a></p>
<p>用tomcat5.0的原因是最近使用Tomcat5.5，发现做<a href="javascript:;" onclick="javascript:tagshow(event, '%CD%F8%C2%E7');" target="_self"><u><strong>网络</strong></u></a>连接时非常慢，比如连数据库或者连socket服务器时，我不清楚是不是我配置的原因，但是最后查不出来，还是换到5.0上比较稳定。</p>
<p>The JK module<br />
<a href="http://tomcat.apache.org/download-connectors.cgi"><font color="#009933">http://tomcat.apache.org/download-connectors.cgi</font></a></p>
<p>对于Apache来说，很多推荐都是使用jk2，但是tomcat小组已经决定放弃jk2，因为jk可以适用于更多的服务器类型而不是单单Apache，所以我们为了长远着想，还是用JK吧。</p>
<p>J2sdk 1.4.2<br />
<a href="http://java.sun.com/j2se/1.4.2/download.html"><font color="#009933">http://java.sun.com/j2se/1.4.2/download.html</font></a></p>
<p><font size="2"><strong>3 编译、安装和配置Apache</strong></font></p>
<p><strong>3.1 解包、编译和安装</strong><br />
安装Apache和Tomcat＋J2sdk，没什么好说的。</p>
<p><strong>3.2 基本配置</strong><br />
环境变量中加入<br />
TOMCAT_HOME=&lt;tomcat安装路径&gt;<br />
JAVA_HOME=&lt;java安装路径&gt;<br />
JAVA_OPTS=-Xms64M -Xmx512M<br />
Xms是运行tomcat的java heap的最小大小， Xms是最大大小。</p>
<p><strong>3.3 拷贝mod_jk模块文件</strong><br />
拷贝mod_jk.so到Apache安装目录的modules目录下</p>
<p><strong>3.4 在mod_jk.conf配置</strong><br />
编辑Apache的配置文件Apache安装目录的conf/httpd.conf</p>
<p>加入一行<br />
include conf\mod_jk.conf<br />
在conf目录下创建mod_jk.conf文件，内容如下：</p>
<p>--------------------------------------mod_jk.conf----------------------------------------------<br />
# Load mod_jk module<br />
LoadModule jk_module modules/mod_jk.so</p>
<p><br />
# Where to find workers.properties<br />
JkWorkersFile conf/workers.properties</p>
<p><br />
# Where to put jk logs<br />
JkLogFile logs/mod_jk.log</p>
<p><br />
# Set the jk log level [debug/error/info]<br />
JkLogLevel info</p>
<p><br />
# Select the log format<br />
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "</p>
<p><br />
# JkOptions indicate to send SSL KEY SIZE,<br />
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories</p>
<p><br />
# JkRequestLogFormat set the request format<br />
JkRequestLogFormat "%w %V %T"</p>
<p># Send JSPs for context / to worker named loadBalancer<br />
JkMount /*.jsp loadBalancer<br />
--------------------------------------------mod_jk.conf-----------------------------------------------</p>
<p><strong>3.5 workers.properties 文件<br />
</strong>在 conf目录下生成该文件，该文件告诉apache 每个负载均衡的tomcat服务的运行参数，如机器名和端口号等。<br />
-----------------------------------------workers.properties-------------------------------<br />
#<br />
# workers.properties<br />
#</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 //第一台tomcat服务所在机器监听端口<br />
worker.tomcat1.host=hostname1 //第一台tomcat服务所在机器ip地址<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=100</p>
<p><br />
# ------------------------<br />
# Second tomcat server<br />
# ------------------------<br />
worker.tomcat2.port=8009 //第二台tomcat服务所在机器监听端口<br />
worker.tomcat2.host=hostname2 //第二台tomcat服务所在机器ip地址<br />
worker.tomcat2.type=ajp13</p>
<p># Specify the size of the open connection cache.<br />
#worker.tomcat2.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.tomcat2.lbfactor=100</p>
<p><br />
# ------------------------<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 />
#<br />
-----------------------------------------workers.properties-----------------------------</p>
<p><strong><font size="2">4 配置Tomcat 服务器</font></strong></p>
<p><br />
修改conf/server.xml文件<br />
在跑第一个tomcat实例的机器上，在大约第100行, 替换:<br />
&lt;Engine name="Standalone" defaultHost="localhost" debug="0"&gt;<br />
为:<br />
&lt;Engine jvmRoute="tomcat1" name="Standalone" defaultHost="localhost" debug="0"&gt;<br />
对跑第二个tomcat实例的机器上，替换为 jvmRoute="tomcat2".<br />
注
意，一定是替换这一行，而包含在原来的engine里面的host不做更改。有的文档写得是在配置中加入一行&lt;Engine
jvmRoute="tomcat1" name="Standalone" defaultHost="localhost"
debug="0"&gt;&lt;Engine&gt;,其实是不对的，这样负载均衡是没有问题的，但是不能做session绑定了，也就是说同一用户
会在两台服务器上跳来跳去。这是由于jvmRoute不正确引起的，因为如果只是加入一行的话，是没有什么作用的，Engine仍然是原来的
Engine，而原来的Engine中jvmRoute是不正确的，所以一定要替换。而且这个jvmRoute一定要跟
workers.properties中的名称完全匹配，否则也不能实现session绑定.</p>
<p><br />
<strong><font size="2">5 测试</font></strong></p>
<p>在跑tomcat1实例的机器的 webapps/ROOT 目录生成如下内容的index.jsp文件:<br />
&lt;html&gt;<br />
&lt;body bgcolor=red&gt;<br />
&lt;center&gt;</p>
<p>&lt;h1&gt;Tomcat 1&lt;/h1&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
同理，在跑tomcat2实例的机器的 webapps/ROOT 目录生成如下内容的index.jsp文件：<br />
&lt;html&gt;<br />
&lt;body bgcolor=blue&gt;<br />
&lt;center&gt;</p>
<p>&lt;h1&gt;Tomcat 2&lt;/h1&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>启动Tomcat1, Tomcat2 和Apache服务</p>
<p>首先验证Apache服务器的静态页面是否正常，访问：<a href="http://hostname/"><font color="#009933">http://hostname/</font></a>.<br />
验证tomcat和apache配置提供负载均衡，用不同的终端访问:<a href="http://hostname/index.jsp"><font color="#009933">http://hostname/index.jsp</font></a><br />
如果你看到红色的页面，表示为tomcat1 服务器返回的，<br />
如果你看到兰色的页面，表示为tomcat2 服务器返回的。这里注意的是在<a href="javascript:;" onclick="javascript:tagshow(event, 'linux');" target="_self"><u><strong>linux</strong></u></a>上面的apache轮询一般要返回10次tomcat1的服务后才会返回tomcat2的服务，并且以后的访问是没有规律的，在window2000环境下则是交替的返回tomcat1和tomcat2 的服务。</p>
<p>现在再测试下会话绑定功能，当你在同一台客户端里重载以上（刷新页面）访问的index.jsp页面时，确信永远返回同一种颜色，即总是从同一台tomcat机器返回页面。</p>
<p>&nbsp;</p>
<p>JK module 的worker.properties配置的详细说明参看</p>
<p><a href="http://tomcat.apache.org/connectors-doc/config/workers.html"><font color="#009933">http://tomcat.apache.org/connectors-doc/config/workers.html</font></a></p>
<p>JK module 的Apache配置的详细说明</p>
<p><a href="http://tomcat.apache.org/connectors-doc/config/apache.html"><font color="#009933">http://tomcat.apache.org/connectors-doc/config/apache.html</font></a></p>
<p><br />
</p>
<p><a href="http://tomcat.apache.org/connectors-doc/config/apache.html"><font color="#009933">本測試使用的軟體下載地址:</font></a></p>
<p><a href="http://tomcat.apache.org/connectors-doc/config/apache.html"><font color="#009933">http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/</font></a></p>
<p><a href="http://tomcat.apache.org/connectors-doc/config/apache.html"><font color="#009933">http://archive.apache.org/dist/httpd/binaries/win32/<br />
</font></a></p>
<br />
<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/303779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-11-26 15:26 <a href="http://www.blogjava.net/keweibo/articles/303779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat性能的测试(轉)</title><link>http://www.blogjava.net/keweibo/articles/303731.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 26 Nov 2009 02:19:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/303731.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/303731.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/303731.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/303731.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/303731.html</trackback:ping><description><![CDATA[轉自: http://tech.it168.com/j/2007-07-21/200707211403078.shtml<br />
<br />
<font size="2"> 【IT168技术文档】<br />
</font><font size="2"><br />
<strong>一. 引言</strong><br />
<br />
&nbsp;&nbsp;&nbsp;
性能测试与分析是软件开发过程中介于架构和调整的一个广泛并比较不容易理解的领域，更是一项较为复杂的活动。就像下棋游戏一样，有效的性能测试和分析只能
在一个良好的计划策略和具备了对不可预料事件的处理能力的条件下顺利地完成。一个下棋高手赢得比赛靠的不仅仅是对游戏规则的认识，更是靠他的自己的能力和
不断地专注于分析自己对手的实力来更加有效地利用和发挥规则的作用。同样一个优秀的性能测试和分析人员将要面对的是来自一个全新的应用程序和环境下带来的
整个项目的挑战。本文中作者结合自己的使用经验和参考文档，对Tomcat性能方面的调整做一简要的介绍，并给出Tomcat性能的测试、分析和调整优化
的一些方法。</font>
<p><font size="2"><strong>二. 测量Web服务器的性能</strong><br />
<br />
&nbsp;&nbsp;&nbsp;
测量web服务器的性能是一项让人感到畏缩的任务，但是我们在这里将给出一些需要注意的地方并且指点你了解其中更多的细节性的内容。它不像一些简单的任
务，如测量CPU的速率或者是测量程序占用CPU的比例，web服务器的性能优化中包括许调整许多变量来达到目标。许多的测量策略中都包含了一个看似简单
的浏览实际上是在向服务器发送大量的请求，我们称之为客户端的程序，来测量响应时间。客户端和服务器端是在同一台机器上吗？服务器在测试的时候还运行着其
它的什么程序吗？客户端和服务器端的通讯是通过局域网，100baseT，10baseT还是使用调制解调器？客户端是否一直重复请求相同的页面，还是随
机地访问不同的页面？（这些影响到了服务缓存的性能）客户端发送请求的有规律的还是突发的？你是在最终的配置环境下运行服务的还是在调试的配置环境下运行
服务的？客户端请求中包含图片还是只有HTML页面？是否有请求是通过servlets和JSP的，CGI程序，服务端包含（Server-Side
Includes
，SSI是一个可以让你使用动态HTML文件的技术）？所有这些都将是我们要关心的，并且几乎我们不可能精确地把所有的问题都清楚地列出来。</font></p>
<p><font size="2">1.压力</font><a class="channel_keylink" href="http://www.testage.net/AutoTest/"><font size="2">测试工具</font></a></p>
<p><font size="2">&#8220;工欲善其事，必先利其器&#8221;，压力测试只有借助于一些工具才可得以实施。</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; 大多数web压力</font><a class="channel_keylink" href="http://www.testage.net/AutoTest/"><font size="2">测试工具</font></a><font size="2">的
实现原理都是通过重复的大量的页面请求来模拟多用户对被测系统的并发访问，以此达到产生压力的目的。产生压力的手段都是通过录制或者是编写压力脚本，这些
脚本以多个进程或者线程的形式在客户端运行，这样通过人为制造各种类型的压力，我们可以观察被测系统在各种压力状况下的表现，从而定位系统瓶颈，作为系统
调优的基础。目前已经存在的性能</font><a class="channel_keylink" href="http://www.testage.net/AutoTest/"><font size="2">测试工具</font></a><font size="2">林林总总，数量不下一百种，从单一的开放源码的免费小工具如 Aapache 自带的 web 性能</font><a class="channel_keylink" href="http://www.testage.net/AutoTest/"><font size="2">测试工具</font></a><font size="2"> Apache Benchmark、开源的Jmeter 到大而全的商业性能测试软件如 Mercury 的 LoadRunner 等等。任何性能</font><a class="channel_keylink" href="http://www.testage.net/AutoTest/"><font size="2">测试工具</font></a><font size="2">都有其优缺点，我们可以根据实际情况挑选用最合适的工具。您可以在这里找到一些web压力</font><a class="channel_keylink" href="http://www.testage.net/AutoTest/"><font size="2">测试工具</font></a><a href="http://www.softwareqatest.com/qatweb1.html#LOAD"><font size="2">http://www.softwareqatest.com/qatweb1.html#LOAD</font></a></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; 这里我们所使用的工具要支持web应用服务认证才可以，要支持接收发送cookies，不仅如此Tomcat支持多种认证方式，比如基本认证、基于表单的认证、相互认证和客户端认证，而一些工具仅仅支持HTTP基本认证。真实地模拟用户认证是性能</font><a class="channel_keylink" href="http://www.testage.net/AutoTest/"><font size="2">测试工具</font></a><font size="2">的一个重要的部分，因为认证机制将对一个web站点的性能特征产生重要的影响。基于你在产品中使用的不同的认证方式，你需要从上面的工具列表中选择使用这种特性的</font><a class="channel_keylink" href="http://www.testage.net/AutoTest/"><font size="2">测试工具</font></a><font size="2">。</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp; Apache Benchmark和http_load是命令行形式的工具，非常易于使用。Apache
Benchmark可以模仿单独的URL请求并且重复地执行，可以使用不同的命令行参数来控制执行迭代的次数，并发用户数等等。它的一个特点是可以周期性
地打印出处理过程的信息，而其它工具只能给出一个全局的报告。</font></p>
<p><font size="2">2.压力</font><a class="channel_keylink" href="http://www.testage.net/AutoTest/"><font size="2">测试工具</font></a><font size="2">介绍</font></p>
<p><font size="2"><strong>三. 外部环境的调整<br />
</strong><br />
&nbsp;&nbsp;&nbsp;
在Tomcat和应用程序进行了压力测试后，如果您对应用程序的性能结果不太满意，就可以采取一些性能调整措施了，当然了前提是应用程序没有问题，我们这
里只讲Tomcat的调整。由于Tomcat的运行依赖于JVM，所以在这里我们把Tomcat的调整可以分为两类来详细描述：</font></p>
<p><font size="2">　　外部环境调整 </font></p>
<p><font size="2">　　调整非Tomcat组件，例如Tomcat运行的操作系统和运行Tomcat的java虚拟机。</font></p>
<p><font size="2">　　自身调整 </font></p>
<p><font size="2">　　修改Tomcat自身的参数，调整Tomcat配置文件中的参数。</font></p>
<p><font size="2">　　下面我们将详细讲解外部环境调整的有关内容，Tomcat自身调整的内容将在第2部分中阐述。1.JAVA虚拟机性能优化</font></p>
<p><font size="2">　　Tomcat本身不能直接在计算机上运行，需要依赖于硬件基础之上的操作系统和一个java虚拟机。您可以选择
自己的需要选择不同的操作系统和对应的JDK的版本（只要是符合Sun发布的Java规范的），但我们推荐您使用Sun公司发布的JDK。确保您所使用的
版本是最新的，因为Sun公司和其它一些公司一直在为提高性能而对java虚拟机做一些升级改进。一些报告显示JDK1.4在性能上比JDK1.3提高了
将近10%到20%。</font></p>
<p><font size="2">　　可以给Java虚拟机设置使用的内存，但是如果你的选择不对的话，虚拟机不会补偿。可通过命令行的方式改变虚拟机使用内存的大小。如下表所示有两个参数用来设置虚拟机使用内存的大小。<br />
参数<br />
&nbsp;描述<br />
&nbsp;<br />
-Xms&lt;size&gt;<br />
&nbsp;JVM初始化堆的大小<br />
&nbsp;<br />
-Xmx&lt;size&gt;<br />
&nbsp;JVM堆的最大值<br />
这两个值的大小一般根据需要进行设置。初始化堆的大小执行了虚拟机在启动时向系统申请的内存的大小。一般而言，这个参数不重要。但是有的应用程序在大负
载的情况下会急剧地占用更多的内存，此时这个参数就是显得非常重要，如果虚拟机启动时设置使用的内存比较小而在这种情况下有许多对象进行初始化，虚拟机就
必须重复地增加内存来满足使用。由于这种原因，我们一般把-Xms和-Xmx设为一样大，而堆的最大值受限于系统使用的物理内存。一般使用数据量较大的应
用程序会使用持久对象，内存使用有可能迅速地增长。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出，并且导致应用服务崩溃。因此一般建议堆
的最大值设置为可用内存的最大值的80%。
<p>　　Tomcat默认可以使用的内存为128MB，在较大型的应用项目中，这点内存是不够的，需要调大。</p>
<p>　　Windows下，在文件{tomcat_home}/bin/catalina.bat，Unix下，在文件{tomcat_home}/bin/catalina.sh的前面，增加如下设置：</p>
<p>　　JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'</p>
<p>　　需要把这个两个参数值调大。例如：</p>
<p>　　JAVA_OPTS='-Xms256m -Xmx512m'</p>
<p>　　表示初始化内存为256MB，可以使用的最大内存为512MB。</p>
<p>　　另外需要考虑的是Java提供的垃圾回收机制。虚拟机的堆大小决定了虚拟机花费在收集垃圾上的时间和频度。收集垃圾可以接受的速度与应用有关，
应该通过分析实际的垃圾收集的时间和频率来调整。如果堆的大小很大，那么完全垃圾收集就会很慢，但是频度会降低。如果你把堆的大小和内存的需要一致，完全
收集就很快，但是会更加频繁。调整堆大小的的目的是最小化垃圾收集的时间，以在特定的时间内最大化处理客户的请求。在基准测试的时候，为保证最好的性能，
要把堆的大小设大，保证垃圾收集不在整个基准测试的过程中出现。</p>
<p>　　如果系统花费很多的时间收集垃圾，请减小堆大小。一次完全的垃圾收集应该不超过 3-5
秒。如果垃圾收集成为瓶颈，那么需要指定代的大小，检查垃圾收集的详细输出，研究 垃圾收集参数对性能的影响。一般说来，你应该使用物理内存的 80%
作为堆大小。当增加处理器时，记得增加内存，因为分配可以并行进行，而垃圾收集不是并行的。</p>
<p>2.操作系统性能优化</p>
<p>　　这里说的操作系统是指运行web服务器的系统软件，当然，不同的操作系统是为不同的目的而设计的。比如OpenBSD是面向安全的，因此在它的
内核中有许多的限制来防止不同形式的服务攻击（OpenBSD的一句座右铭是&#8220;默认是最安全的&#8221;）。这些限制或许更多地用来运行活跃的web服务器。</p>
<p>　　而我们常用的Linux操作系统的目标是易用使用，因此它有着更高的限制。使用BSD内核的系统都带有一个名为&#8220;Generic&#8221;的内核，表明
所有的驱动器都静态地与之相连。这样就使系统易于使用，但是如果你要创建一个自定义的内核来加强其中某些限制，那就需要排除不需要的设备。Linux内核
中的许多驱动都是动态地加载的。但是换而言之，内存现在变得越来越便宜，所以因为加载额外的设备驱动就显得不是很重要的。重要的是要有更多的内存，并且在
服务器上腾出更多的可用内存。</p>
<p>　　小提示：虽然现在内存已经相当的便宜，但还是尽量不要购买便宜的内存。那些有牌子的内存虽然是贵一点，但是从可靠性上来说，性价比会更高一些。</p>
<p>　　如果是在Windows操作系统上使用Tomcat，那么最好选择服务器版本。因为在非服务器版本上，最终用户授权数或者操作系统本身所能承受的用户数、可用的网络连接数或其它方面的一些方面都是有限制的。并且基于安全性的考虑，必须经常给操作系统打上最新的补丁。</p>
<p>　　3.Tomcat与其它web服务器整合使用</p>
<p>　　虽然tomcat也可以作web服务器,但其处理静态html的速度比不上apache,且其作为web服务器的功能远不如apache,因此
我们想把apache和tomcat集成起来，将html与jsp的功能部分进行明确分工，让tomcat只处理jsp部分，其它的由
apache,IIS等这些web服务器处理，由此大大节省了tomcat有限的工作&#8220;线程&#8221;。</p>
<p>　　4.负载均衡</p>
<p>　　在负载均衡的思路下，多台服务器为对称方式，每台服务器都具有同等的地位，可以单独对外提供服务而无须其他服务器的辅助。通过负载分担技术，将外部发送来的请求按一定规则分配到对称结构中的某一台服务器上，而接收到请求的服务器都独立回应客户机的请求。</p>
<p>　　提供服务的一组服务器组成了一个应用服务器集群(cluster)，并对外提供一个统一的地址。当一个服务请求被发至该集群时，根据一定规则选择一台服务器，并将服务转定向给该服务器承担，即将负载进行均衡分摊。</p>
<p>　　通过应用负载均衡技术，使应用服务超过了一台服务器只能为有限用户提供服务的限制，可以利用多台服务器同时为大量用户提供服务。当某台服务器出
现故障时，负载均衡服务器会自动进行检测并停止将服务请求分发至该服务器，而由其他工作正常的服务器继续提供服务，从而保证了服务的可靠性。</p>
<p>　　负载均衡实现的方式大概有四种：第一是通过DNS，但只能实现简单的轮流分配，不能处理故障，第二如果是基于MS IIS，Windows
2003
server本身就带了负载均衡服务，第三是硬件方式，通过交换机的功能或专门的负载均衡设备可以实现，第四种是软件方式，通过一台负载均衡服务器进行，
上面安装软件。使用Apache Httpd
Server做负载平衡器，Tomcat集群节点使用Tomcat就可以做到以上第四种方式。这种方式比较灵活，成本相对也较低。另外一个很大的优点就是
可以根据应用的情况和服务器的情况采取一些策略。 <br />
</p>
</font></p>
<p><font size="2"><strong>四. 自身调整<br />
</strong><br />
&nbsp;&nbsp;&nbsp;
本节将向您详细介绍一些加速可使Tomcat实例加速运行的技巧和方法，无论是在什么操作系统或者何种Java虚拟机上。在有些情况下，您可能没有控制部
署环境上的操作系统或者Java虚拟机。在这种情况下，您就需要逐行了解以下的的一些建议，然而你应该在修改后使之生效。我认为以下方法是Tomcat性
能自身调整的最佳方式。</font></p>
<p><font size="2">　　1.禁用DNS查询</font></p>
<p><font size="2">　　当web应用程序向要记录客户端的信息时，它也会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP
地址。DNS查询需要占用网络，并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程，这样会消耗一定的时间。为了消除DNS查
询对性能的影响我们可以关闭DNS查询，方式是修改server.xml文件中的enableLookups参数值：
<p>&nbsp;</p>
<p><br />
Tomcat4</p>
<p>&lt;Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="80" minProcessors="5" maxProcessors="75" enableLookups="false"
redirectPort="8443" acceptCount="100" debug="0"
connectionTimeout="20000" useURIValidationHack="false"
disableUploadTimeout="true" /&gt;</p>
<p>Tomcat5</p>
<p>&lt;Connector port="80" maxThreads="150" minSpareThreads="25"
maxSpareThreads="75" enableLookups="false" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="20000"
disableUploadTimeout="true"/&gt;</p>
<p><br />
除非你需要连接到站点的每个HTTP客户端的机器名，否则我们建议在生产环境上关闭DNS查询功能。可以通过Tomcat以外的方式来
获取机器名。这样不仅节省了网络带宽、查询时间和内存，而且更小的流量会使日志数据也会变得更少，显而易见也节省了硬盘空间。对流量较小的站点来说禁用
DNS查询可能没有大流量站点的效果明显，但是此举仍不失为一良策。谁又见到一个低流量的网站一夜之间就流量大增呢？</p>
<p>　　2.调整线程数</p>
<p>　　另外一个可通过应用程序的连接器（Connector）进行性能控制的的参数是创建的处理请求的线程数。Tomcat使用线程池加速响应速度来
处理请求。在Java中线程是程序运行时的路径，是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员
写出CPU最大利用率的高效程序，使空闲时间保持最低，从而接受更多的请求。</p>
<p>　　Tomcat4中可以通过修改minProcessors和maxProcessors的值来控制线程数。这些值在安装后就已经设定为默认值并
且是足够使用的，但是随着站点的扩容而改大这些值。minProcessors服务器启动时创建的处理请求的线程数应该足够处理一个小量的负载。也就是
说，如果一天内每秒仅发生5次单击事件，并且每个请求任务处理需要1秒钟，那么预先设置线程数为5就足够了。但在你的站点访问量较大时就需要设置更大的线
程数，指定为参数maxProcessors的值。maxProcessors的值也是有上限的，应防止流量不可控制（或者恶意的服务攻击），从而导致超
出了虚拟机使用内存的大小。如果要加大并发连接数，应同时加大这两个参数。web
server允许的最大连接数还受制于操作系统的内核参数设置，通常Windows是2000个左右，Linux是1000个左右。</p>
<p>　　在Tomcat5对这些参数进行了调整，请看下表：<br />
属性名<br />
&nbsp;描述<br />
&nbsp;<br />
maxThreads<br />
&nbsp;Tomcat使用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。<br />
&nbsp;<br />
acceptCount <br />
&nbsp;指定当所有可以使用的处理请求的线程数都被使用时，可以放到处理队列中的请求数，超过这个数的请求将不予处理。<br />
&nbsp;<br />
connnectionTimeout <br />
&nbsp;网络连接超时，单位：毫秒。设置为0表示永不超时，这样设置有隐患的。通常可设置为30000毫秒。<br />
&nbsp;<br />
minSpareThreads <br />
&nbsp;Tomcat初始化时创建的线程数。<br />
&nbsp;<br />
maxSpareThreads <br />
&nbsp;一旦创建的线程超过这个值，Tomcat就会关闭不再需要的socket线程。<br />
<br />
最好的方式是多设置几次并且进行测试，观察响应时间和内存使用情况。在不同的机器、操作系统或虚拟机组合的情况下可能会不同，而且并不是所有人的web站点的流量都是一样的，因此没有一刀切的方案来确定线程数的值。<br />
<br />
3.加速JSP编译速度</p>
<p>　　当第一次访问一个JSP文件时，它会被转换为Java serverlet源码，接着被编译成Java字节码。你可以控制使用哪个编译器，默认情况下，Tomcat使用使用命令行javac进行使用的编译器。也可以使用更快的编译器，但是这里我们将介绍如何优化它们。</p>
<p>　　另外一种方法是不要把所有的实现都使用JSP页面，而是使用一些不同的java模板引擎变量。显然这是一个跨越很大的决定，但是事实证明至少这
种方法是只得研究的。如果你想了解更多有关在Tomcat可使用的模板语言，你可以参考Jason Hunter和William
Crawford合著的《Java Servlet Programming 》一书（O'Reilly公司出版）。</p>
<p>　　在Tomcat 4.0中可以使用流行而且免费的Jikes编译器。Jikes编译器的速度要由于Sun的Java编译器。首先要安装Jikes（可访问<a href="http://oss.software.ibm.com/pub/jikes">http://oss.software.ibm.com/pub/jikes</a> 获得更多的信息），接着需要在环境变量中设置JIKESPATH包含系统运行时所需的JAR文件。装好Jikes以后还需要设置让JSP编译servlet使用Jikes，需要修改web.xml文件中jspCompilerPlugin的值：<br />
<br />
&lt;servlet&gt;<br />
&lt;servlet-name&gt;jsp&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;<br />
org.apache.jasper.servlet.JspServlet<br />
&lt;/servlet-class&gt;&lt;init-param&gt;<br />
&lt;param-name&gt;logVerbosityLevel&lt;/param-name&gt;<br />
&lt;param-value&gt;WARNING&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;init-param&gt;<br />
&lt;param-name&gt;jspCompilerPlugin&lt;/param-name&gt;<br />
&lt;param-value&gt;<br />
org.apache.jasper.compiler.JikesJavaCompiler<br />
&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;init-param&gt;<br />
&lt;!-- &lt;param-name&gt;<br />
org.apache.catalina.jsp_classpath<br />
&lt;/param-name&gt; --&gt;<br />
&lt;param-name&gt;classpath&lt;/param-name&gt;<br />
&lt;param-value&gt;<br />
/usr/local/jdk1.3.1-linux/jre/lib/rt.jar:<br />
/usr/local/lib/java/servletapi/servlet.ja<br />
r&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;load-on-startup&gt;3&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt; </p>
<p>&nbsp;</p>
<p><br />
在Tomcat
4.1（或更高版本），JSP的编译由包含在Tomcat里面的Ant程序控制器直接执行。这听起来有一点点奇怪，但这正是Ant有意为之的一部分，有一
个API文档指导开发者在没有启动一个新的JVM的情况下，使用Ant。这是使用Ant进行Java开发的一大优势。另外，这也意味着你现在能够在Ant
中使用任何javac支持的编译方式，这里有一个关于Apache Ant使用手册的javac page列表。使用起来是容易的，因为你只需要在
元素中定义一个名字叫&#8220;compiler&#8221;，并且在value中有一个支持编译的编译器名字，示例如下：</p>
<p><br />
&lt;servlet&gt;<br />
&lt;servlet-name&gt;jsp&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;<br />
org.apache.jasper.servlet.JspServlet<br />
&lt;/servlet-class&gt;<br />
&lt;init-param&gt;<br />
&lt;param-name&gt;logVerbosityLevel&lt;/param-name&gt;<br />
&lt;param-value&gt;WARNING&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;init-param&gt;<br />
&lt;param-name&gt;compiler&lt;/param-name&gt;<br />
&lt;param-value&gt;jikes&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;load-on-startup&gt;3&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;</p>
<p>&nbsp;</p>
<p>Ant可用的编译器<br />
名称<br />
&nbsp;别名<br />
&nbsp;调用的编译器<br />
&nbsp;<br />
classic <br />
&nbsp;javac1.1, javac1.2 <br />
&nbsp;Standard JDK 1.1/1.2 compiler <br />
&nbsp;<br />
modern <br />
&nbsp;javac1.3, javac1.4 <br />
&nbsp;Standard JDK 1.3/1.4 compiler <br />
&nbsp;<br />
jikes <br />
&nbsp;　　 The Jikes compiler <br />
&nbsp;<br />
JVC Microsoft <br />
&nbsp;Microsoft command-line compiler from the Microsoft SDK for Java/Visual J++ <br />
&nbsp;<br />
KJC 　　 The kopi compiler <br />
&nbsp;<br />
GCJ 　　 The gcj compiler (included as part of gcc) <br />
&nbsp;<br />
SJ Symantec <br />
&nbsp;Symantec's Java compiler <br />
&nbsp;<br />
extJavac<br />
&nbsp;　　 Runs either the modern or classic compiler in a JVM of its own&nbsp;<br />
<br />
由于JSP页面在第一次使用时已经被编译，那么你可能希望在更新新的jsp页面后马上对它进行编译。实际上，这个过程完全可以自动化，因为可以确认的是新的JSP页面在生产服务器和在<a class="channel_keylink" href="http://www.testage.net/Service/">测试服务</a>器上的运行效果是一样的。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 在Tomcat4的bin目录下有一个名为jspc的脚本。它仅仅是运行翻译阶段，而不是编译阶段，使用它可以在当前目录生成Java源文件。它是调试JSP页面的一种有力的手段。</p>
<p>　 可以通过浏览器访问再确认一下编译的结果。这样就确保了文件被转换成serverlet，被编译了可直接执行。这样也准确地模仿了真实用户访问JSP页面，可以看到给用户提供的功能。也抓紧这最后一刻修改出现的bug并且修改它J</p>
<p>　 Tomcat提供了一种通过请求来编译JSP页面的功能。例如，你可以在浏览器地址栏中输入<a href="http://localhost:8080/examples/jsp/dates/date.jsp?jsp_precompile=true">http://localhost:8080/examples/jsp/dates/date.jsp?jsp_precompile=true</a>，这样Tomcat就会编译data.jsp而不是执行它。此举唾手可得，不失为一种检验页面正确性的捷径。</p>
<p>　　4. 其它</p>
<p>　　前面我们提到过操作系统通过一些限制手段来防止恶意的服务攻击，同样Tomcat也提供了防止恶意攻击或禁止某些机器访问的设置。</p>
<p>　　Tomcat提供了两个参数供你配置：RemoteHostValve 和RemoteAddrValve。 </p>
<p>　　通过配置这两个参数，可以让你过滤来自请求的主机或IP地址，并允许或拒绝哪些主机/IP。与之类似的，在Apache的httpd文件里有对每个目录的允许/拒绝指定。 </p>
<p>&nbsp;</p>
<p>　　例如你可以把Admin Web application设置成只允许本地访问，设置如下：<br />
<br />
&lt;Context path="/path/to/secret_files" ...&gt; <br />
&lt;Valve className="org.apache.catalina.valves.RemoteAddrValve" </p>
<p>allow="127.0.0.1" deny=""/&gt; <br />
&lt;/Context&gt;<br />
<br />
如果没有给出允许主机的指定，那么与拒绝主机匹配的主机就会被拒绝，除此之外的都是允许的。与之类似，如果没有给出拒绝主机的指定，那么与允许主机匹配的主机就会被允许，除此之外的都是拒绝的。</p>
</font></p>
<div style="display: none;" id="ParagraphCount">1</div>
<p><font size="2"><strong>五. 容量计划<br />
</strong><br />
容量计划是在生产环境中使用Tomcat不得不提的提高性能的另一个重要的话题。如果你没有对预期的网络流量下的硬件和带宽做考虑的话那么无论你如何做配置修改和测试都无济于事。</font></p>
<p><font size="2">　　这里先对提及的容量计划作一个简要的定义：容量计划是指评估硬件、操作系统和网络带宽，确定应用服务的服务范围，寻求适合需求和软件特性的软硬件的一项活动。因此这里所说的软件不仅包括Tomcat，也包括与Tomcat结合使用的任何第三方web服务器软件。</font></p>
<p><font size="2">
如果在购买软硬件或部署系统前你对容量计划一无所知，不知道现有的软硬件环境能够支撑多少的访问量，甚至更糟直到你已经交付并且在生产环境上部署产品后才
意识到配置有问题时再进行变更可能为时已晚。此时只能增加硬件投入，增加硬盘容量甚至购买更好的服务器。如果事先做了容量计划那么就不会搞的如此焦头烂额
了。</font></p>
<p><font size="2">　　我们这里只介绍与Tomcat相关的内容。</font></p>
<p><font size="2">　　首先为了确定Tomcat使用机器的容量计划，你应该从一下列表项目种着手研究和计划：</font></p>
<p><font size="2">　　1. 硬件</font></p>
<p><font size="2">　　采用什么样的硬件体系？需要多少台计算机？使用一个大型的，还是使用多台小型机？每个计算机上使用几个CPU？
使用多少内存？使用什么样的存储设备，I/O的处理速度有什么要求？怎样维护这些计算机？不同的JVM在这些硬件上运行的效果如何（比如IBM
AIX系统只能在其设计的硬件系统上运行）？</font></p>
<p><font size="2">　　2. 网络带宽</font></p>
<p><font size="2">　　带宽的使用极限是多少？web应用程序如何处理过多的请求？</font></p>
<p><font size="2">　　3. 服务端操作系统</font></p>
<p><font size="2">　　采用哪种操作系统作为站点服务器最好？在确定的操作系统上使用哪个JVM最好？例如，JVM在这种系统上是否支持本地多线程，对称多处理？哪种系统可使web服务器更快、更稳定，并且更便宜。是否支持多CPU？ <br />
4. Tomcat容量计划</font></p>
<p><font size="2">　　以下介绍针对Tomcat做容量计划的步骤：</font></p>
<p><font size="2">　　1） 量化负载。如果站点已经建立并运行，可以使用前面介绍的工具模仿用户访问，确定资源的需求量。</font></p>
<p><font size="2">　　2） 针对测试结果或测试过程中进行分析。需要知道那些请求造成了负载过重或者使用过多的资源，并与其它请求做比较，这样就确定了系统的瓶颈所在。例如：如果servlet在查询数据库的步骤上耗用较长的时间，那么就需要考虑使用缓冲池来降低响应时间。</font></p>
<p><font size="2">　　3）
确定性能最低标准。例如，你不想让用户花20秒来等待结果页面的返回，也就是说甚至在达到访问量的极限时，用户等待的时间也不能超过20秒种（从点击链接
到看到返第一条返回数据）。这个时间中包含了数据库查询时间和文件访问时间。同类产品性能在不同的公司可能有不同的标准，一般最好采取同行中的最低标准或
对这个标准做出评估。</font></p>
<p><font size="2">　　4）
确定如何合理使用底层资源，并逐一进行测试。底层资源包括CPU、内存、存储器、带宽、操作系统、JVM等等。在各种生产环境上都按顺序进行部署和测试，
观察是否符合需求。在测试Tomcat时尽量多采用几种JVM，并且调整JVM使用内存和Tomcat线程池的大小进行测试。同时为了达到资源充分合理稳
定地使用的效果，还需针对测试过程中出现的硬件系统瓶颈进行处理确定合理的资源配置。这个过程最为复杂，而且一般由于没有可参考的值所以只能靠理论推断和
经验总结。</font></p>
<p><font size="2">　　5） 如果通过第4步的反复测试如果达到了最优的组合，就可以在相同的生产环境上部署产品了。</font></p>
<p><font size="2">　　此外应牢记一定要文档化你的测试过程和结果，因为此后可能还会进行测试，这样就可以拿以前的测试结果做为参考。另外测试过程要反复多次进行，每次的条件可能都不一样，因此只有记录下来才能进行结果比较和最佳条件的选择。</font></p>
<p><font size="2">　　这样我们通过测试找到了最好的组合方式，各种资源得到了合理的配置，系统的性能得到了极大的提升。</font></p>
<p><font size="2">六. 附加资料<br />
很显然本文也很难全面而详尽地阐述性能优化过程。如果你进行更多研究的话可能会把性能调优
做的更好，比如Java程序的性能调整、操作系统的调整、各种复杂环境与应用系统和其它所有与应用程序相关的东西。在这里提供一些文中提到的一些资源、文
中提到的相关内容的链接以及本文的一些参考资料。</font></p>
<p><font size="2">　　1. Web性能测试资料及工具</font></p>
<p><font size="2">　　1） Jmeter Wiki首页，Jmeter为一个开源的100%Java开发的性能</font><a class="channel_keylink" href="http://www.testage.net/AutoTest/"><font size="2">测试工具</font></a><br />
<font size="2">　　</font><a href="http://wiki.apache.org/jakarta-jmeter/"><font size="2">http://wiki.apache.org/jakarta-jmeter/</font></a></p>
<p><font size="2">　　2） Apache Benchmark使用说明<br />
</font><a href="http://httpd.apache.org/docs-2.0/programs/ab.html"><font size="2">http://httpd.apache.org/docs-2.0/programs/ab.html</font></a></p>
<p><font size="2">　　3） 一些Java相关</font><a class="channel_keylink" href="http://www.testage.net/AutoTest/"><font size="2">测试工具</font></a><font size="2">的介绍，包含可以与Tomcat集成进行测试的工具<br />
</font><a href="http://blog.csdn.net/wyingquan/"><font size="2">http://blog.csdn.net/wyingquan/</font></a></p>
<p><font size="2">　　4） LoadRunner? 是一种预测系统行为和性能的工业标准级负载</font><a class="channel_keylink" href="http://www.testage.net/AutoTest/"><font size="2">测试工具</font></a><font size="2">。它通过模拟数据以千万计用户来实施并发负载来对整个企业架构进行测试，来帮助您更</font></p>
<font size="2">快的查找和发现问题。<br />
</font><a href="http://www.mercury.com/us/products/performance-center/loadrunner/"><font size="2">http://www.mercury.com/us/products/performance-center/loadrunner/</font></a><font size="2"> </font>
<p>&nbsp;</p>
<p><br />
<font size="2">　　2. 文中介绍的相关内容的介绍</font></p>
<p><font size="2">　　1） Apache 2.x + Tomcat 4.x做负载均衡，描述了如何利用jk配置集群的负载均衡。<br />
</font><a href="http://raibledesigns.com/tomcat/index.html"><font size="2">http://raibledesigns.com/tomcat/index.html</font></a></p>
<p><font size="2">　　2） 容量计划的制定，收集了许多有关制定web站点容量计划的例子：<br />
</font><a href="http://www.capacityplanning.com/"><font size="2">http://www.capacityplanning.com/</font></a></p>
<p><font size="2">　　3） 评测Tomcat5负载平衡与集群，<br />
</font><a href="http://www.javaresearch.org/article/showarticle.jsp?column=556&amp;thread=19777"><font size="2">http://www.javaresearch.org/article/showarticle.jsp?column=556&amp;thread=19777</font></a></p>
<p><font size="2">　　4） Apache与Tomcat的安装与整合之整合篇<br />
</font><a href="http://www.javaresearch.org/article/showarticle.jsp?column=23&amp;thread=18139"><font size="2">http://www.javaresearch.org/article/showarticle.jsp?column=23&amp;thread=18139</font></a></p>
<p><font size="2">　　5） 性能</font><a class="channel_keylink" href="http://www.testage.net/AutoTest/"><font size="2">测试工具</font></a><font size="2">之研究，介绍了性能</font><a class="channel_keylink" href="http://www.testage.net/AutoTest/"><font size="2">测试工具</font></a><font size="2">的原理与思路<br />
</font><a href="http://www.51testing.com/emagzine/No2_2.htm"><font size="2">http://www.51testing.com/emagzine/No2_2.htm</font></a></p>
<p><font size="2">　　6） Java的内存泄漏<br />
</font><a href="http://www.matrix.org.cn/resource/article/409.html"><font size="2">http://www.matrix.org.cn/resource/article/409.html</font></a></p>
<p><font size="2">　　7） Web服务器和应用程序服务器有什么区别？<br />
</font><a href="http://www.matrix.org.cn/resource/article/1429.html"><font size="2">http://www.matrix.org.cn/resource/article/1429.html</font></a></p>
<font size="2">　　8） 详细讲解性能中数据库集群的问题<br />
</font><a href="http://www.theserverside.com/articles/article.tss?l=DB_Break"><font size="2">http://www.theserverside.com/articles/article.tss?l=DB_Break</font></a><font size="2"> </font>
<p><font size="2">
</font></p>
<br />
<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/303731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-11-26 10:19 <a href="http://www.blogjava.net/keweibo/articles/303731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>