??xml version="1.0" encoding="utf-8" standalone="yes"?>91激情在线,99中文字幕一区,中文字幕一区二区三区四区不卡http://www.aygfsteel.com/ipanda/category/11136.htmlzh-cnFri, 02 Mar 2007 02:44:26 GMTFri, 02 Mar 2007 02:44:26 GMT60apache+tomcat+mysql 负蝲q和集?/title><link>http://www.aygfsteel.com/ipanda/articles/46221.html</link><dc:creator>d猫的博客</dc:creator><author>d猫的博客</author><pubDate>Mon, 15 May 2006 07:21:00 GMT</pubDate><guid>http://www.aygfsteel.com/ipanda/articles/46221.html</guid><wfw:comment>http://www.aygfsteel.com/ipanda/comments/46221.html</wfw:comment><comments>http://www.aygfsteel.com/ipanda/articles/46221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ipanda/comments/commentRss/46221.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ipanda/services/trackbacks/46221.html</trackback:ping><description><![CDATA[ <table class="fixedTable blogpost" cellspacing="0" width="100%" border="0"> <tbody> <tr> <td id="msgcns!1peMxEO2X2a8AOxim43yhQiw!109"> <div> <div>前言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><br />负蝲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>Q?Q?C3P0和DBCP<br />C3P0是Hibernate3.0默认的自带数据库q接池,DBCP是Apache开发的数据库连接池。我们对q两U连接池q行压力试ҎQ发现在q发300个用户以下时QDBCP比C3P0q_旉?U左叟뀂但在ƈ?00个用hQ两者差不多?/p><p>速度上虽然DBCP比C3P0快些Q但是有BUGQ当DBCP建立的数据库q接Q因为某U原因断掉后QDBCP不会再重新创徏新的q接Q导致必重新启动Tomcat才能解决问题。DBCP的BUG使我们决定采用C3P0作ؓ数据库连接池?br />调整后的ҎQ?br />操作pȝWindows2003 server版本<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># 加蝲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><IfModule mod_cache.c><br />CacheForceCompletion 100<br />CacheDefaultExpire 3600<br />CacheMaxExpire 86400<br />CacheLastModifiedFactor 0.1<br /><br /><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 >http://jakarta.apache.org/tomcat/connectors-doc/config/workers.html</a><br /># In Unix, we use forward slashes:<br />ps=</p><p># list the workers by name</p><p>worker.list=tomcat1, tomcat2, loadbalancer</p><p># ------------------------<br /># First tomcat server<br /># ------------------------<br />worker.tomcat1.port=8009<br />worker.tomcat1.host=localhost<br />worker.tomcat1.type=ajp13</p><p># Specify the size of the open connection cache.<br />#worker.tomcat1.cachesize</p><p>#<br /># Specifies the load balance factor when used with<br /># a load balancing worker.<br /># Note:<br /># ----> lbfactor must be > 0<br /># ----> Low lbfactor means less work done by the worker.<br />worker.tomcat1.lbfactor=900</p><p># ------------------------<br /># Second tomcat server<br /># ------------------------<br />worker.tomcat1.port=8009<br />worker.tomcat1.host=202.88.8.101<br />worker.tomcat1.type=ajp13</p><p># Specify the size of the open connection cache.<br />#worker.tomcat1.cachesize</p><p>#<br /># Specifies the load balance factor when used with<br /># a load balancing worker.<br /># Note:<br /># ----> lbfactor must be > 0<br /># ----> Low lbfactor means less work done by the worker.<br />worker.tomcat1.lbfactor=2000</p><p># ------------------------<br /># Load Balancer worker<br /># ------------------------</p><p>#<br /># The loadbalancer (type lb) worker performs weighted round-robin<br /># load balancing with sticky sessions.<br /># Note:<br /># ----> If a worker dies, the load balancer will check its state<br /># once in a while. Until then all work is redirected to peer<br /># worker.<br />worker.loadbalancer.type=lb<br />worker.loadbalancer.balanced_workers=tomcat1,tomcat2</p><p>#<br /># END workers.properties<br />#</p><p>Tomcat1配置:<br /><!--配置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><!--配置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>启动内存配置,开发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>启动内存配置,开发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><prop key="hibernate.show_sql">false</prop><br /><prop key="hibernate.use_sql_comments">false</prop></p><p><prop key="hibernate.cglib.use_reflection_optimizer">true</prop><br /><prop key="hibernate.max_fetch_depth">2</prop></p><p><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><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角色的用户在不同时间下的处理,以测试网站压力负载?/p></div> </div> </td> </tr> </tbody> </table> <img src ="http://www.aygfsteel.com/ipanda/aggbug/46221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ipanda/" target="_blank">d猫的博客</a> 2006-05-15 15:21 <a href="http://www.aygfsteel.com/ipanda/articles/46221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">԰</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ٲ</a>| <a href="http://" target="_blank">Ƕ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ߴ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">崲</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">˷</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">ܿ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">Ƽ</a>| <a href="http://" 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>