??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲成a人片在线观看国产,亚洲熟妇少妇任你躁在线观看无码,亚洲av激情无码专区在线播放 http://www.tkk7.com/sutao/category/24290.html用文字记录学习的体验Q?/description>zh-cnFri, 23 Nov 2007 09:09:37 GMTFri, 23 Nov 2007 09:09:37 GMT60Tomcat性能调整http://www.tkk7.com/sutao/articles/162665.html苏醄苏醄Fri, 23 Nov 2007 08:27:00 GMThttp://www.tkk7.com/sutao/articles/162665.htmlhttp://www.tkk7.com/sutao/comments/162665.htmlhttp://www.tkk7.com/sutao/articles/162665.html#Feedback0http://www.tkk7.com/sutao/comments/commentRss/162665.htmlhttp://www.tkk7.com/sutao/services/trackbacks/162665.htmlTomcat性能调整    文章指数:0  


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

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

1.压力试工具

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

大多数web压力试工具的实现原理都是通过重复的大量的面h来模拟多用户对被系l的q发讉KQ以此达C生压力的目的。生压力的手段都是通过录制或者是~写压力脚本Q这些脚本以多个q程或者线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种Ҏ的试工具?/span>

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

2.压力试工具介绍

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

  外部环境调整

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

  自n调整

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

  下面我们详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提高了将q?0%?0%?/span>

  可以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%?/span>

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

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

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

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

  JAVA_OPTS='-Xms256m -Xmx512m'

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

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

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

2.操作pȝ性能优化

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

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

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

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

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

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

  4.负蝲均衡

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

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

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

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

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

  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程?/span>

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

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

  在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数的倹{?/span>


3.加速JSP~译速度

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

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

  在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?/span>


<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有力的手段?/span>

  可以通过览器访问再认一下编译的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检验页面正性的捷径?/span>

  4. 其它

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

  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的?/span>

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

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

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

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

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

  1. g

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

  2. |络带宽

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

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

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

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

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

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

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

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

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

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

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

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

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

  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行为和性能的工业标准负蝲试工具。它通过模拟数据以千万计用户来实施ƈ发负载来Ҏ个企业架构进行测试,来帮助您更快的查扑֒发现问题?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 



苏醄 2007-11-23 16:27 发表评论
]]>
Tomcat集群与负载均?/title><link>http://www.tkk7.com/sutao/articles/161873.html</link><dc:creator>苏醄</dc:creator><author>苏醄</author><pubDate>Tue, 20 Nov 2007 07:42:00 GMT</pubDate><guid>http://www.tkk7.com/sutao/articles/161873.html</guid><wfw:comment>http://www.tkk7.com/sutao/comments/161873.html</wfw:comment><comments>http://www.tkk7.com/sutao/articles/161873.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/sutao/comments/commentRss/161873.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/sutao/services/trackbacks/161873.html</trackback:ping><description><![CDATA[<h1 id="pageName">Tomcat集群与负载均?/h1> <div id="eawmygy" class="feature">  在单一?a target="_blank">服务?/a>上执行WEB应用E序有一些重大的问题Q当<nobr oncontextmenu="return false;" onmousemove="kwM(1);" id="key1" onmouseover="kwE(event,1, this);" style="color: rgb(102,0,255); border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">|站</nobr>成功建成q开始接受大量请求时Q单一<nobr oncontextmenu="return false;" onmousemove="kwM(0);" id="key0" onmouseover="kwE(event,0, this);" style="color: rgb(102,0,255); border-bottom: 0px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">服务</nobr>器终I无法满需要处理的负荷量,所以就有点昑־有点力不从心了。另外一个常见的问题是会产生单点故障Q如果该服务器坏掉,那么|站qL法运作了?</div> <div id="acwquci" class="story"> <div id="scyacci" class="ad0">不论是因有较佳的扩充性还是容错能力,我们都会惛_一C上的服务器计机上执行WEB应用E序。所以,q时候我们就需要用?a target="_blank">集群</a>q一门技术了?br /> <br /> 在进入集?a target="_blank">pȝ</a>架构探讨之前Q先定义一些专门术语:<br /> 1. 集群(Cluster)Q是一l独立的计算机系l构成一个松耦合的多<a target="_blank">处理?/a>pȝQ它们之间通过|络实现q程间的通信。应用程序可以通过|络<a target="_blank">׃n内存</a>q行消息传送,实现分布式计机?<br /> 2. 负蝲均衡(Load Balance)Q先得从集群讲vQ集就是一l连在一L计算机,从外部看它是一个系l,各节点可以是不同?a target="_blank">操作pȝ</a>或不同硬件构成的计算机。如一个提供Web服务的集,对外界来看是一个大<a target="_blank">Web服务?/a>。不q集的节点也可以单独提供服务?br /> 3. 特点Q在现有|络l构之上Q负载均衡提供了一U廉h效的Ҏ扩展服务器带宽和增加吞吐量,加强|络数据处理能力Q提高网l的灉|性和可用性。集系l?Cluster)主要<nobr oncontextmenu="return false;" onmousemove="kwM(2);" id="key2" onmouseover="kwE(event,2, this);" style="color: rgb(102,0,255); border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">解决</nobr>下面几个问题Q?<br /> 高可靠性(HAQ:利用集群理软gQ当?a target="_blank">服务器故?/a>Ӟ<a target="_blank">备䆾</a>服务器能够自动接主服务器的工作Qƈ及时切换q去Q以实现对用L不间断服务?br /> 高性能计算QHPQ:卛_分利用集中的每一台计机的资源,实现复杂q算的ƈ行处理,通常用于U学计算领域Q比如基因分析,化学分析{?<br /> 负蝲qQ即把负载压力根据某U算法合理分配到集群中的每一台计机上,以减M服务器的压力Q降低对L务器的硬件和软g要求?br /> <br /> 目前比较常用的负载均衡技术主要有Q?<br />   1. Z<a target="_blank">DNS</a>的负载均?<br />   通过DNS服务中的随机名字解析来实现负载均衡,?a target="_blank">DNS服务?/a>中,可以为多个不同的地址配置同一个名字,而最l查询这个名字的客户机将在解析这个名字时得到其中一个地址。因此,对于同一个名字,不同的客h会得C同的地址Q他们也p问不同地址上的Web服务器,从而达到负载均衡的目的?<br /> <br />   2. 反向代理负蝲均衡 Q如Apache+JK2+Tomcatq种l合Q?br />   使用<a target="_blank">代理服务?/a>可以请求{发给内部的Web服务器,让代理服务器请求均匀地{发给多台内部Web服务器之一上,从而达到负载均衡的目的。这U代理方式与普通的代理方式有所不同Q标准代理方式是客户使用代理讉K多个外部Web服务器,而这U代理方式是多个客户使用它访问内部Web服务器,因此也被UCؓ反向代理模式?br /> <br />   3. ZNATQNetwork Address TranslationQ的负蝲均衡技?Q如<a target="_blank">Linux</a> Virtual ServerQ简ULVSQ?br />   |络<a target="_blank">地址转换</a>为在内部地址和外部地址之间q行转换Q以便具备内部地址的计机能访问外部网l,而当外部|络中的计算问地址转换<a target="_blank">|关</a>拥有的某一外部地址Ӟ地址转换|关能将其{发到一个映的内部地址上。因此如果地址转换|关能将每个q接均匀转换Z同的内部服务器地址Q此后外部网l中的计机各自与自己转换得到的地址上服务器q行通信Q从而达到负载分担的目的?br /> <br /> 介绍完上面的<a target="_blank">集群技?/a>之后Q下面就ZTomcat的集架构方案进行说明:<br /> <br /> 上面是采用了Apache httpd作ؓweb服务器的Q即作ؓTomcat的前端处理器Q根据具体情况而定Q有些情况下是不需要Apache httpd作ؓ web 服务器的Q如pȝ展现没有静态页面那׃需要Apache httpdQ那时可以直接用Tomcat作ؓweb 服务器来使用。用Apache httpd主要是它在处理静态页面方面的能力比Tomcat强多了?br /> 1?用户的网|览器做完本地 DNS和企业授权的DNS之的h/响应后,q时候企业授权的DNSQ即21cn BOSS DNSQ会l用h地的DNS服务器提供一个NATh分配器(即网养IIP?br /> <br /> 2?NAT分配器,它会Ҏ特定的分配算法,来决定要连接交l哪一台内?Apache httpd来处理请求。大多数的NATh分配器提供了定w能力Q根据侦各UWEB服务器的失效状况Q停止将h分配l已l宕掉的服务器。ƈ且有些分配器q可以监到WEB服务器机器的负蝲情况Qƈ请求分配给负蝲最ȝ服务器等{。Linux Virtual Server是一个基于Linux操作pȝ上执行的VS-NAT开源Y件套Ӟ而且它有丰富的功能和良好的说明文件。商业硬?a target="_blank">解决Ҏ</a> Foundry Networks的ServerIron是目前业界公认最佳的h分配器之一?br /> <br /> 3?Apache httpd + Mod_JK2在这里是作ؓ负蝲均衡器,那ؓ什么要做集呢Q如果集系l要具备定w能力Q以便在M单一的硬件或软glg失效时还?00%可用Q那么集系l必L有单Ҏ障之忧。所以,不能只架设一台有mod_jk2的Apache httpdQ因为如?httpd或mod_jk2失效了,不会再有请求被会送交CQ何一个Tomcat 实例。这U情况下QApache httpd是瓶劲Q特别在讉K量大的网站?br /> <br /> 4?Mod_JK2负蝲均衡与故障复原,军_把Apache httpd当成web服务器,而且使用mod_jk2请求传送给TomcatQ则可以使用mod_jk2的负载均衡与定w功能。在集群pȝ中,带有 mod_jk2的Apache httpd可以做的事情包括Q?br /> A?请求分配至一或多个Tomcat实例?br /> 你可以在mod_jk2的workers.properties文g中,讑֮许多Tomcat实例Qƈ赋于每个实例一个lb_factor|以作求分配的加权因子?br /> <br /> B?侦测Tomcat实例是否p|<br /> 当Tomcat实例的连接器服务不再响应Ӟmod_jk2会及时侦到Qƈ停止请求送给它。其他的Tomcat实例则会接受失效实例的负载?br /> <br /> C?侦测Tomcat实例在失效后的何时恢?br /> 因连接器服务失效Q而停止将h分配lTomcat实例之后Qmod_jk2会周期性地查是否已恢复使用性,q自动将其加入现行的Tomcat实例池中?br /> <br /> 5?Tomcat中的集群原理是通过l播的方式进行节点的查找q用TCPq接q行会话的复制。这里提CZ下就是,Ҏ个请求的处理QTomcat都会q行会话复制Q复制后的会话将会慢慢变得庞大?br /> <br /> 6?Mod_jk2同时支持会话亲和和会话复制。在tomcat 5中如何实C话亲和和会话复制Q把server.xml中的<cluster></cluster>标签L实C话亲和,?cluster></cluster>标签加上实C话复制?br /> <br /> 7?会话亲和Q就是表C来自同会话的所有请求都q同的Tomcat 实例来处理,q种情况下,如果Tomcat实例或所执行的服务器机器失效Q也会失Servlet的会话数据。即使在<nobr oncontextmenu="return false;" onmousemove="kwM(3);" id="key3" onmouseover="kwE(event,3, this);" style="color: rgb(102,0,255); border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; text-decoration: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">集群</nobr>pȝ中执行更多的Tomcat实例Q也永远不会复制会话数据。这h提高集群性能的一U方案,但不具备有容错能力了?br /> <br /> 8?使用会话复制Q则当一个Tomcat实例宕掉Ӟ׃臛_q有另一个Tomcat实例保有一份会话状态数据,因而数据不会失。但性能会有所降低?/div> </div> <img src ="http://www.tkk7.com/sutao/aggbug/161873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/sutao/" target="_blank">苏醄</a> 2007-11-20 15:42 <a href="http://www.tkk7.com/sutao/articles/161873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache mod_rewrite规则重写的标志一?/title><link>http://www.tkk7.com/sutao/articles/158760.html</link><dc:creator>苏醄</dc:creator><author>苏醄</author><pubDate>Wed, 07 Nov 2007 03:03:00 GMT</pubDate><guid>http://www.tkk7.com/sutao/articles/158760.html</guid><wfw:comment>http://www.tkk7.com/sutao/comments/158760.html</wfw:comment><comments>http://www.tkk7.com/sutao/articles/158760.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/sutao/comments/commentRss/158760.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/sutao/services/trackbacks/158760.html</trackback:ping><description><![CDATA[Apache mod_rewrite规则重写的标志一?br /> <br /> 1) R[=code](force redirect) 强制外部重定?br />    强制在替代字W串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,用~省?02 HTTP状态码?br /> 2) F(force URL to be forbidden)用URL,q回403HTTP状态码?br /> 3) G(force URL to be gone) 强制URL为GONEQ返?10HTTP状态码?br /> 4) P(force proxy) 强制使用代理转发?br /> 5) L(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写?br /> 6) N(next round) 重新从第一条规则开始运行重写过E?br /> 7) C(chained with next rule) 与下一条规则关?br />    如果规则匚w则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都蟩q?br /> 8) T=MIME-type(force MIME type) 强制MIMEcd<br /> 9) NS (used only if no internal sub-request) 只用于不是内部子h<br /> 10) NC(no case) 不区分大写<br /> 11) QSA(query string append) q加h字符?br /> 12) NE(no URI escaping of output) 不在输出转义Ҏ字符<br />     例如QRewriteRule /foo/(.*) /bar?arg=P1"%3d$1 [R,NE] 能正确的将/foo/zoo转换?bar?arg=P1=zed<br /> 13) PT(pass through to next handler) 传递给下一个处?br />     例如Q?br />        RewriteRule ^/abc(.*) /def$1 [PT] # 会交给/def规则处理<br />        Alias /def /ghi<br /> 14) S=num(skip next rule(s)) 跌num条规?br /> 15) E=VAR:VAL(set environment variable) 讄环境变量<br /> replace(Content,'"n','<br>') <img src ="http://www.tkk7.com/sutao/aggbug/158760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/sutao/" target="_blank">苏醄</a> 2007-11-07 11:03 <a href="http://www.tkk7.com/sutao/articles/158760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>L实现Apache,Tomcat集群和负载均?http://www.tkk7.com/sutao/articles/152568.html苏醄苏醄Sat, 13 Oct 2007 06:51:00 GMThttp://www.tkk7.com/sutao/articles/152568.htmlhttp://www.tkk7.com/sutao/comments/152568.htmlhttp://www.tkk7.com/sutao/articles/152568.html#Feedback0http://www.tkk7.com/sutao/comments/commentRss/152568.htmlhttp://www.tkk7.com/sutao/services/trackbacks/152568.html0Q?环境说明

       Apache  :apache_2.0.55     1 ?/p>

       Tomcat:  apache-tomcat-5.5.17 (zip? 2?/p>

       mod_jk:: mod_jk-apache-2.0.55.so  1?/p>

W一部分Q负载均?/strong>

    负蝲均衡Q就是apache客戯求均衡的分给tomcat1,tomcat2....d?/p>

   1.安装apche,tomcat

   http://httpd.apache.org/ 下蝲Apache 2.0.55

    http://tomcat.apache.org/download-55.cgi 下蝲tomcat5.5 zip版本Q解压即可,l色版)

   http://apache.justdn.org/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/  下蝲mod_jk,注意?nbsp; apache版本匚w

   按照jdk,我的路径?E:"ide"apache"Apache2

   解压两䆾Tomcat, 路径分别?E:"ide"tomcat1,E:"ide"tomcat2

1.gif

下蝲mod_jk

2.gif

2.修改Apache配置文ghttp.conf

   在apache安装目录下conf目录中找到http.conf

   在文件最后加上下面一句话可以了

  include "E:"ide"apache"Apache2"conf"mod_jk.conf"

3.gif
2. http.conf 同目录下新徏mod_jk.conf文gQ内容如?/strong>
  
#加蝲mod_jk Module
LoadModule jk_module modules/mod_jk-apache-2.0.55.so
#指定 workers.properties文g路径
JkWorkersFile conf/workers.properties
#指定那些h交给tomcat处理,"controller"为在workers.propertise里指定的负蝲分配控制?/div>
JkMount /*.jsp controller
3.在http.conf同目录下新徏 workers.properties文gQ内容如?/strong>
 
worker.list = controller,tomcat1,tomcat2  #server 列表
#========tomcat1========
worker.tomcat1.port=8009         #ajp13 端口P在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost  #tomcat的主机地址Q如不ؓ本机Q请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1   #server的加权比重,D高,分得的请求越?/div>
#========tomcat2========
worker.tomcat2.port=9009       #ajp13 端口P在tomcat下server.xml配置,默认8009
worker.tomcat2.host=localhost  #tomcat的主机地址Q如不ؓ本机Q请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1   #server的加权比重,D高,分得的请求越?/div>

#========controller,负蝲均衡控制?=======
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2   #指定分担h的tomcat
worker.controller.sticky_session=1
4.修改tomcat配置文gserver.xml
如果你在不同电脑上安装tomcat,tomcat的安装数量ؓ一个,可以不必修改tomcat配置文g
我这里是在同一台电脑上安装两个tomcatQ所以需要更改其中一个的讄
打开tomcat2/conf/server.xml文g
4.gif
5.gif
6.gif
5.~写一个测试jsp
建立一个目录test.里面新徏一个test.jsp,内容?/div>
<%
   System.out.println("===========================");
%>
把test攑ֈtomcat1,tomcat2的webapps?/div>
6.启动apache,tomcat1,tomcat2,q行试
通过 http://localhost/test/test.jsp 讉KQ查看tomcat1的窗口,可以看到打印了一?=========="
再刷Cơ,tomcat2也打C一条,再刷斎ͼ可以看到h会被tomcat1,tomcat2轮流处理,实现了负载均?br /> 7.gif

W二部分Q配|集?/strong>
   只配|负载均衡还不行Q还要session复制Q也是说其中Q何一个tomcat的添加的sessionQ是要同步复制到其它tomcatQ?集群内的tomcat都有相同的session
1. 修改tomcat1, tomcat2的server.xml,集部分配|的在注释符删掉,q将tomcat2?001端口改ؓ4002Q以避免与tomcat冲突Q当Ӟ如果是两台电脑,是不用改端口的,L注释W即?/div>   
8.gif
9.gif
10.gif
11.gif
2Q修Ҏ试项目test
修改test.jsp,内容如下
  <%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
  out.println("<br> ID " + session.getId()+"<br>");
  // 如果有新?Session 属性设|?br />   String dataName = request.getParameter("dataName");
  if (dataName != null && dataName.length() > 0) {
     String dataValue = request.getParameter("dataValue");
     session.setAttribute(dataName, dataValue);
  }
  out.print("<b>Session 列表</b>");
  Enumeration e = session.getAttributeNames();
  while (e.hasMoreElements()) {
     String name = (String)e.nextElement();
     String value = session.getAttribute(name).toString();
     out.println( name + " = " + value+"<br>");
         System.out.println( name + " = " + value);
   }
%>
  <form action="index.jsp" method="POST">
    名称:<input type=text size=20 name="dataName">
     <br>
    ?<input type=text size=20 name="dataValue">
     <br>
    <input type=submit>
   </form>
</body>
</html>
然后在test 新徏WEB-INF目录QWEB-INF下新建web.xml,内容如下
注意Q在你的应用的web.xml加入  <distributable/>卛_
ok,讲test复制到tomcat1,tomcat2的webapps下,重启apache,tomcat1,tomcat2,
新徏一?名称?xiaoluo  ,gؓ cdut 的session,提交查询Q新开一个ieH口Q再提交查询Q如图,可以看到Q两个tomcat 是负载均衡,q且session同步?/div>
12.gif
需要注意的是,配置集群时设|jvmRouteӞ要把原来的Engine注释掉,L上面那一行的注释Q也是修改?br />  <!-- You should set jvmRoute to support load-balancing via JK/JK2 ie :    -->
    <Engine name="Standalone" defaultHost="localhost" debug="0" jvmRoute="tomcat1">  


苏醄 2007-10-13 14:51 发表评论
]]>apache+tomcat+mysql负蝲均衡和集?txtQ-一pd的流E?/title><link>http://www.tkk7.com/sutao/articles/131133.html</link><dc:creator>苏醄</dc:creator><author>苏醄</author><pubDate>Wed, 18 Jul 2007 10:29:00 GMT</pubDate><guid>http://www.tkk7.com/sutao/articles/131133.html</guid><wfw:comment>http://www.tkk7.com/sutao/comments/131133.html</wfw:comment><comments>http://www.tkk7.com/sutao/articles/131133.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/sutao/comments/commentRss/131133.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/sutao/services/trackbacks/131133.html</trackback:ping><description><![CDATA[<h2>apache+tomcat+mysql负蝲均衡和集?txt</h2>                                        <p style="COLOR: #0000ff"></p> <p style="COLOR: #0000ff">扬子?发表?2006-4-11 15:12:38 <br> <br>前言Q?br>公司开发了一个网站,估计最高在Uh数是3万,q发人数最?00人。开发的|站是否能否承受q个压力Q如何确保网站的负荷没有问题Q经q研I决定如下:<br>Q?Q?采用负蝲q和集技术,初步机构采用Apache+Tomcat的机技术?br>Q?Q?采用压力试工具Q测试压力。工hLoadrunner?br>g环境搭徏Q?br>Z能够q行压力试Q需要搭Z个环境。刚开始时Q测试在公司局域网内进行,但很快发C一个问题,即一个脚本的压力试l果每次都不一Pq且差别很大。原来是受公司网l的影响Q于是决定搭Z个完全隔ȝ局域网试。搭建后的局域网配置如下Q?br>Q?Q?|络速度Q?00M<br>Q?Q?三台服务器:<br>负蝲服务?Q操作系lwindows2003Q?br>Tomcat服务器:操作pȝwindows2000 Professional<br>数据库服务器Q操作系lwindows2000 Professional<br>三台机器的cpu 2.4 G, 内存 1G?br>软g环境搭徏Q?br>软g的版本如下:<br>Apache 版本Q?.054Q?br>Tomcat5.0.30,<br>mysql Q?.1.14.<br>JDK1.5<br>压力试工具QLoadrunner7.8?</p> <p style="COLOR: #0000ff">负蝲qҎ如下Q?br>一台机器(操作pȝ2003Q安装apacheQ作载服务器Qƈ安装tomcat作ؓ一个workerQ一个单独安装tomcatQ作为第二个workerQ剩下的一台单独作为数据库服务器?br>Apache和tomcat的负载^衡采用JK1.2.14Q没有采?.0Q主要是2.0不再l护了)?br>集群ҎQ?br>采用Tomcat本n的集方案。在server.xml配置?br>压力试问题Q?br>压力试后,发现了一些问题,C一列出来:<br>Q?Q采用Tocmat集群后,速度变得很慢。因为集后Q要q行session复制Q导致速度较慢。Tomcatd的复Ӟ目前不支持application 复制。复制的作用Q主要用来容错的Q即一台机器有故障后,apache可以把请求自动{发到另外一个机器。在定w和速度的考虑上,我们最l选择速度Q去掉了Tomcat集群?br>Q?Q?操作pȝ最大ƈ发用L限制Q?br>Z采用|站的压力,我们开始的时候,仅测试Tomcat的最大负载数?Tomcat服务器安装的操作pȝ是windows2000 Professional。当我们用压力测试工Pq发试Ӟ发现只要过15个ƈ发用P会经常出现无法连接服务器的情c经q研IӞ发现是操作系l的问题Qwindows2000 Professional 支持的ƈ发访问用h限,默认的好像是15个。于是我们把操作pȝ全部采用windows2003 server版本?br>Q?Q?数据库连接池的问题:<br>试数据库连接性能Ӟ发现数据库连接速度很慢。每增加一些用Pq接性能差了很多。我们采用的数据库连接池是DBCPQ默认的初始化ؓ50个,应该不会很慢吧。查询数据库的连接数Q发现初始化Q只初始化一个连接。ƈ发增加一个用hQ程序就会重新创Z个连接,Dq接很慢。原因就在这里了。如何解军_Q偶在JDK1.4下的Tomcat5.0.30下执行数据库q接压力试Q发现速度很快Q程序创建数据库q接的速度也是很快的。看来JDK1.5?JDBC驱动E序有问题。于是我们修?JDK的版本ؓ1.4.</p> <p style="COLOR: #0000ff">Q?Q?C3P0和DBCP<br>C3P0是Hibernate3.0默认的自带数据库q接池,DBCP是Apache开发的数据库连接池。我们对q两U连接池q行压力试ҎQ发现在q发300个用户以下时QDBCP比C3P0q_旉?U左叟뀂但在ƈ?00个用hQ两者差不多?/p> <p style="COLOR: #0000ff">速度上虽然DBCP比C3P0快些Q但是有BUGQ当DBCP建立的数据库q接Q因为某U原因断掉后QDBCP不会再重新创徏新的q接Q导致必重新启动Tomcat才能解决问题。DBCP的BUG使我们决定采用C3P0作ؓ数据库连接池?br>调整后的ҎQ?br>操作pȝWindows2003 server<<apache使用mod_jk.soQ不可能是windows>>版本<br>JDK1.4<br>Tomcat 5.0.30<br>数据库连接池C3P0<br>仅采用负载^衡,不采用集?br>软g的配|:<br>Apache配置Q主要配|httpd.conf和新增加的文件workers.properties<br>Httpd.confQ?br>#一个连接的最大请求数?br>MaxKeepAliveRequests 10000 <br>#NT环境Q只能配|这个参数来提供性能<br><IfModule mpm_winnt.c> <br>#每个q程的线E数Q最?920。NT只启动父子两个进E,不能讄启动多个q程<br>ThreadsPerChild 1900 <br>每个子进E能够处理的最大请求数<br>MaxRequestsPerChild 10000<br></IfModule></p> <p style="COLOR: #0000ff"># 加蝲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>#h分发Q对jsp文gQ?do{动态请求交由tomcat处理<br>DocumentRoot "C:/Apache/htdocs"<br>JkMount /*.jsp loadbalancer<br>JkMount /*.do loadbalancer<br>JkMount /servlet/* loadbalancer<br>#xLLookupQ如果ؓonQ很影响性能Q可以有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 style="COLOR: #0000ff"><IfModule mod_cache.c><br>CacheForceCompletion 100<br>CacheDefaultExpire 3600<br>CacheMaxExpire 86400<br>CacheLastModifiedFactor 0.1</p> <p style="COLOR: #0000ff"><IfModule mod_disk_cache.c><br>CacheEnable disk /<br>CacheRoot c:/cacheroot<br>CacheSize 327680<br>CacheDirLength 4<br>CacheDirLevels 5<br>CacheGcInterval 4<br></IfModule><br><IfModule mod_mem_cache.c><br>CacheEnable mem /<br>MCacheSize 8192<br>MCacheMaxObjectCount 10000<br>MCacheMinObjectSize 1<br>MCacheMaxObjectSize 51200<br></IfModule><br></IfModule><br>worker. Properties文g<br>#<br># workers.properties Q可以参?br><a _base_ _base_target="original">http://jakarta.apache.org/tomcat/connectors-doc/config/workers.html</a> <br># In Unix, we use forward slashes:<br>ps=</p> <p style="COLOR: #0000ff"># list the workers by name</p> <p style="COLOR: #0000ff">worker.list=tomcat1, tomcat2, loadbalancer</p> <p style="COLOR: #0000ff"># ------------------------<br># First tomcat server<br># ------------------------<br>worker.tomcat1.port=8009<br>worker.tomcat1.host=localhost<br>worker.tomcat1.type=ajp13</p> <p style="COLOR: #0000ff"># Specify the size of the open connection cache.<br>#worker.tomcat1.cachesize</p> <p style="COLOR: #0000ff">#<br># Specifies the load balance factor when used with<br># a load balancing worker.<br># Note:<br># ----> lbfactor must be > 0<br># ----> Low lbfactor means less work done by the worker.<br>worker.tomcat1.lbfactor=900</p> <p style="COLOR: #0000ff"># ------------------------<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 style="COLOR: #0000ff"># Specify the size of the open connection cache.<br>#worker.tomcat1.cachesize</p> <p style="COLOR: #0000ff">#<br># Specifies the load balance factor when used with<br># a load balancing worker.<br># Note:<br># ----> lbfactor must be > 0<br># ----> Low lbfactor means less work done by the worker.<br>worker.tomcat1.lbfactor=2000</p> <p style="COLOR: #0000ff"># ------------------------<br># Load Balancer worker<br># ------------------------</p> <p style="COLOR: #0000ff">#<br># The loadbalancer (type lb) worker performs weighted round-robin<br># load balancing with sticky sessions.<br># Note:<br># ----> 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 style="COLOR: #0000ff">#<br># END workers.properties<br>#</p> <p style="COLOR: #0000ff">Tomcat1配置:<br><!--配置server.xml<br>L8080端口Q即注释掉如下代码:--><br><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" /></p> <p style="COLOR: #0000ff"><!--配置8009端口如下Q?-><br><Connector port="8009" <br>maxThreads="500" minSpareThreads="400" maxSpareThreads="450"<br>enableLookups="false" redirectPort="8443" debug="0"<br>protocol="AJP/1.3" /><br><!--配置引擎--> <br><Engine name="Catalina" defaultHost="localhost" debug="0" jvmRoute="tomcat1"></p> <p style="COLOR: #0000ff">启动内存配置,开发configure tomcatE序卛_配置Q?br>Initial memory pool: 200 M<br>Maxinum memory pool:300M<br>Tomcat2配置Q?br>配置和tomcat1差不多,需要改动的地方如下Q?br><!--配置引擎--> <br><Engine name="Catalina" defaultHost="localhost" debug="0" jvmRoute="tomcat2"></p> <p style="COLOR: #0000ff">启动内存配置,开发configure tomcatE序卛_配置Q?br>Initial memory pool: 512 M<br>Maxinum memory pool:768M<br>Mysql配置Q?br>ServercdQDedicated MySQL Server Machine <br>Database usage:Transational Database Only<br>q发q接数量QOnline Transaction Processing(OLTP)<br>字符集:UTF8<br>数据库连接池的配|:<br>我们采用的是spring 框架Q配|如下:<br><property name="hibernateProperties"><br><props><br><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><br><prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop><br><prop key="hibernate.connection.url">jdbc:mysql://202.88.1.103/db</prop> <br><prop key="hibernate.connection.username">sa</prop><br><prop key="hibernate.connection.password"></prop></p> <p style="COLOR: #0000ff"><prop key="hibernate.show_sql">false</prop><br><prop key="hibernate.use_sql_comments">false</prop></p> <p style="COLOR: #0000ff"><prop key="hibernate.cglib.use_reflection_optimizer">true</prop><br><prop key="hibernate.max_fetch_depth">2</prop></p> <p style="COLOR: #0000ff"><prop key="hibernate.c3p0.max_size">200</prop><br><prop key="hibernate.c3p0.min_size">5</prop><br><prop key="hibernate.c3p0.timeout">12000</prop><br><prop key="hibernate.c3p0.max_statements">50</prop><br><prop key="hibernate.c3p0.acquire_increment">1</prop> <br></props><br></property><br>其他的没有额外配|?br>LoadRunner 常见问题Q?br>Q?Qsofeware caused connctionQ这U情况,一般是脚本有问题,或者loadrunner有问题。解x法:重新启动机器Q或者重新录制脚本,估计是loadrunner的bug?br>Q?Qcannot connect to server:无法q接到服务器。这U情冉|服务器的配置有问题,服务器无法承受过多的q发q接了。需要优化服务器的配|,<br>如操作系l采用windows 2003 serverQ?br>优化tomcat配置QmaxThreads="500" minSpareThreads="400" maxSpareThreads="450"。但是tomcat 最多支?00个ƈ发访?br>优化apache配置Q?br>ThreadsPerChild 1900 <br>MaxRequestsPerChild 10000<br>其他的错误如Q?br>Action.c(10): Error -27791: Server has shut down the connection prematurely<br>HTTP Status-Code=503 (Service Temporarily Unavailable)<br>一般都是由于服务器配置不够好引LQ按照问题(2Q处理,如果仍旧不行Q需要优化硬件和调整E序了?br>Apache问题Q?br>Q?Q?File does not exist: C:/Apache/htdocs/favicon.icoQ?br>q个问题是apacheQhtdocs目录没有favicon.ico文g引v的,该文件是|站的图标,仅在firefox,myIE{浏览器出现?br>Q?Q?囄无法昄Q?br>配置apache后,却无法显C图片?br>解决ҎQ把E序的图片,按照E序l构copy到apache的htdocs目录下?br>Q?Q?无法处理hQ?br>当我们输?***.do 命o后,apache返回错误信息,而连接tomcat却没有问题。原因是没有?do命o转发ltomcat处理。解x法如下:<br>在apache配置文g中配|如下内容:<br>DocumentRoot "C:/Apache/htdocs"<br>JkMount /*.jsp loadbalancer<br>JkMount /*.do loadbalancer</p> <p style="COLOR: #0000ff"><br>ȝQ?br>|站的压力测试,涉及的知识面挺广的,不仅要熟悉压力测试工Pq要知道如何配置和优化应用服务器和数据库Qƈ且需要知道如何优化网l、操作系l、硬件系l?br>试中不仅要善于发现问题Q要知道如何解决。最重要的一点,要有良好的测试方法。刚开始测试时Q可以从最单的试脚本入手Q不需要太复杂的脚本,q样便于发现问题。如我们刚开始时Q就从一个简单的下蝲登陆界面的脚本入手,试一个tomcat的压力负载。一个简单的获取登陆的脚本,帮助我们优化?tomcat的配|;后来再测试数据库q接Q也是一个简单的数据库连接脚本,帮助我们优化了数据库q接池;然后利用q些单的脚本Q测试apache的负载^衡,优化了apache配置。最后运行复杂的脚本Q模拟多U角色的用户在不同时间下的处理,以测试网站压力负载?br> </p> <p style="COLOR: #0000ff"></p> <p style="COLOR: #0000ff"><br>DBCP使用apache的对象池ObjectPool作ؓq接池的实现Q在构造GenericObjectPoolӞ会生成一个内嵌类EvictorQ实现自Runnable接口。如果_timeBetweenEvictionRunsMillis大于0Q每q?_timeBetweenEvictionRunsMillis毫秒Evictor会调用evict()ҎQ检查对象的闲置旉是否大于 _minEvictableIdleTimeMillis毫秒Q_minEvictableIdleTimeMillis于{于0时则忽略Q默认ؓ30 分钟Q,是则销毁此对象Q否则就Ȁzdƈ校验对象Q然后调用ensureMinIdleҎ查确保池中对象个C于_minIdle。在调用 returnObjectҎ把对象放回对象池Q首先检查该对象是否有效Q然后调用PoolableObjectFactory 的passivateObjectҎ使对象处于非zd状态。再查对象池中对象个数是否小于_maxIdleQ是则可以把此对象放回对象池Q否则销毁此对象</p> <p style="COLOR: #0000ff">q有几个很重要的属性,_testOnBorrow、_testOnReturn、_testWhileIdleQ这些属性的意义是取得、返回对象和I闲时是否进行验证,查对象是否有效,默认都ؓfalse即不验证。所以当使用DBCPӞ数据库连接因为某U原因断掉后Q再从连接池中取得连接又不进行验证,q时取得的连接实际已l时无效的数据库q接了。网上很多说DBCP的bug应该都是如此吧,只有把这些属性设为trueQ再提供 _validationQuery语句可以保证数据库q接始终有效了,oracle数据库可以用SELECT COUNT(*) FROM DUALQ不qDBCP要求_validationQuery语句查询的记录集必须不ؓI,可能q也可以一个小的BUGQ其实只?_validationQuery语句执行通过可以了?/p> <img src ="http://www.tkk7.com/sutao/aggbug/131133.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/sutao/" target="_blank">苏醄</a> 2007-07-18 18:29 <a href="http://www.tkk7.com/sutao/articles/131133.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ZDNS的负载均?-一个域名绑定多个IPhttp://www.tkk7.com/sutao/articles/131132.html苏醄苏醄Wed, 18 Jul 2007 10:28:00 GMThttp://www.tkk7.com/sutao/articles/131132.htmlhttp://www.tkk7.com/sutao/comments/131132.htmlhttp://www.tkk7.com/sutao/articles/131132.html#Feedback0http://www.tkk7.com/sutao/comments/commentRss/131132.htmlhttp://www.tkk7.com/sutao/services/trackbacks/131132.html1Q基于特定服务器软g的负载均?---- q种技术是利用|络协议的重定向功能来实现负载均衡的Q例如在Http协议中支持定位指令,接收到这个指令的览器将自动重定向到该指令指明的另一?URL上。由于和执行服务h相比Q发送定位指令对Web服务器的负蝲要小得多Q因此可以根据这个功能来设计一U负载均衡的服务器。一旦Web服务器认q负蝲较大Q它׃再直接发送回览器请求的|页Q而是送回一个定位指令,让浏览器L务器集群中的其他服务器上获得所需要的|页。在q种方式下,服务器本w必L持这U功能,然而具体实现v来却有很多困难,例如一台服务器如何能保证它重定向过的服务器是比较空闲的Qƈ且不会再ơ发送定位指令?定位指o和浏览器都没有这斚w的支持能力,q样很容易在览器上形成一U死循环。因此这U方式实际应用当中ƈ不多见,使用q种方式实现的服务器集群软g也较?
---- 2Q基于DNS的负载均?---- DNS负蝲均衡技术是最早的负蝲均衡解决ҎQ它是通过DNS服务中的随机名字解析来实现的Q在DNS服务器中Q可以ؓ多个不同的地址配置同一个名字,而最l查询这个名字的客户机将在解析这个名字时得到其中的一个地址。因此,对于同一个名字,不同的客h会得C同的地址Q它们也p问不同地址上的Web 服务器,从而达到负载均衡的目的?

---- q种技术的优点是,实现单、实施容易、成本低、适用于大多数TCP/IP应用Q但是,其缺点也非常明显Q首先这U方案不是真正意义上的负载均衡,DNS 服务器将Httphq_地分配到后台的Web服务器上Q而不考虑每个Web服务器当前的负蝲情况Q如果后台的Web服务器的配置和处理能力不同,最慢的 Web服务器将成ؓpȝ的瓶颈,处理能力强的服务器不能充分发挥作用;其次未考虑定wQ如果后台的某台Web服务器出现故障,DNS服务器仍然会把DNS h分配到这台故障服务器上,D不能响应客户端。最后一Ҏ致命的,有可能造成相当一部分客户不能享受Web服务Qƈ且由于DNS~存的原因,所造成的后果要持箋相当长一D|?一般DNS的刷新周期约?4时)。所以在国外最新的中心Web站点Ҏ中,已经很少采用q种Ҏ了?

---- 3.Z四层交换技术的负蝲均衡 ---- q种技术是在第四层交换Z讄Web服务的虚拟IP地址Q这个虚拟IP地址是DNS服务器中解析到的Web服务器的IP地址Q对客户端是可见的。当客户讉K此Web应用Ӟ客户端的Httph会先被第四层交换机接收到Q它基于第四层交换技术实时检后台Web服务器的负蝲Q根据设定的法q行快速交换。常见的法有轮询、加权、最连接、随机和响应旉{?

---- 4Q基于七层交换技术的负蝲均衡 ---- ZW七层交换的负蝲均衡技术主要用于实现Web应用的负载^衡和服务质量保证。它与第四层交换机比较v来有许多优势Q第七层交换Z仅能?TCP/IP数据包的TCP和UDP端口P从而{发给后台的某台服务器来处理,而且能从会话层以上来分析Httph的URLQ根据URL的不同将不同的Httph交给不同的服务器来处?可以具体到某一cLӞ直至某一个文?Q甚臛_一个URLh可以让多个服务器来响应以分担负蝲(当客戯问某一个URLQ发起HttphӞ它实际上要与服务器徏立多个会话连接,得到多个对象Q例?txt/.gif/.jpg文档Q当q些对象都下载到本地后,才组成一个完整的面)?

---- 5Q站炚w像技?---- 以上几种负蝲均衡技术主要应用于一个站点内的服务器,但是׃一个站Ҏ入Internet的带宽是有限的,因此可以把负载均衡技术开始应用于不同的网l站点之_q就是站炚w像技术,站点镜像技术实际上利用了DNS负蝲均衡技术?/ca>
参考资料:
http://www.iopoo.cn/help/pt.htm






苏醄 2007-07-18 18:28 发表评论
]]>谈Web服务器的负蝲均衡技?/title><link>http://www.tkk7.com/sutao/articles/131130.html</link><dc:creator>苏醄</dc:creator><author>苏醄</author><pubDate>Wed, 18 Jul 2007 10:17:00 GMT</pubDate><guid>http://www.tkk7.com/sutao/articles/131130.html</guid><wfw:comment>http://www.tkk7.com/sutao/comments/131130.html</wfw:comment><comments>http://www.tkk7.com/sutao/articles/131130.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/sutao/comments/commentRss/131130.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/sutao/services/trackbacks/131130.html</trackback:ping><description><![CDATA[<div class="qwaeiwu" id=art_top1 style="COLOR: #0000ff"> <div class="wmoseua" id=art_top style="COLOR: #0000ff"> <div class="geqcmma" id=art_title style="COLOR: #0000ff">[技术]谈Web服务器的<a name=baidusnap0 _base_></a><strong style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">负蝲均衡技?/strong></div> </div> </div> <div class="owimyoe" id=art_center style="COLOR: #0000ff"> </div> <div id="qqcuyou" class=text1 id=art_text style="COLOR: #0000ff">  当前Q无论在企业|、园区网q是在广域网如Internet上,业务量的发展都超Zq去最乐观的估计,上网热潮风v云涌Q新的应用层ZIP即按照当时最优配|徏讄|络Q也很快会感到吃不消。尤其是各个|络的核心部分,其数据流量和计算强度之大Q得单一讑֤Ҏ无法承担Q而如何在完成同样功能的多个网l设备之间实现合理的业务量分配,使之不致于出C台设备过忙、而别的设备却未充分发挥处理能力的情况Q就成了一个问题,负蝲均衡机制也因此应q而生?<br><br>  负蝲均衡建立在现有网l结构之上,它提供了一U廉h效的Ҏ扩展服务器带宽和增加吞吐量,加强|络数据处理能力Q提高网l的灉|性和可用性。它主要完成以下dQ解决网l拥塞问题,服务p提供Q实现地理位|无x;为用h供更好的讉K质量Q提高服务器响应速度Q提高服务器及其他资源的利用效率Q避免了|络关键部位出现单点失效?<br><br>  在负载均衡的思\下,多台服务器ؓ对称方式Q每台服务器都具有同{的CQ可以单独对外提供服务而无d他服务器的辅助。通过负蝲分担技术,外部发送来的请求按一定规则分配到对称l构中的某一台服务器上,而接收到h的服务器都独立回应客h的请求?<br><br>  提供服务的一l服务器l成了一个应用服务器集群(cluster)Qƈ对外提供一个统一的地址。当一个服务请求被发至该集时Q根据一定规则选择一台服务器Qƈ服务{定向l该服务器承担,卛_负蝲q行均衡分摊?<br><br>  通过应用<strong style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">负蝲均衡技?/strong>Q应用服务过了一台服务器只能为有限用h供服务的限制Q可以利用多台服务器同时为大量用h供服务。当某台服务器出现故障时Q负载均衡服务器会自动进行检ƈ停止服务请求分发至该服务器Q而由其他工作正常的服务器l箋提供服务Q从而保证了服务的可靠性?<br><br>  上述的集技术一般都用于Web服务器、应用服务器{,而不是用于数据库服务器,即不是用于有׃n的存储的服务。数据库服务器将涉及到加锁、回滚等一pd问题Q要复杂的多。一般数据库服务器只是用双机,其中一台工作,另一台备份。数据库的双机ƈ行只用于大型数据库中?br><br>  负蝲均衡实现的方法有几种Q?<br><br>  ■最单的是通过DNSQ但只能实现单的轮流分配Q也不能处理故障?<br><br>  ■如果是ZMS IISQWindows 2003 Server本n带了负载均衡服务。但q一服务也只是轮分配?<br><br>  ■硬件方式,通过交换机的功能或专门的负蝲均衡讑֤可以实现。对于流量的分配可以有多U方式,但基本上都是应用无关的,与服务器的实现负载关pM不大。另外,讑֤的hD?优点是能支持很多台服务器)。这U方式往往适合大流量、简单应用?<br><br>  ■Y件方式,通过一台负载均衡服务器q行Q上面安装Y件。这U方式比较灵z,成本相对也较低。另外一个很大的优点是可以Ҏ应用的情况和服务器的情况采取一些策略?<br><br>  关于负蝲均衡中比较高U的功能是FailOverQ即一台出现故障时Q在q台服务器上正在q行中的q程也会被其他服务器接过厅R相应的成本也很高,一般是要象WebLogic、WebSphere软g的群集版本才支持?</div> <img src ="http://www.tkk7.com/sutao/aggbug/131130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/sutao/" target="_blank">苏醄</a> 2007-07-18 18:17 <a href="http://www.tkk7.com/sutao/articles/131130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一台服务器多个web服务器的配置Qapache+tomcatQ?/title><link>http://www.tkk7.com/sutao/articles/131124.html</link><dc:creator>苏醄</dc:creator><author>苏醄</author><pubDate>Wed, 18 Jul 2007 09:43:00 GMT</pubDate><guid>http://www.tkk7.com/sutao/articles/131124.html</guid><wfw:comment>http://www.tkk7.com/sutao/comments/131124.html</wfw:comment><comments>http://www.tkk7.com/sutao/articles/131124.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/sutao/comments/commentRss/131124.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/sutao/services/trackbacks/131124.html</trackback:ping><description><![CDATA[<div id="sieyagg" class=htitle style="COLOR: #0000ff" align=center> <h1><strong>一台服务器多个web服务器的配置Qapache+tomcatQ?/strong></h1> </div> <!--content_b--> <ul><br> <p style="COLOR: #0000ff"><br>pȝ环境QRad Hat Linux as 4<br>apache 2.2.0<br>tomcat 5.5<br>pȝ起了两个tomcatQ分别访问端口是8080?060 AJP13端口?009?049<br>有两个域名www.xxx.com和www.yyy.com对应q两个tomcat服务<br>怎么配置apache能实现根据域名访问两个网?br><br>解决问题保证500份奉?.<br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>Z么要两个 tomcat q程呢?一个不行吗Q?br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>分别是两个网?.....一个是另一个的升。但是要两个都跑着...<br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>up一下。没Z吗?解决问题500分,不够再加<br><br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>在不同的端口上运行不同的站点(Z多端口的服务器上配置Z域名的虚拟主?Q?br>Listen 80<br>Listen 8080<br><br>NameVirtualHost 172.20.30.40:80<br>NameVirtualHost 172.20.30.40:8080<br><br><VirtualHost 172.20.30.40:80><br>ServerName www.example1.com<br>DocumentRoot /www/domain-80<br></VirtualHost><br><br><VirtualHost 172.20.30.40:8080><br>ServerName www.example1.com<br>DocumentRoot /www/domain-8080<br></VirtualHost><br><br><VirtualHost 172.20.30.40:80><br>ServerName www.example2.org<br>DocumentRoot /www/otherdomain-80<br></VirtualHost><br><br><VirtualHost 172.20.30.40:8080><br>ServerName www.example2.org<br>DocumentRoot /www/otherdomain-8080<br></VirtualHost><br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>http://www.ahbvc.cn:8080/info_Show.asp?ArticleID=2382<br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>建立两个httpd.conf Q分别设|不用得端口及目录?br><br>分别启动两个apache<br>./apachectl -f conf文g -k start<br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>谢谢各位?br>我用的jk2插gQlinuxpȝQ这个环境下有配成功的吗Q?br>主要是怎么在workers2.properties里定义多个workerQ还能根据不同的条g转发...<br>谢谢<br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br><a name=baidusnap0 _base_></a><strong style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">Apache2.2</strong>自带<a name=baidusnap4 _base_></a><strong style="COLOR: black; BACKGROUND-COLOR: rgb(255,102,255)">负蝲均衡</strong>模块Q不需要用JK2了,你可以参考一下我q个做法Q?br><strong style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">Apache2.2</strong>+Tomcat5.5<strong style="COLOR: black; BACKGROUND-COLOR: rgb(255,102,255)">负蝲均衡</strong>+集群forAS4&Solaris<br>http://blog.kaila.com.cn/user1/49574/archives/2006/17307.shtml<br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>大家是不是说得太ȝ了。?br><br>TOMCAT本n支持HOST讄。?br><br>跟APACHE的VHOST讄一栗?br><br>不过。如果APACHE use port 80<br>那tomcat不要?0<br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>通过配置不同端口<br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>用虚拟主机啊Q就是ؓ了实Cq个目的Q才发明的虚拟主机?br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>我的是在WINDOWS下配|的Q整合了apache和tomcatQ端口都是用80:<br>conf.xml:<br><Server port="8005" shutdown="SHUTDOWN"><br><br><GlobalNamingResources><br><!-- Used by Manager webapp --><br><Resource name="UserDatabase" auth="Container"<br>type="org.apache.catalina.UserDatabase"<br>description="User database that can be updated and saved"<br>factory="org.apache.catalina.users.MemoryUserDatabaseFactory"<br>pathname="conf/tomcat-users.xml" /><br></GlobalNamingResources><br><br><Service name="Catalina"><br><Connector port="8080" /><br><br><!-- This is here for compatibility only, not required --><br><Connector port="8009" protocol="AJP/1.3" /><br><br><Engine name="Catalina" defaultHost="localhost"><br><Realm className="org.apache.catalina.realm.UserDatabaseRealm"<br>resourceName="UserDatabase" /><br><Host name="10.137.200.46" appBase="E:\code\oa"<br>unpackWARs="true" autoDeploy="true"<br>xmlValidation="false" xmlNamespaceAware="false"><br><Context path="" <br>docBase="."<br>crossContext="false"<br>debug="0" <br>reloadable="true" /><br></Host><br><Host name="10.137.200.48" appBase="E:\code\oa_mysql"<br>unpackWARs="true" autoDeploy="true"<br>xmlValidation="false" xmlNamespaceAware="false"><br><Context path="" <br>docBase="."<br>crossContext="false"<br>debug="0" <br>reloadable="true" /><br></Host><br></Engine><br></Service><br></Server><br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>workers.properties<br>workers.tomcat_home=D:\program\Tomcat 5.5 #让mod_jk模块知道Tomcat<br>workers.java_home=C:\j2sdk1.4.2_11 #让mod_jk模块知道j2sdk<br>ps=\<br>worker.list=ajp13 #模块版本,现有ajp14?不要修改<br>worker.ajp13.port=8009 #工作端口,若没占用则不用修?br>worker.ajp13.host=localhost #本机,若上面的ApacheL不ؓlocalhost,作相应修?br>worker.ajp13.type=ajp13 #cd<br>worker.ajp13.lbfactor=1 #代理?不用修改<br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>httpd.conf下加下一D(相应参数要改Q:<br>LoadModule jk_module modules/mod_jk.dll<br>JkWorkersFile "D:/program/Tomcat 5.5/conf/workers.properties"<br>JkLogFile "D:/program/Tomcat 5.5/logs/mod_jk2.log" <br>JkLogLevel info<br>JkMount /servlet/* ajp13 <br>JkMount /*.jsp ajp13<br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>?strong style="COLOR: black; BACKGROUND-COLOR: rgb(255,255,102)">APACHE2.2</strong>里面׃要用JK?有更好的Ҏ.mod_proxy_ajp.so<br><br>再配合虚拟主机里面设|?br>ProxyPass / ajp://localhost:8009/<br>ProxyPassReverse / ajp://localhost:8009/<br>使用比work2配置方便Ҏ得多.<br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br>配置httpd-vhosts.confp?br><VirtualHost *:80><br>ServerAdmin flylibin@sina.com<br>DocumentRoot /var/www/html/apache/www<br>ServerName www.aaaa.com<br>ErrorLog logs/error_log<br></VirtualHost><br><br><VirtualHost *:80><br>ServerAdmin flylibin@sina.com<br>DocumentRoot /var/www/html/tomcat/www<br>ServerName www.bbbb.com<br>ErrorLog logs/tomcat-error_log<br></VirtualHost><br>然后把tomcat和apache集成一下就行了Q这个网上到处都是?br>q样l对可以Q我的就是这么弄的?br></p> </ul> <ul>回复Q一台服务器多个web服务器的配置Qapache+tomcatQ?00分求?br> <p style="COLOR: #0000ff"><br></p> </ul> <img src ="http://www.tkk7.com/sutao/aggbug/131124.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/sutao/" target="_blank">苏醄</a> 2007-07-18 17:43 <a href="http://www.tkk7.com/sutao/articles/131124.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://222941.com" target="_blank">aëƬƵ </a>| <a href="http://91ggan.com" target="_blank">ɫʹۺһ</a>| <a href="http://16lds.com" target="_blank">һaëƬѲ</a>| <a href="http://7a37.com" target="_blank">޾Ʒ㶮߹ۿ</a>| <a href="http://25gh.com" target="_blank">ѻɫƵ</a>| <a href="http://viviker.com" target="_blank">޹ƷۺϾþ</a>| <a href="http://90hong.com" target="_blank">߹۹Ļ</a>| <a href="http://xjdz8.com" target="_blank">ŮſȸͰƵ</a>| <a href="http://276194.com" target="_blank">պһĺ</a>| <a href="http://oakuu.com" target="_blank">ѿĻɫƬ</a>| <a href="http://kmp77.com" target="_blank">лGAYƬվWWW</a>| <a href="http://yiren2233.com" target="_blank">ձɫַ</a>| <a href="http://54vpn.com" target="_blank">һëƬaѲɫӰ</a>| <a href="http://yqstickers.com" target="_blank">޾ƷŮþþþ99С˵</a>| <a href="http://31xyz.com" target="_blank">лиëƬѿ </a>| <a href="http://140699.com" target="_blank">ˬָ߳ëƬ</a>| <a href="http://www1616hh.com" target="_blank">޾ƷӰ</a>| <a href="http://pencilinside.com" target="_blank">ѹۿɫƬ</a>| <a href="http://yw8885.com" target="_blank">˳߹ۿվ</a>| <a href="http://by6174.com" target="_blank">Ļ</a>| <a href="http://pufenghotel.com" target="_blank">պAVһ</a>| <a href="http://sdhgjscl.com" target="_blank">þ޾Ʒ777С˵</a>| <a href="http://4001120002.com" target="_blank">δʮ18ֹվ</a>| <a href="http://ytsp88.com" target="_blank">97þþƷĻ</a>| <a href="http://ruidamo.com" target="_blank">ܻƺɫܴ̼Ƶ</a>| <a href="http://kelingdq.com" target="_blank">޾Ʒ߳ˮAƬ</a>| <a href="http://sd-ll.com" target="_blank">޳AƬ77777</a>| <a href="http://mmstom.com" target="_blank">aëƬ߹ۿ</a>| <a href="http://xiamenwave.com" target="_blank">޻߹ۿ</a>| <a href="http://323799.com" target="_blank">Ʒ鶹վ</a>| <a href="http://tiantiantegou.com" target="_blank">ƷѾþþþõӰ</a>| <a href="http://438266.com" target="_blank">þþþav</a>| <a href="http://778002.com" target="_blank">Ƶ߹ۿ</a>| <a href="http://199291.com" target="_blank">˾ҹƵѹ</a>| <a href="http://805ios.com" target="_blank">޾ƷƬ߲</a>| <a href="http://519vip.com" target="_blank">ձվ</a>| <a href="http://xxxxxxxxcccc.com" target="_blank">˾þùѹۿƵ</a>| <a href="http://xvwenyue.com" target="_blank">˳߲վ</a>| <a href="http://adcbgy.com" target="_blank">ƷƵվ</a>| <a href="http://singbomb.com" target="_blank">˳ӰԺ</a>| <a href="http://my55572.com" target="_blank">컶ëƬ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>