诊断高Apache“繁忙的服务器”的原因数

提前道歉稍微罗嗦的问题。

我们提供J2EE Web应用程序的托pipe和应用程序pipe理。 技术堆栈是CentOS 5.9 64位,Apache 2.2.17,Tomcat 5,JBoss 4.2.2。 (虚拟)服务器有6 GB RAM。 我们通常在工作时间内看到大约2500个并发用户,并且通常环境运行正常(我们甚至已经破解了3300个并发用户,没有任何性能问题)。 最近我们有一些短暂的中断,我们不确定的根本原因。 中断只能持续几分钟 – 足以从监视软件获取警报电子邮件,validation应用程序不可用,打开服务器的terminal并重新启动服务 – 大约2-3分钟。

有关中断的一些信息:

  • 所有服务仍在运行 – 没有任何崩溃,并且没有生成堆转储
  • 浏览器中没有错误消息
  • 当试图访问该网站时,浏览器中没有任何东西会加载,似乎花了一个永恒的思考 – 就像是“旋转车轮”
  • 最初重新启动Apache恢复的访问; 但在2小时的第四次停机之后,我们重新启动了JBoss。 这似乎解决了这个问题。
  • 在停机期间,并发性非常低 – 远低于工作时间的平均值

我们已经分析了日志文件,监控报告,GC日志等等。我们可以肯定的是,在停电的时候,监控软件报告说有一堆Apache Busy Server。 我不确定什么是繁忙的服务器,但在停电的时候,这个值在150到200之间。繁忙服务器的平均值大约是5,很less超过10.我们还可以从GC日志中看到在停电时似乎有记忆问题,例如:

4967.376: [Full GC [PSYoungGen: 17576K->0K(656384K)] [PSOldGen: 3131794K->628760K(3145728K)] 3149370K->628760K(3802112K) [PSPermGen: 157485K->157485K(315008K)], 2.6067200 secs] 

JVM选项是:

 JAVA_OPTIONS="${JAVA_OPTIONS} -Xms4096m -Xmx4096m -XX:NewRatio=3 -XX:PermSize=256m -XX:MaxPermSize=512m -XX:SurvivorRatio=4" JAVA_OPTIONS="${JAVA_OPTIONS} -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -XX:+DisableExplicitGC -XX:+UseLWPSynchronization" JAVA_OPTIONS="${JAVA_OPTIONS} -XX:+PrintClassHistogram -XX:+HeapDumpOnOutOfMemoryError -Xloggc:sabagc.log -XX:+PrintGCDetails" 

我们认为发生的事情是Permgen已经空间不足,这反过来导致Tomcat停止接受请求(从Apache通过mod_jk)。 这导致Apache开始排队请求,因此繁忙的服务器数量很大。 重新启动Apache是​​一个短期的修复,因为它实际上并没有解决内存问题。 当我们重新启动JBoss时,内存被释放了。

根据现有的信息,这听起来似乎合理吗? 是解决scheme来增加XX的内存:PermSize和XX:MaxPermSize?