??xml version="1.0" encoding="utf-8" standalone="yes"?>天堂在线一二区,亚洲国产电影,日韩国产福利http://www.aygfsteel.com/keweibo/category/42866.html一? Java 多能 Delphi,Powerbuilder ... zh-cnThu, 16 Jun 2011 10:50:47 GMTThu, 16 Jun 2011 10:50:47 GMT60Apache2+Tomcat6+MOD_JK集群http://www.aygfsteel.com/keweibo/articles/352413.htmlKeKeThu, 16 Jun 2011 04:02:00 GMThttp://www.aygfsteel.com/keweibo/articles/352413.htmlhttp://www.aygfsteel.com/keweibo/comments/352413.htmlhttp://www.aygfsteel.com/keweibo/articles/352413.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/352413.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/352413.html

一、下载Y?/h1>

1.Apache 2.2.19

http://mirror.bjtu.edu.cn/apache//httpd/binaries/win32/httpd-2.2.19-win32-x86-no_ssl.msi

2.Tomcat 6.0.32

http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-6/v6.0.32/bin/apache-tomcat-6.0.32-windows-x86.zip

3.Apache Tomcat ConnectorQmod_jk 1.2.31Q?/p>

http://apache.etoak.com//tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.31/mod_jk-1.2.31-httpd-2.2.3.so

二、安装配|?/h1>

(1) Apache

1.直接默认下一步安装完成。(默认目录Q?APACHE_HOME=C:\Program Files\Apache Software Foundation\Apache2.2\Q?/p>

2.下载好的mod_jk-1.2.31-httpd-2.2.3.so拯?APACHE_HOME\modulesQƈ重命名ؓQmod_jk.so?/p>

3.~辑Apache目录下的conf/httpd.conf文gQ在末尾dQ?/div>
# include mod_jk  
Include conf/jk/mod_jk.conf
4.?APACHE_HOME\conf目录下徏立jk目录Qƈ新徏mod_jk.confQuriworkermap.propertiesQworkers.properties三个文g?br />
5.~辑mod_jk.confq增加:
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/jk/workers.properties
JkMountFile conf/jk/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkShmFile logs/mod_jk.shm
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkRequestLogFormat "%w %V %T"
JkMount /* controller

6.~辑workers.propertiesq增加:
worker.list = controller,status,tomcat1,tomcat2

worker.template.type=ajp13
worker.template.ping_mode=A
worker.template.ping_timeout=20000
worker.template.connection_pool_size=1024
worker.template.socket_keepalive=true
worker.template.socket_connect_timeout=20000

worker.tomcat1.reference=worker.template
worker.tomcat1.port=8009
worker.tomcat1.host=localhost

worker.tomcat2.reference=worker.template
worker.tomcat2.port=9009
worker.tomcat2.host=localhost

worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2
worker.controller.sticky_session=false

worker.status.type=status
worker.status.read_only=true

7.~辑uriworkermap.propertiesq增加:
/*=controller
#!/*.gif=controller
#!/*.jpg=controller
#!/*.png=controller
#!/*.css=controller
#!/*.js=controller
#!/*.htm=controller
#!/*.html=controller

/jkstatus=status

(2) TOMCAT

1.解压两次apache-tomcat-6.0.32-windows-x86.zipQ文件夹分别命名Qtomcat1Qtomcat2

2.如果是同一台电脑上试Q则需要修改其中之一的server.xml文g中的端口

其它
在Apache Momitor 中添加或者删除Service,
使用httpd -k install 或?httpd -k uninstall Q在$APACHE_HOME\bin目录下执行)

(3) Session复制

具体?Tomcat_home%/webapps/docs/cluster-howto.html

To run session replication in your Tomcat 6.0 container, the following steps should be completed:

  • All your session attributes must implement java.io.Serializable
  • Uncomment the Cluster element in server.xml
  • If you have defined custom cluster valves, make sure you have the ReplicationValve defined as well under the Cluster element in server.xml
  • If your Tomcat instances are running on the same machine, make sure the tcpListenPort 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
  • Make sure your web.xml has the <distributable/> element or set at your <Context distributable="true" />
  • If you are using mod_jk, make sure that jvmRoute attribute is set at your Engine <Engine name="Catalina" jvmRoute="node01" > and that the jvmRoute attribute value matches your worker name in workers.properties
  • Make sure that all nodes have the same time and sync with NTP service!
  • Make sure that your loadbalancer is configured for sticky session mode.


Ke 2011-06-16 12:02 发表评论
]]>
config.getServletContext().getRealPath("/")q回NULL的解?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/keweibo/articles/339755.html</guid><wfw:comment>http://www.aygfsteel.com/keweibo/comments/339755.html</wfw:comment><comments>http://www.aygfsteel.com/keweibo/articles/339755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/keweibo/comments/commentRss/339755.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/keweibo/services/trackbacks/339755.html</trackback:ping><description><![CDATA[代碼片段:        <br /> String <font style="background-color: #cce8cf">prefix = config.getServletContext().getRealPath("/");<br /> <br />         if (prefix == null || prefix.equals("")) {<br />           // deployment in weblogic through ear file does not deploy<br />           // phisically<br />           // the files,<br />           // so we need to obtain the path through getClass method<br />           java.net.URL url = this.getClass().getResource("/");<br />           String mSchemaPath = url.getFile();<br />           if (mSchemaPath != null || !mSchemaPath.equals("")) {<br />             String separator = "/";<br />             int lastSlash = mSchemaPath.lastIndexOf(separator);<br />             if (lastSlash == -1) {<br />               separator = "\\";<br />               lastSlash = mSchemaPath.lastIndexOf(separator);<br />             }<br />             prefix = mSchemaPath.substring(0, lastSlash);<br />             prefix = prefix.substring(0, prefix.lastIndexOf(separator));<br />             prefix = prefix.substring(0, prefix.lastIndexOf(separator) + 1);<br />             // lastSlash = mSchemaPath.lastIndexOf(separator);<br />             // mSchemaPath = mSchemaPath.substring(0, lastSlash);<br />             // lastSlash = mSchemaPath.lastIndexOf(separator);<br />             // prefix = mSchemaPath.substring(0, lastSlash+1);<br />           }<br />         }</font> <img src ="http://www.aygfsteel.com/keweibo/aggbug/339755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/keweibo/" target="_blank">Ke</a> 2010-12-03 22:06 <a href="http://www.aygfsteel.com/keweibo/articles/339755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse項目發布webappshttp://www.aygfsteel.com/keweibo/articles/335787.htmlKeKeThu, 21 Oct 2010 07:34:00 GMThttp://www.aygfsteel.com/keweibo/articles/335787.htmlhttp://www.aygfsteel.com/keweibo/comments/335787.htmlhttp://www.aygfsteel.com/keweibo/articles/335787.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/335787.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/335787.html 1Q找?server 面板Q右d前的那个 tomcatQ先 remove 掉其中所有的工程
2Q再叛_那个 tomcatQ选择 clean... 清空一?br /> 3Q双击那?tomcatQ会打开属性面板,扑ֈ左边W二?server locationsQ你那个单选框选中的应该是W一个,你选择W三个,?server path 中输入你惌的\径后Q保存即可以?

Ke 2010-10-21 15:34 发表评论
]]>
Tomcat 內存溢出http://www.aygfsteel.com/keweibo/articles/308232.htmlKeKeTue, 05 Jan 2010 00:52:00 GMThttp://www.aygfsteel.com/keweibo/articles/308232.htmlhttp://www.aygfsteel.com/keweibo/comments/308232.htmlhttp://www.aygfsteel.com/keweibo/articles/308232.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/308232.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/308232.html一、内存溢出类?/strong>
1 ? java.lang.OutOfMemoryError: PermGen space

JVM 理两种cd的内存,堆和非堆。堆是给开发h员用的上面说的就是,是在 JVM 启动时创建;非堆是留l?JVM 自己用的Q用来存攄的信息的。它和堆不同Q运行期?GC 不会释放I间。如?web app 用了大量的第三方 jar 或者应用有太多? class 文g而恰?MaxPermSize 讄较小Q超Z也会Dq块内存的占用过多造成溢出Q或?tomcat 热部|时侯不会清理前面加载的环境Q只会将 context 更改为新部v的,非堆存的内容׃来多?

2 ?java.lang.OutOfMemoryError: Java heap space

W一U情冉|个补充,主要存在问题是出现在这个情况中。其默认I间 ( ?-Xms) 是物理内存的 1/64 Q最大空?(-Xmx) 是物理内存的 1/4 。如果内存剩余不?40 Q, JVM ׃增大堆到 Xmx 讄的|内存剩余过 70 Q, JVM ׃减小堆到 Xms 讄的倹{所以服务器?Xmx ?Xms 讄一般应该设|相同避免每?GC 后都要调整虚拟机堆的大小。假讄理内存无限大Q那? JVM 内存的最大D操作pȝ有关Q一?32 位机?1.5g ?3g 之间Q?64 位的׃会有限制了?

注意Q如?Xms 过?Xmx |或者堆最大值和非堆最大值的d过了物理内存或者操作系l的最大限刉会引h务器启动不v来?

垃圾回收 GC 的角?

JVM 调用 GC 的频度还是很高的Q主要两U情况下q行垃圾回收Q?

当应用程序线E空Ԍ另一个是 java 内存堆不xQ会不断调用 GC Q若q箋回收都解决不了内存堆不的问题时Q就会报 out of memory 错误。因个异常根据系l运行环境决定,所以无法预期它何时出现?

Ҏ GC 的机ӞE序的运行会引vpȝq行环境的变化,增加 GC 的触发机会?

Z避免q些问题Q程序的设计和编写就应避免垃圑֯象的内存占用?GC 的开销。显C?System.GC() 只能 JVM 需要在内存中对垃圾对象q行回收Q但不是必须马上回收Q?

一个是q不能解军_存资源耗空的局面,另外也会增加 GC 的消耗?

二?JVM 内存区域l成
单的? java中的堆和?

java把内存分两种Q一U是栈内存,另一U是堆内?

1。在函数中定义的基本cd变量和对象的引用变量都在函数的栈内存中分配;

2。堆内存用来存放?new创徏的对象和数组

在函敎ͼ代码块)中定义一个变量时Q?java在栈中个变量分配内存空_当超q变量的作用域后Q? java会自动释放掉变量所分配的内存空_在堆中分配的内存?java虚拟机的自动垃圾回收器来理

堆的优势是可以动态分配内存大,生存期也不必事先告诉~译器,因ؓ它是在运行时动态分配内存的。缺点就是要在运行时动态分配内存,存取速度较慢Q?

栈的优势是存取速度比堆要快Q缺Ҏ存在栈中的数据大与生存期必L定的无灉| 性?

java 堆分Z个区Q?New ?Old ?Permanent

GC 有两个线E:

新创建的对象被分配到 New 区,当该填满时会?GC 辅助U程Ud Old 区,?Old Z填满了会触发 GC ȝE遍历堆内存里的所有对象?Old 区的大小{于 Xmx 减去 -Xmn

java栈存?

栈调_参数?+UseDefaultStackSize -Xss256KQ表C每个线E可甌 256k的栈I间

每个U程都有他自q Stack



Ke 2010-01-05 08:52 发表评论
]]>
Eclipse 3.5 配置tomcatPlugin、lomboz、phpeclipse(?http://www.aygfsteel.com/keweibo/articles/308041.htmlKeKeSat, 02 Jan 2010 10:43:00 GMThttp://www.aygfsteel.com/keweibo/articles/308041.htmlhttp://www.aygfsteel.com/keweibo/comments/308041.htmlhttp://www.aygfsteel.com/keweibo/articles/308041.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/308041.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/308041.html转自Q?strong>http://blog.sina.com.cn/s/blog_5d1455ff0100empp.html

eclipse是非常棒的Web开发工P有各U丰富的插g可以选择Q通过eclipse再配|适当的插Ӟ可以让web开发变得轻松,变得更可控?/strong>

配置eclipse支持jsp,php,js很简单,步骤如下Q?/strong>

一、下载Y?/strong>

1.最新稳定版本eclipse-SDK-3.5-win32.zipQ根据自qpȝ选择版本。这里下载的是Eclipse Classic 3.5 - Windows (141 MB)

URLQ?/strong>http://www.eclipse.org/downloads/

2.下蝲tomcat支持补丁Q支持tomcat的补丁。下载的文g是tomcatPluginV321.zip

URLQ?/strong>http://www.eclipsetotale.com/tomcatPlugin.html

3.下蝲jsp开发补丁,语法高亮和自动提C支持。下载的文g是org.objectweb.lomboz-all-in-one-R-3.3-200710290621-win32.zip

URLQ?/strong>http://lomboz.objectweb.org/

URLQ?/strong>http://lomboz.objectweb.org/downloads/drops/R-3.3-200710290621/

     

4.下蝲php eclipseQ支持php高亮和语法提C。下载的文g是net.sourceforge.phpeclipse_1.1.8.bin.dist.zip     

URLQ?/strong>http://www.phpeclipse.de/

URLQ?/strong>http://sourceforge.net/project/showfiles.php?group_id=57621

      

5.下蝲js eclipseQ支持js高亮和语法提C。下载的文g是jseclipse_plugin_040207.zip

URLQ?/strong>http://www.interaktonline.com/products/eclipse/jseclipse/overview/

URLQ?/strong>http://labs.adobe.com/technologies/jseclipse/ (js eclipse被Adobe收购了,下蝲时可能需要注?

以上插g补丁也可以去补丁中心查找Q地址Q?/strong>http://www.eclipseplugincentral.com/

二、安装与配置

1.解压~eclipse-SDK-3.3.2-win32.zip到e盘根目录下,Ҏ件夹为eclipse

   1.1.q行eclipseQ设|工作目录。徏立一个java目用来开发java桌面E序?/strong>

2.解压~tomcatPluginV321.zipQ把解压后的文g夹com.sysdeo.eclipse.tomcat_3.2.1攑ֈeclipse/plugins下,重启动eclipsep看见tomcat标标

     2.1.在eclipse window > preferences > tomcat里配|tomcat homeQcustomize > perspective 里new里把tomcat project选上Q徏个tomcat目试试?/strong>

3.解压~org.objectweb.lomboz-all-in-one-R-3.3-200710290621-win32.zipQ分别把解压得到的plugins与features复制到eclipse目录下的同名目录

   3.1.如果下蝲的是all-in-one包,lomboz本n可以直接运行,直接jsp高亮语法Q但我认是用标准的eclipse的好Q只是用lomboz的jsp支持功能

   3.1 定制视图里多了hibernate、spring、j2ee、lomboz-struts{项Q可以都打开。lomboz是一套丰富的J2EE Web开发插Ӟ使用它可以帮助我们把事情变得?/strong>

4.解压~net.sourceforge.phpeclipse_1.1.8Q分别把解压得到的plugins与features复制到eclipse目录下的同名目录?/strong>

   4.1 在定制视图新建里选择phpQ现在就可以看到php高亮和语法支持了

5.解压~jseclipse_plugin_040207.zipQ分别把解压得到的plugins与features复制到eclipse目录下的同名目录下,是两个jar文g

   5.1 jseclipse默认中文会是qQ设|window > preferences > general > contentTypeQ选择text > javascript ,对应的ISO8859-1 改ؓGBKQ按update可以解决了

   5.2 js开发h员苦恼的是一直没有一个好用的IDEQ我们需要一个可以高亮、有提示、有视图、有对象控制Q甚臛_以调试的工具。js eclipse可以做到q一点,他与d出来的apatna有类g?/strong>

6.全部安装后,在窗口参数设|里可以看到tomcat,jseclipse,phpeclipse web development{项Q可以自己去按照提示去配|,一般来讲默认就够用了?/strong>

   现在可以打开jsp,php,js文g看一下,是否能高亮和自动提示支持呢?如果都有了,那恭喜,安装配置全部成功?/strong>

x一个完善的web开发^台配|完成,有了eclipseQ可以让我们效率提高Q工作变的事半功倍!

本文中提到的插g最好都使用link法加?q样不用时可以方便去?加快启动速度



Ke 2010-01-02 18:43 发表评论
]]>Apache + Tomcat 负蝲均衡及Sessionl定的实??http://www.aygfsteel.com/keweibo/articles/303779.htmlKeKeThu, 26 Nov 2009 07:26:00 GMThttp://www.aygfsteel.com/keweibo/articles/303779.htmlhttp://www.aygfsteel.com/keweibo/comments/303779.htmlhttp://www.aygfsteel.com/keweibo/articles/303779.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/303779.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/303779.html

昨天配置Apache+2Tomcat?a href="javascript:;" onclick="javascript:tagshow(event, '%B8%BA%D4%D8');" target="_self">负蝲均衡Q在|上查了不少资料Q有不少都不够完_现在把资料整理了一下,贴出来以供参考?/p>

1 说明

本配|实现的是多台机器访问的负蝲均衡。它使用Apache来实现动态负载均衡,q且实现了会话绑定机Ӟ即用L一ơ访问的会话绑定在首次讉K的tomcat上,防止会话信息丢失?br /> 该配|所q行的环境ؓWindows 2000 server,实现两台机器的负载均衡,一台机器运行apache,另外两台机器q行tomcat.该配|稍做修改就可以配置在其他操作系lƈ能实C?a href="javascript:;" onclick="javascript:tagshow(event, '%B7%FE%CE%F1%C6%F7');" target="_self">服务?/strong>跑多个tomcat的负载均衡,以及多于两台服务器的负蝲均衡?/p>

2 需要的软g

Apache 2.0.55 download
http://httpd.apache.org/download.cgi

最新版本是2.2.0,但是jk module最新的是支?.0.55?/p>

Tomcat 5.0
http://tomcat.apache.org/tomcat-5.0-doc/index.html

用tomcat5.0的原因是最q用Tomcat5.5Q发现做|络q接旉常慢Q比如连数据库或者连socket服务器时Q我不清楚是不是我配|的原因Q但是最后查不出来,q是换到5.0上比较稳定?/p>

The JK module
http://tomcat.apache.org/download-connectors.cgi

对于Apache来说Q很多推荐都是用jk2Q但是tomcat组已经军_攑ּjk2Q因为jk可以适用于更多的服务器类型而不是单单ApacheQ所以我们ؓ了长q着惻Iq是用JK吧?/p>

J2sdk 1.4.2
http://java.sun.com/j2se/1.4.2/download.html

3 ~译、安装和配置Apache

3.1 解包、编译和安装
安装Apache和TomcatQJ2sdkQ没什么好说的?/p>

3.2 基本配置
环境变量中加?br /> TOMCAT_HOME=<tomcat安装路径>
JAVA_HOME=<java安装路径>
JAVA_OPTS=-Xms64M -Xmx512M
Xms是运行tomcat的java heap的最大, Xms是最大大?/p>

3.3 拯mod_jk模块文g
拯mod_jk.so到Apache安装目录的modules目录?/p>

3.4 在mod_jk.conf配置
~辑Apache的配|文件Apache安装目录的conf/httpd.conf

加入一?br /> include conf\mod_jk.conf
在conf目录下创建mod_jk.conf文gQ内容如下:

--------------------------------------mod_jk.conf----------------------------------------------
# Load mod_jk module
LoadModule jk_module modules/mod_jk.so


# Where to find workers.properties
JkWorkersFile conf/workers.properties


# Where to put jk logs
JkLogFile logs/mod_jk.log


# Set the jk log level [debug/error/info]
JkLogLevel info


# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "


# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories


# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"

# Send JSPs for context / to worker named loadBalancer
JkMount /*.jsp loadBalancer
--------------------------------------------mod_jk.conf-----------------------------------------------

3.5 workers.properties 文g
?conf目录下生成该文gQ该文g告诉apache 每个负蝲均衡的tomcat服务的运行参敎ͼ如机器名和端口号{?br /> -----------------------------------------workers.properties-------------------------------
#
# workers.properties
#

# list the workers by name

worker.list=tomcat1, tomcat2, loadBalancer

# ------------------------
# First tomcat server
# ------------------------
worker.tomcat1.port=8009 //W一台tomcat服务所在机器监听端?br /> worker.tomcat1.host=hostname1 //W一台tomcat服务所在机器ip地址
worker.tomcat1.type=ajp13

# Specify the size of the open connection cache.
#worker.tomcat1.cachesize

#
# Specifies the load balance factor when used with
# a load balancing worker.
# Note:
# ----> lbfactor must be > 0
# ----> Low lbfactor means less work done by the worker.
worker.tomcat1.lbfactor=100


# ------------------------
# Second tomcat server
# ------------------------
worker.tomcat2.port=8009 //W二台tomcat服务所在机器监听端?br /> worker.tomcat2.host=hostname2 //W二台tomcat服务所在机器ip地址
worker.tomcat2.type=ajp13

# Specify the size of the open connection cache.
#worker.tomcat2.cachesize

#
# Specifies the load balance factor when used with
# a load balancing worker.
# Note:
# ----> lbfactor must be > 0
# ----> Low lbfactor means less work done by the worker.
worker.tomcat2.lbfactor=100


# ------------------------
# Load Balancer worker
# ------------------------

#
# The loadbalancer (type lb) worker performs weighted round-robin
# load balancing with sticky sessions.
# Note:
# ----> If a worker dies, the load balancer will check its state
# once in a while. Until then all work is redirected to peer
# worker.
worker.loadBalancer .type=lb
worker.loadBalancer.balanced_workers=tomcat1, tomcat2

#
# END workers.properties
#
-----------------------------------------workers.properties-----------------------------

4 配置Tomcat 服务?/font>


修改conf/server.xml文g
在跑W一个tomcat实例的机器上Q在大约W?00? 替换:
<Engine name="Standalone" defaultHost="localhost" debug="0">
?
<Engine jvmRoute="tomcat1" name="Standalone" defaultHost="localhost" debug="0">
对跑W二个tomcat实例的机器上Q替换ؓ jvmRoute="tomcat2".
? 意,一定是替换q一行,而包含在原来的engine里面的host不做更改。有的文写得是在配|中加入一?lt;Engine jvmRoute="tomcat1" name="Standalone" defaultHost="localhost" debug="0"><Engine>,其实是不对的Q这栯载均衡是没有问题的,但是不能做sessionl定了,也就是说同一用户 会在两台服务器上x跛_。这是由于jvmRoute不正引LQ因为如果只是加入一行的话,是没有什么作用的QEngine仍然是原来的 EngineQ而原来的Engine中jvmRoute是不正确的,所以一定要替换。而且q个jvmRoute一定要? workers.properties中的名称完全匚wQ否则也不能实现sessionl定.


5 试

在跑tomcat1实例的机器的 webapps/ROOT 目录生成如下内容的index.jsp文g:
<html>
<body bgcolor=red>
<center>

<h1>Tomcat 1</h1>
</body>
</html>
同理Q在跑tomcat2实例的机器的 webapps/ROOT 目录生成如下内容的index.jsp文gQ?br /> <html>
<body bgcolor=blue>
<center>

<h1>Tomcat 2</h1>
</body>
</html>

启动Tomcat1, Tomcat2 和Apache服务

首先验证Apache服务器的静态页面是否正常,讉KQ?a href="http://hostname/">http://hostname/.
验证tomcat和apache配置提供负蝲均衡Q用不同的终端访?http://hostname/index.jsp
如果你看到红色的面Q表CZؓtomcat1 服务器返回的Q?br /> 如果你看到兰色的面Q表CZؓtomcat2 服务器返回的。这里注意的是在linux上面的apache轮询一般要q回10ơtomcat1的服务后才会q回tomcat2的服务,q且以后的访问是没有规律的,在window2000环境下则是交替的q回tomcat1和tomcat2 的服务?/p>

现在再测试下会话l定功能Q当你在同一台客L里重载以上(h面Q访问的index.jsp面Ӟ信永远q回同一U颜ԌxL从同一台tomcat机器q回面?/p>

 

JK module 的worker.properties配置的详l说明参?/p>

http://tomcat.apache.org/connectors-doc/config/workers.html

JK module 的Apache配置的详l说?/p>

http://tomcat.apache.org/connectors-doc/config/apache.html


本測試用的軟體下載地址:

http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/

http://archive.apache.org/dist/httpd/binaries/win32/





Ke 2009-11-26 15:26 发表评论
]]>
Tomcat性能的测??http://www.aygfsteel.com/keweibo/articles/303731.htmlKeKeThu, 26 Nov 2009 02:19:00 GMThttp://www.aygfsteel.com/keweibo/articles/303731.htmlhttp://www.aygfsteel.com/keweibo/comments/303731.htmlhttp://www.aygfsteel.com/keweibo/articles/303731.html#Feedback0http://www.aygfsteel.com/keweibo/comments/commentRss/303731.htmlhttp://www.aygfsteel.com/keweibo/services/trackbacks/303731.html
【IT168技术文?br />
一. 引言

    性能试与分析是软g开发过E中介于架构和调整的一个广泛ƈ比较不容易理解的领域Q更是一较为复杂的zd。就像下游戏一P有效的性能试和分析只? 在一个良好的计划{略和具备了对不可预料事件的处理能力的条件下利地完成。一个下高手赢得比赛靠的不仅仅是对游戏规则的认识,更是靠他的自q能力? 不断C注于分析自己Ҏ的实力来更加有效地利用和发挥规则的作用。同样一个优U的性能试和分析h员将要面对的是来自一个全新的应用E序和环境下带来? 整个目的挑战。本文中作者结合自q使用l验和参考文档,对Tomcat性能斚w的调整做一要的介绍Qƈl出Tomcat性能的测试、分析和调整优化 的一些方法?/font>

? 量Web服务器的性能

    量web服务器的性能是一让人感到畏~的dQ但是我们在q里给Z些需要注意的地方q且指点你了解其中更多的l节性的内容。它不像一些简单的? 务,如测量CPU的速率或者是量E序占用CPU的比例,web服务器的性能优化中包括许调整许多变量来达到目标。许多的量{略中都包含了一个看似简? 的浏览实际上是在向服务器发送大量的hQ我们称之ؓ客户端的E序Q来量响应旉。客L和服务器端是在同一台机器上吗?服务器在试的时候还q行着? 它的什么程序吗Q客L和服务器端的通讯是通过局域网Q?00baseTQ?0baseTq是使用调制解调器?客户端是否一直重复请求相同的面Q还是随 机地讉K不同的页面?Q这些媄响到了服务缓存的性能Q客L发送请求的有规律的q是H发的?你是在最l的配置环境下运行服务的q是在调试的配置环境下运? 服务的?客户端请求中包含囄q是只有HTML面Q是否有h是通过servlets和JSP的,CGIE序Q服务端包含QServer-Side Includes QSSI是一个可以让你用动态HTML文g的技术)Q所有这些都是我们要关心的Qƈ且几乎我们不可能_地把所有的问题都清楚地列出来?/font>

1.压力试工具

“工欲善其事,必先利其?#8221;Q压力测试只有借助于一些工h可得以实施?/font>

    大多数web压力试工具? 实现原理都是通过重复的大量的面h来模拟多用户对被系l的q发讉KQ以此达C生压力的目的。生压力的手段都是通过录制或者是~写压力脚本Q这? 脚本以多个进E或者线E的形式在客Lq行Q这样通过Zؓ刉各U类型的压力Q我们可以观察被系l在各种压力状况下的表现Q从而定位系l瓶颈,作ؓpȝ 调优的基。目前已l存在的性能试工具林林L,数量不下一癄Q从单一的开放源码的免费工具如 Aapache 自带?web 性能试工具 Apache Benchmark、开源的Jmeter 到大而全的商业性能试软g?Mercury ?LoadRunner {等。Q何性能试工具都有其优~点Q我们可以根据实际情冉|选用最合适的工具。您可以在这里找C些web压力试工具http://www.softwareqatest.com/qatweb1.html#LOAD

    q里我们所使用的工兯支持web应用服务认证才可以,要支持接收发送cookiesQ不仅如此Tomcat支持多种认证方式Q比如基本认证、基于表单的认证、相互认证和客户端认证,而一些工具仅仅支持HTTP基本认证。真实地模拟用户认证是性能试工具的一个重要的部分Q因证机制将对一个web站点的性能特征产生重要的媄响。基于你在品中使用的不同的认证方式Q你需要从上面的工具列表中选择使用q种Ҏ的试工具?/font>

    Apache Benchmark和http_load是命令行形式的工P非常易于使用。Apache Benchmark可以模仿单独的URLhq且重复地执行,可以使用不同的命令行参数来控制执行P代的ơ数Qƈ发用h{等。它的一个特Ҏ可以周期? 地打印出处理q程的信息,而其它工具只能给Z个全局的报告?/font>

2.压力试工具介绍

? 外部环境的调?br />
    在Tomcat和应用程序进行了压力试后,如果您对应用E序的性能l果不太满意Q就可以采取一些性能调整措施了,当然了前提是应用E序没有问题Q我们这 里只讲Tomcat的调整。由于Tomcat的运行依赖于JVMQ所以在q里我们把Tomcat的调整可以分ZcL详细描述Q?/font>

  外部环境调整

  调整非TomcatlgQ例如Tomcatq行的操作系l和q行Tomcat的java虚拟机?/font>

  自n调整

  修改Tomcat自n的参敎ͼ调整Tomcat配置文g中的参数?/font>

  下面我们详l讲解外部环境调整的有关内容QTomcat自n调整的内容将在第2部分中阐q?.JAVA虚拟机性能优化

  Tomcat本n不能直接在计机上运行,需要依赖于g基础之上的操作系l和一个java虚拟机。您可以选择 自己的需要选择不同的操作系l和对应的JDK的版本(只要是符合Sun发布的Java规范的)Q但我们推荐您用Sun公司发布的JDK。确保您所使用? 版本是最新的Q因为Sun公司和其它一些公怸直在为提高性能而对java虚拟机做一些升U改q。一些报告显CJDK1.4在性能上比JDK1.3提高? 近10%?0%?/font>

  可以lJava虚拟|用的内存Q但是如果你的选择不对的话Q虚拟机不会补偿。可通过命o行的方式改变虚拟Z用内存的大小。如下表所C有两个参数用来讄虚拟Z用内存的大小?br /> 参数
 描述
 
-Xms<size>
 JVM初始化堆的大?br />  
-Xmx<size>
 JVM堆的最大?br /> q两个值的大小一般根据需要进行设|。初始化堆的大小执行了虚拟机在启动时向系l申L内存的大。一般而言Q这个参C重要。但是有的应用程序在大负 载的情况下会急剧地占用更多的内存Q此时这个参数就是显得非帔R要,如果虚拟机启动时讄使用的内存比较小而在q种情况下有许多对象q行初始化,虚拟机就 必须重复地增加内存来满使用。由于这U原因,我们一般把-Xms?Xmx设ؓ一样大Q而堆的最大值受限于pȝ使用的物理内存。一般用数据量较大的应 用程序会使用持久对象Q内存用有可能q速地增长。当应用E序需要的内存出堆的最大值时虚拟机就会提C内存溢出,q且D应用服务崩溃。因此一般徏议堆 的最大D|ؓ可用内存的最大值的80%?

  Tomcat默认可以使用的内存ؓ128MBQ在较大型的应用目中,q点内存是不够的Q需要调大?/p>

  Windows下,在文件{tomcat_home}/bin/catalina.batQUnix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下讄Q?/p>

  JAVA_OPTS='-Xms【初始化内存大小?-Xmx【可以用的最大内存?

  需要把q个两个参数D大。例如:

  JAVA_OPTS='-Xms256m -Xmx512m'

  表示初始化内存ؓ256MBQ可以用的最大内存ؓ512MB?/p>

  另外需要考虑的是Java提供的垃圑֛收机制。虚拟机的堆大小军_了虚拟机p在收集垃圾上的时间和频度。收集垃圑֏以接受的速度与应用有养I 应该通过分析实际的垃圾收集的旉和频率来调整。如果堆的大很大,那么完全垃圾攉׃很慢Q但是频度会降低。如果你把堆的大和内存的需要一_完全 攉很快,但是会更加频J。调整堆大小的的目的是最化垃圾攉的时_以在特定的时间内最大化处理客户的请求。在基准试的时候,Z证最好的性能Q? 要把堆的大小讑֤Q保证垃圾收集不在整个基准测试的q程中出现?/p>

  如果pȝp很多的时间收集垃圾,请减堆大小。一ơ完全的垃圾攉应该不超q?3-5 U。如果垃圾收集成为瓶颈,那么需要指定代的大,查垃圾收集的详细输出Q研I?垃圾攉参数Ҏ能的媄响。一般说来,你应该用物理内存的 80% 作ؓ堆大。当增加处理器时Q记得增加内存,因ؓ分配可以q行q行Q而垃圾收集不是ƈ行的?/p>

2.操作pȝ性能优化

  q里说的操作pȝ是指q行web服务器的pȝ软gQ当Ӟ不同的操作系l是Z同的目的而设计的。比如OpenBSD是面向安全的Q因此在它的 内核中有许多的限制来防止不同形式的服务攻击(OpenBSD的一句右铭?#8220;默认是最安全?#8221;Q。这些限制或许更多地用来q行z跃的web服务器?/p>

  而我们常用的Linux操作pȝ的目标是易用使用Q因此它有着更高的限制。用BSD内核的系l都带有一个名?#8220;Generic”的内核,表明 所有的驱动器都静态地与之相连。这样就使系l易于用,但是如果你要创徏一个自定义的内核来加强其中某些限制Q那需要排除不需要的讑֤。Linux内核 中的许多驱动都是动态地加蝲的。但是换而言之,内存现在变得来便宜,所以因为加载额外的讑֤驱动显得不是很重要的。重要的是要有更多的内存Qƈ且在 服务器上腑և更多的可用内存?/p>

  提C:虽然现在内存已经相当的便宜,但还是尽量不要购C宜的内存。那些有牌子的内存虽然是贵一点,但是从可靠性上来说Q性h比会更高一些?/p>

  如果是在Windows操作pȝ上用TomcatQ那么最好选择服务器版本。因为在非服务器版本上,最l用h权数或者操作系l本w所能承受的用户数、可用的|络q接数或其它斚w的一些方面都是有限制的。ƈ且基于安全性的考虑Q必ȝ常给操作pȝ打上最新的补丁?/p>

  3.Tomcat与其它web服务器整合?/p>

  虽然tomcat也可以作web服务?但其处理静态html的速度比不上apache,且其作ؓweb服务器的功能q不如apache,因此 我们xapache和tomcat集成hQ将html与jsp的功能部分进行明分工,让tomcat只处理jsp部分Q其它的? apache,IIS{这些web服务器处理,由此大大节省了tomcat有限的工?#8220;U程”?/p>

  4.负蝲均衡

  在负载均衡的思\下,多台服务器ؓ对称方式Q每台服务器都具有同{的CQ可以单独对外提供服务而无d他服务器的辅助。通过负蝲分担技术,外部发送来的请求按一定规则分配到对称l构中的某一台服务器上,而接收到h的服务器都独立回应客h的请求?/p>

  提供服务的一l服务器l成了一个应用服务器集群(cluster)Qƈ对外提供一个统一的地址。当一个服务请求被发至该集时Q根据一定规则选择一台服务器Qƈ服务{定向l该服务器承担,卛_负蝲q行均衡分摊?/p>

  通过应用负蝲均衡技术,使应用服务超q了一台服务器只能为有限用h供服务的限制Q可以利用多台服务器同时为大量用h供服务。当某台服务器出 现故障时Q负载均衡服务器会自动进行检ƈ停止服务请求分发至该服务器Q而由其他工作正常的服务器l箋提供服务Q从而保证了服务的可靠性?/p>

  负蝲均衡实现的方式大概有四种Q第一是通过DNSQ但只能实现单的轮流分配Q不能处理故障,W二如果是基于MS IISQWindows 2003 server本n带了负载均衡服务,W三是硬件方式,通过交换机的功能或专门的负蝲均衡讑֤可以实现Q第四种是Y件方式,通过一台负载均衡服务器q行Q? 上面安装软g。用Apache Httpd Server做负载^衡器QTomcat集群节点使用Tomcat可以做C上第四种方式。这U方式比较灵z,成本相对也较低。另外一个很大的优点是 可以Ҏ应用的情况和服务器的情况采取一些策略?

? 自n调整

    本节向您详l介l一些加速可使Tomcat实例加速运行的技巧和ҎQ无论是在什么操作系l或者何UJava虚拟Z。在有些情况下,您可能没有控刉 |环境上的操作系l或者Java虚拟机。在q种情况下,您就需要逐行了解以下的的一些徏议,然而你应该在修改后使之生效。我认ؓ以下Ҏ是Tomcat? 能自w调整的最x式?/font>

  1.用DNS查询

  当web应用E序向要记录客户端的信息Ӟ它也会记录客L的IP地址或者通过域名服务器查找机器名转换为IP 地址。DNS查询需要占用网l,q且包括可能从很多很q的服务器或者不起作用的服务器上去获取对应的IP的过E,q样会消耗一定的旉。ؓ了消除DNS? 询对性能的媄响我们可以关闭DNS查询Q方式是修改server.xml文g中的enableLookups参数|

 


Tomcat4

<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" />

Tomcat5

<Connector port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true"/>


除非你需要连接到站点的每个HTTP客户端的机器名,否则我们在生产环境上关闭DNS查询功能。可以通过Tomcat以外的方式来 获取机器名。这样不仅节省了|络带宽、查询时间和内存Q而且更小的流量会使日志数据也会变得更,显而易见也节省了硬盘空间。对量较小的站Ҏ说禁? DNS查询可能没有大流量站点的效果明显Q但是此举仍不失Z良策。谁又见C个低量的网站一夜之间就量大增呢?

  2.调整U程?/p>

  另外一个可通过应用E序的连接器QConnectorQ进行性能控制的的参数是创建的处理h的线E数。Tomcat使用U程池加速响应速度? 处理h。在Java中线E是E序q行时的路径Q是在一个程序中与其它控制线E无关的、能够独立运行的代码Dc它们共享相同的地址I间。多U程帮助E序? 写出CPU最大利用率的高效程序,使空闲时间保持最低,从而接受更多的h?/p>

  Tomcat4中可以通过修改minProcessors和maxProcessors的值来控制U程数。这些值在安装后就已经讑֮为默认值ƈ 且是_使用的,但是随着站点的扩容而改大这些倹{minProcessors服务器启动时创徏的处理请求的U程数应该够处理一个小量的负蝲。也是 _如果一天内每秒仅发?ơ单MӞq且每个hd处理需?U钟Q那么预先设|线E数?p够了。但在你的站点访问量较大时就需要设|更大的U? E数Q指定ؓ参数maxProcessors的倹{maxProcessors的g是有上限的,应防止流量不可控Ӟ或者恶意的服务dQ,从而导致超 Z虚拟Z用内存的大小。如果要加大q发q接敎ͼ应同时加大这两个参数。web server允许的最大连接数q受制于操作pȝ的内核参数设|,通常Windows?000个左叻ILinux?000个左叟?/p>

  在Tomcat5对这些参数进行了调整Q请看下表:
属性名
 描述
 
maxThreads
 Tomcat使用U程来处理接收的每个h。这个DCTomcat可创建的最大的U程数?br />  
acceptCount
 指定当所有可以用的处理h的线E数都被使用Ӟ可以攑ֈ处理队列中的h敎ͼ过q个数的h不予处理?br />  
connnectionTimeout
 |络q接时Q单位:毫秒。设|ؓ0表示怸时Q这栯|有隐患的。通常可设|ؓ30000毫秒?br />  
minSpareThreads
 Tomcat初始化时创徏的线E数?br />  
maxSpareThreads
 一旦创建的U程过q个|Tomcat׃关闭不再需要的socketU程?br />
最好的方式是多讄几次q且q行试Q观察响应时间和内存使用情况。在不同的机器、操作系l或虚拟机组合的情况下可能会不同Q而且q不是所有h的web站点的流量都是一LQ因此没有一刀切的Ҏ来确定线E数的倹{?br />
3.加速JSP~译速度

  当第一ơ访问一个JSP文gӞ它会被{换ؓJava serverlet源码Q接着被编译成Java字节码。你可以控制使用哪个~译器,默认情况下,Tomcat使用使用命o行javacq行使用的编译器。也可以使用更快的编译器Q但是这里我们将介绍如何优化它们?/p>

  另外一U方法是不要把所有的实现都用JSP面Q而是使用一些不同的java模板引擎变量。显然这是一个跨很大的军_Q但是事实证明至这 U方法是只得研究的。如果你想了解更多有兛_Tomcat可用的模板语言Q你可以参考Jason Hunter和William Crawford合著的《Java Servlet Programming 》一书(O'Reilly公司出版Q?/p>

  在Tomcat 4.0中可以用流行而且免费的Jikes~译器。Jikes~译器的速度要由于Sun的Java~译器。首先要安装JikesQ可讉Khttp://oss.software.ibm.com/pub/jikes 获得更多的信息)Q接着需要在环境变量中设|JIKESPATH包含pȝq行时所需的JAR文g。装好Jikes以后q需要设|让JSP~译servlet使用JikesQ需要修改web.xml文g中jspCompilerPlugin的|

<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>
org.apache.jasper.servlet.JspServlet
</servlet-class><init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>WARNING</param-value>
</init-param>
<init-param>
<param-name>jspCompilerPlugin</param-name>
<param-value>
org.apache.jasper.compiler.JikesJavaCompiler
</param-value>
</init-param>
<init-param>
<!-- <param-name>
org.apache.catalina.jsp_classpath
</param-name> -->
<param-name>classpath</param-name>
<param-value>
/usr/local/jdk1.3.1-linux/jre/lib/rt.jar:
/usr/local/lib/java/servletapi/servlet.ja
r</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>

 


在Tomcat 4.1Q或更高版本Q,JSP的编译由包含在Tomcat里面的AntE序控制器直接执行。这听v来有一点点奇怪,但这正是Ant有意Z的一部分Q有一 个API文指导开发者在没有启动一个新的JVM的情况下Q用Ant。这是用Antq行Java开发的一大优ѝ另外,q也意味着你现在能够在Ant 中用Q何javac支持的编译方式,q里有一个关于Apache Ant使用手册的javac page列表。用v来是Ҏ的,因ؓ你只需要在 元素中定义一个名字叫“compiler”Qƈ且在value中有一个支持编译的~译器名字,CZ如下Q?/p>


<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>
org.apache.jasper.servlet.JspServlet
</servlet-class>
<init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>WARNING</param-value>
</init-param>
<init-param>
<param-name>compiler</param-name>
<param-value>jikes</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>

 

Ant可用的编译器
名称
 别名
 调用的编译器
 
classic
 javac1.1, javac1.2
 Standard JDK 1.1/1.2 compiler
 
modern
 javac1.3, javac1.4
 Standard JDK 1.3/1.4 compiler
 
jikes
    The Jikes compiler
 
JVC Microsoft
 Microsoft command-line compiler from the Microsoft SDK for Java/Visual J++
 
KJC    The kopi compiler
 
GCJ    The gcj compiler (included as part of gcc)
 
SJ Symantec
 Symantec's Java compiler
 
extJavac
    Runs either the modern or classic compiler in a JVM of its own 

׃JSP面在第一ơ用时已经被编译,那么你可能希望在更新新的jsp面后马上对它进行编译。实际上Q这个过E完全可以自动化Q因为可以确认的是新的JSP面在生产服务器和在试服务器上的运行效果是一L?

     在Tomcat4的bin目录下有一个名为jspc的脚本。它仅仅是运行翻译阶D,而不是编译阶D,使用它可以在当前目录生成Java源文件。它是调试JSP面的一U有力的手段?/p>

  可以通过览器访问再认一下编译的l果。这样就保了文件被转换成serverletQ被~译了可直接执行。这样也准确地模仿了真实用户讉KJSP面Q可以看到给用户提供的功能。也抓紧q最后一M改出现的bugq且修改它J

  Tomcat提供了一U通过h来编译JSP面的功能。例如,你可以在览器地址栏中输入http://localhost:8080/examples/jsp/dates/date.jsp?jsp_precompile=trueQ这样Tomcat׃~译data.jsp而不是执行它。此丑֔手可得,不失ZU检验页面正性的捷径?/p>

  4. 其它

  前面我们提到q操作系l通过一些限制手D|防止恶意的服务攻击,同样Tomcat也提供了防止恶意d或禁止某些机器访问的讄?/p>

  Tomcat提供了两个参C你配|:RemoteHostValve 和RemoteAddrValve?

  通过配置q两个参敎ͼ可以让你qo来自h的主机或IP地址Qƈ允许或拒l哪些主?IP。与之类似的Q在Apache的httpd文g里有Ҏ个目录的允许/拒绝指定?

 

  例如你可以把Admin Web application讄成只允许本地讉KQ设|如下:

<Context path="/path/to/secret_files" ...>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"

allow="127.0.0.1" deny=""/>
</Context>

如果没有l出允许L的指定,那么与拒l主机匹配的L׃被拒l,除此之外的都是允许的。与之类|如果没有l出拒绝L的指定,那么与允怸机匹配的L׃被允许,除此之外的都是拒l的?/p>

? 定w计划

定w计划是在生环境中用Tomcat不得不提的提高性能的另一个重要的话题。如果你没有寚w期的|络量下的g和带宽做考虑的话那么无论你如何做配置修改和测试都无济于事?/font>

  q里先对提及的容量计划作一个简要的定义Q容量计划是指评估硬件、操作系l和|络带宽Q确定应用服务的服务范围Q寻求适合需求和软gҎ的软硬件的一Ҏ动。因此这里所说的软g不仅包括TomcatQ也包括与Tomcatl合使用的Q何第三方web服务器Y件?/font>

如果在购买Yg或部|系l前你对定w计划一无所知,不知道现有的软硬件环境能够支撑多的讉K量,甚至更糟直到你已l交付ƈ且在生环境上部|品后? 意识到配|有问题时再q行变更可能为时已晚。此时只能增加硬件投入,增加盘定w甚至购买更好的服务器。如果事先做了容量计划那么就不会搞的如此焦头烂额 了?/font>

  我们q里只介l与Tomcat相关的内宏V?/font>

  首先Z定Tomcat使用机器的容量计划,你应该从一下列表项目种着手研I和计划Q?/font>

  1. g

  采用什么样的硬件体p?需要多台计算机?使用一个大型的Q还是用多台小型机Q每个计机上用几个CPUQ? 使用多少内存Q用什么样的存储设备,I/O的处理速度有什么要求?怎样l护q些计算机?不同的JVM在这些硬件上q行的效果如何(比如IBM AIXpȝ只能在其设计的硬件系l上q行Q?

  2. |络带宽

  带宽的用极限是多少Qweb应用E序如何处理q多的请求?

  3. 服务端操作系l?/font>

  采用哪种操作pȝ作ؓ站点服务器最好?在确定的操作pȝ上用哪个JVM最好?例如QJVM在这U系l上是否支持本地多线E,对称多处理?哪种pȝ可web服务器更快、更E_Qƈ且更便宜。是否支持多CPUQ?
4. Tomcat定w计划

  以下介绍针对Tomcat做容量计划的步骤Q?/font>

  1Q?量化负蝲。如果站点已l徏立ƈq行Q可以用前面介l的工具模仿用户讉KQ确定资源的需求量?/font>

  2Q?针对试l果或测试过E中q行分析。需要知道那些请求造成了负载过重或者用过多的资源Qƈ与其它请求做比较Q这样就定了系l的瓉所在。例如:如果servlet在查询数据库的步骤上耗用较长的时_那么需要考虑使用~冲池来降低响应旉?/font>

  3Q? 定性能最低标准。例如,你不惌用户?0U来{待l果面的返回,也就是说甚至在达到访问量的极限时Q用L待的旉也不能超q?0U种Q从点击链接 到看到返W一条返回数据)。这个时间中包含了数据库查询旉和文件访问时间。同cM品性能在不同的公司可能有不同的标准Q一般最好采取同行中的最低标准或 对这个标准做估?/font>

  4Q? 定如何合理使用底层资源Qƈ逐一q行试。底层资源包括CPU、内存、存储器、带宽、操作系l、JVM{等。在各种生环境上都按顺序进行部|和试Q? 观察是否W合需求。在试Tomcat时尽量多采用几种JVMQƈ且调整JVM使用内存和TomcatU程池的大小q行试。同时ؓ了达到资源充分合理稳 定地使用的效果,q需针对试q程中出现的gpȝ瓉q行处理定合理的资源配|。这个过E最为复杂,而且一般由于没有可参考的值所以只能靠理论推断? l验ȝ?/font>

  5Q?如果通过W?步的反复试如果辑ֈ了最优的l合Q就可以在相同的生环境上部|品了?/font>

  此外应牢C定要文化你的测试过E和l果Q因为此后可能还会进行测试,q样可以拿以前的测试结果做为参考。另外测试过E要反复多次q行Q每ơ的条g可能都不一P因此只有记录下来才能q行l果比较和最x件的选择?/font>

  q样我们通过试扑ֈ了最好的l合方式Q各U资源得C合理的配|,pȝ的性能得到了极大的提升?/font>

? 附加资料
很显然本文也很难全面而详地阐述性能优化q程。如果你q行更多研究的话可能会把性能调优 做的更好Q比如JavaE序的性能调整、操作系l的调整、各U复杂环境与应用pȝ和其它所有与应用E序相关的东ѝ在q里提供一些文中提到的一些资源、文 中提到的相关内容的链接以及本文的一些参考资料?/font>

  1. Web性能试资料及工?/font>

  1Q?Jmeter Wiki首页QJmeterZ个开源的100%Java开发的性能试工具
  http://wiki.apache.org/jakarta-jmeter/

  2Q?Apache Benchmark使用说明
http://httpd.apache.org/docs-2.0/programs/ab.html

  3Q?一些Java相关试工具的介l,包含可以与Tomcat集成q行试的工?br /> http://blog.csdn.net/wyingquan/

  4Q?LoadRunner? 是一U预系l行为和性能的工业标准负蝲试工具。它通过模拟数据以千万计用户来实施ƈ发负载来Ҏ个企业架构进行测试,来帮助您?/font>

快的查找和发现问题?br /> http://www.mercury.com/us/products/performance-center/loadrunner/

 


  2. 文中介绍的相兛_容的介绍

  1Q?Apache 2.x + Tomcat 4.x做负载均衡,描述了如何利用jk配置集群的负载均衡?br /> http://raibledesigns.com/tomcat/index.html

  2Q?定w计划的制定,攉了许多有兛_定web站点定w计划的例子:
http://www.capacityplanning.com/

  3Q?评测Tomcat5负蝲q与集,
http://www.javaresearch.org/article/showarticle.jsp?column=556&thread=19777

  4Q?Apache与Tomcat的安装与整合之整合篇
http://www.javaresearch.org/article/showarticle.jsp?column=23&thread=18139

  5Q?性能试工具之研IӞ介绍了性能试工具的原理与思\
http://www.51testing.com/emagzine/No2_2.htm

  6Q?Java的内存泄?br /> http://www.matrix.org.cn/resource/article/409.html

  7Q?Web服务器和应用E序服务器有什么区别?
http://www.matrix.org.cn/resource/article/1429.html

  8Q?详细讲解性能中数据库集群的问?br /> http://www.theserverside.com/articles/article.tss?l=DB_Break





Ke 2009-11-26 10:19 发表评论
]]>
վ֩ģ壺 | ˮ| | ¡| ¤| | | | ͼ| ֶ| ̫| ݰ| ɽ| ˮ| ̨| ³ľ| Ͻ| ɽ| IJ| | ɾ| | | ֿ| | Т| Դ| ɽ| ̫| | ˫| ֶ| | ³ɽ| ν| | ʳ| | ͨ| ƽ| ˮ|