`
FengShen_Xia
  • 浏览: 279284 次
  • 性别: Icon_minigender_1
  • 来自: 东方水城
社区版块
存档分类
最新评论

apache+tomcat 集群高负载性能问题

 
阅读更多

在用apache+tomcat做负载均衡的时候,遇到服务器问题,apache的日志如下:

 

    写道

==ajp_process_callback::jk_ajp_common.c (1945): Writing to client aborted or client network problems
==ajp_service::jk_ajp_common.c (2607): (tomcat2) sending request to tomcat failed (unrecoverable), because of client write error (attempt=1)
==service::jk_lb_worker.c (1400): service failed, worker tomcat2 is in local error state
==service::jk_lb_worker.c (1419): unrecoverable error 200, request failed. Client failed in the middle of request, we can't recover to another instance.
==jk_handler::mod_jk.c (2671): Aborting connection for worker=controller

 

 网上找了一些解决办法,这里贴出只是为了备注一下,方便以后查找。

写道
1现象
当然能报这个错的原因很多,配置不对连不上的,二者版本不对,不兼容的,这里不讨论这些入门的事。只说配置成功,在有较高负载的情况下出现这种情况。这种情况还伴随着apache的文件正常访问,单独访问tomcat的端口也正常。只是访问apache+tomcat的端口出事。

2解决方案
在workers.properties里设置相应的负载机器的recovery_options=3

3解释
recovery_options属性说明了web server在检测到Tomcat失败后如何进行恢复工作。默认情况下,web server将转发请求给处于负载平衡模式中的另一个Tomcat。属性值为0,说明全部恢复;属性值为1,说明如果在Tomcat接到请求后出现失败状况,则不进行恢复;属性值为2,说明如果在Tomcat发送http头给客户端后出现失败状况,则不进行恢复;属性值为3,说明如果在Tomcat接到请求后出现失败状况或者在Tomcat发送http头给客户端后出现失败状况,则不进行恢复。此属性在jk 1.2.6版本被增加进来,以求避免Tomcat的死机和在支持ajp13的servlet引擎上发生的问题。此属性默认为全部恢复。
因在默认的情况下,JK检测tomcat的工作情况,所以浪费了很多资源,这个资源多到比tomcat正常工作所需的资源的1.6倍还多--通过后来的满足更多请求使用更少机器的情况估计出来的保守值。如果不检测恢复,则效率高了,处理的请求数可以是原来的2.6倍多,而且tomcat还不死--没响应,反而使出错的数量比检测恢复之后出错的数量还少,性能还加强了,如果原来用这种的集群100台机器,有一阵就挂掉,改成这个配置只要40台机器,一般在同样的时间段内运行无反应或出错的情况比recovery_options使用默认值的少得多。
recovery_options的最新参考
http://tomcat.apache.org/connectors-doc/reference/workers.html

4思考过程和方法
具体说是具体问题具体分析,这里主要是观察和思考矛盾现象。
矛盾现象:负载高时,机器僵死,CPU和IO都不怎么用,只处理少量请求,tomcat单独访问没问题,apache单独访问没问题。现象很矛盾,负载高反而不做什么事。
观察这种矛盾现象用到了查看机器网络流量,CPU占用,全局共享文件,使用内存,IO使用情况,apache和tomcat使用的文件、socket、线程。综合上面的现象和一些观察的结果看,问题出现在apache连接tomcat上,当然就去找那个上面提到过的配置文件参考。几乎试用了所有参数,最终找到这个参数,起初没觉得这个错误恢复功能会使性能下降这么大,不过仔细想想这个功能确实会占用大量的资源,一个程序监控另一个程序里的连接数据还要根据这些数据判断一堆东西显然要比一个只往自己的网络连接里收发数据的程序占用的资源大,以至性能下降很大。改了它之后解决了一半高负载的问题。还有可能会出现的另一个问题。

5可能出现的问题
在服务器管理的实践中遇到过经改完配制后,有的机器还有上面的报错,但已经不是不用CPU和IO了,看样子是正常工作了。有的机器现象较好,一个apache+4个tomcat,一晚上可以处理1000万的请求。用jmeter开50个线程狂压都死不了。起初认为是新旧机器的事,因旧机器性能本身是差,并且旧机器中出现以上报错的也多。但是也有一两台旧机器运行良好,一两台新机器一两天就会出现上面的报错。为此,又分析了一下这个矛盾现象。
从监控新机器处理的流量开始,这些新机器每天处理的流量都是差不多的,配制基本上一样。上面说过一台运行好的机器12小时处理1000万请求还轻松,而正常运营的每台机器24小时处理不超过150万请求,还有报错的现象。显然性能差别巨大不是新旧机器性能上的而是本质上的。
于是在新机器中选出性能好和不好的,全面对比,还算是比较顺利,因用CPU多的只有tomcat,而用ps看程序时,发现二者的java路径不一样,很容易让人想到是jre的事。把性能不好的机器换上的jrocket的jre,问题解决了。
原因为普通的jre总是回收内存,做了回收内存的日志,一秒钟最少回收一次,一台机器4个tomcat则每秒至少回收4次,回收期间使用CPU高--1个tomcat占500多兆内存,而且垃圾回收期间是暂停请求的,所以CPU狂用,而处理的量也不比其它机器多。而jrocket的jre测试用了一两个小时竟然没垃圾回收,网上查了一下有人说那个大约一天才回收一次,不过回收一次可能要几分钟到十几分钟,这就是为什么用apache加一个jrocket的NIO的tomcat不如用apache加4个tomcat好的原因,只要一垃圾回收一个tomcat十几分钟没响应肯定是不行的,虽然单个的NIO的tomcat的性能比4个tomcat的好。

出自:http://blog.sina.com.cn/s/blog_54394f910100p52t.html

 

 

分享到:
评论

相关推荐

    反向代理负载均衡 Apache + Tomcat集群

    反向代理负载均衡 Apache + Tomcat集群 多的我也不多说了 看文档

    apache+tomcat集群配置

    本文将详细介绍如何配置 Apache + Tomcat 集群,包括安装 Apache 和 Tomcat 服务器、配置 mod_jk 模块、配置 Apache 和 Tomcat 服务器、配置负载均衡控制器等。 一、安装 Apache 服务器 首先,需要安装 Apache ...

    apache+tomcat+jk 均衡负载和集群

    Apache+Tomcat+JK是一个常见的Web服务器和应用服务器集群解决方案,用于实现负载均衡和高可用性。这个配置中,Apache作为前端反向代理服务器,Tomcat作为后端的应用服务器,而JK模块是Apache与Tomcat之间的连接器,...

    Apache+Tomcat集群和负载均衡及Session绑定

    【Apache+Tomcat 集群与负载均衡及Session...通过以上配置,Apache+Tomcat集群可以实现高效的负载均衡和高可用性,同时通过Session绑定确保用户会话的连续性。注意定期监控和优化集群性能,以应对不断变化的业务需求。

    Apache+Tomcat+Linux集群和负载均衡

    在IT领域,Apache+Tomcat+Linux集群与负载均衡技术是实现高可用性、高性能Web服务的重要手段之一。本文将围绕这一主题展开详细讨论,涵盖关键技术概念、配置流程及注意事项等内容。 #### 一、概述 **Apache+Tomcat...

    Apache+Tomcat+Linux集群和均衡负载(Session同步复制

    Apache+Tomcat+Linux集群和均衡负载(Session同步复制

    Apache+Tomcat集群和负载均衡的资料

    ### Apache+Tomcat集群与负载均衡配置详解 #### 一、环境说明 为了实现Apache与Tomcat集群的负载均衡,我们需要准备以下环境: 1. **服务器配置**:四台服务器,其中一台安装Apache,三台安装Tomcat。 - Apache...

    实现apache+tomcat集群和负载均衡的比较

    总之,Apache+Tomcat集群和负载均衡的实现能够显著提升Web服务的可用性和性能,通过灵活选择负载均衡策略和模块,可以适应各种复杂的业务场景。在实际操作中,还需要不断调整和优化,以达到最佳的效果。

    tomcat+apache+jk集群和负载均衡

    完成配置后,应通过访问Apache服务器,测试请求能否正确地被转发到Tomcat集群中的某个实例,并得到响应。这一步骤对于确保集群和负载均衡策略的正确性至关重要。 通过上述详细步骤和配置要点,我们可以构建出一个...

    Apache+Tomcat+JK 实现集群负载均衡文档

    Apache+Tomcat+JK 实现集群负载均衡是一种常见的Web服务器和应用服务器的部署方式,它能够提高系统的可用性和响应速度,实现服务的高并发处理。本文将详细介绍如何配置这一环境。 首先,我们需要准备以下软件: 1. ...

    apache+tomcat集群的负载均衡和失败托管所需软件

    apache+tomcat集群的负载均衡和失败托管所需软件 包括 apache_2.0.55-win32-x86-no_ssl.msi apache-tomcat-7.0.40-windows-x86.zip mod_jk-apache-2.0.55.so

    apache+tomcat集群负载平衡

    apache+tomcat集群负载平衡的配置详细讲解

    Apache+Tomcat集群的负载均衡配置文件和测试文件

    本主题聚焦于"Apache+Tomcat集群的负载均衡配置",通过Apache作为前端代理服务器,对后端的多个Tomcat实例进行负载分发,以实现高可用和高性能的服务。 首先,我们要理解负载均衡的基本概念。负载均衡是指将流入的...

    Apache+Tomcat集群

    Apache+Tomcat集群是一种常见的Web服务器和应用服务器集群架构,用于提高网站的可用性和可扩展性。Apache作为前端服务器,负责接收客户端的HTTP请求,并根据配置的负载均衡策略将这些请求转发给后端的多个Tomcat实例...

    apache+tomcat集群均衡负载 简单实现步骤

    总结,实现Apache+Tomcat集群负载均衡的关键在于正确配置Apache的mod_proxy模块,以及确保Tomcat集群的会话一致性。通过这种方式,我们可以有效分摊高并发访问压力,提高系统的稳定性和响应速度。同时,持续监控和...

    Apache+Tomcat服务器集群配置详细步骤

    ### Apache+Tomcat服务器集群配置详细步骤 #### 一、引言 在现代Web开发中,随着业务规模的不断扩大和用户...对于处理高并发访问场景或需要提供不间断服务的应用来说,Apache+Tomcat集群无疑是一个理想的解决方案。

    windows下apache+tomcat 集群 均衡负载工具及文档

    接着,配置Apache的虚拟主机以代理到Tomcat集群。在Apache的配置文件中创建一个新的VirtualHost,例如: ```apacheconf *:80> ServerName your.domain.com ProxyPass / http://localhost:8080/ ProxyPassReverse...

    .在32位操作系统上配置apache+tomcat集群/负载均衡/session复制

    标题中的“在32位操作系统上配置apache+tomcat集群/负载均衡/session复制”涉及到的是在32位系统环境下,如何构建一个使用Apache HTTP Server作为前端负载均衡器,与多个Tomcat应用服务器协同工作的集群环境,并实现...

Global site tag (gtag.js) - Google Analytics