2010-02-26 48 views
0

这可能也属于serverfault。这是一种服务器配置和代码(我认为)之间的组合的Tomcat上的Jruby Rails应用程序CPU使用率峰值

这里是我的设置:

Rails 2.3.5 app running on jruby 1.3.1 
Service Oriented backend over JMS with activeMQ 5.3 and mule 2.2.1 
Tomcat 5.5 with opts: "-Xmx1536m -Xms256m -XX:MaxPermSize=256m -XX:+CMSClassUnloadingEnabled" 
Java jdk 1.5.0_19 
Debian Etch 4.0 

运行top,每次我点击我的网站的链接,我看到我的java进程的CPU使用率峰值。如果它是一个小页面,有时只有10%的使用率,但有时在一个更复杂的页面上,我的CPU高达44%(从未超过,不知道为什么)。在这种情况下,请求可能会花费几分钟,而我的服务器的load average稳步攀升至8或更高。这只是点击一个链接,从一些服务加载一些请求,没有太复杂。 java进程内存大部分时间徘徊在20%左右。

如果我离开它一点,平均负载回落到没有。点击几个链接,爬回去。

我正在为rails前端运行一个小型amazon实例,并为所有服务运行一个大型实例。

现在,这显然是不可接受的。一个用户可以将负载平均值增加到8,并且有两个人使用它,它会保持我们使用站点期间的平均负载。我想知道我能做什么来检查发生了什么?我完全丧失了如何进行调试。 (它不会在本地发生,当我通过jruby运行rails应用程序时,不在tomcat容器中)

有人能告诉我如何检查我的jruby应用程序,以了解它可能如何使用up如此巨大的资源?

请注意,我之前注意到了这一点,似乎是随机的,但是现在,从Rails 2.2.2升级到2.3.5后,我看到了这一切,并且使网站完全无法使用。

任何提示在哪里看,都非常感激。我甚至不知道从哪里开始。

回答

0

确保Tomcat和其他东西之间没有意外的通信。如果出现以下情况,我将首先检查:

  • ActiveMQ代理不与您的网络中的其他代理进行通信。默认情况下,AMQ代理以OpenWire自动发现模式启动。
  • JGroups/Multicasts通常不会与网络中的某些内容进行通信。

这个不必要的负载可能来自处理来自另一个应用程序的消息。

+0

感谢您的提示。我其实是前面的红宝石,所以我仍然在java/activemq上工作,但是当我有机会的时候我会看看 – brad 2010-03-01 14:24:00