关于Tomcat CPU使用率峰值的Jruby Rails应用程序

时间:2010-02-26 20:04:18

标签: jms activemq tomcat5.5 jrubyonrails mule

这也可能属于serverfault。它是服务器配置和代码之间的组合(我认为)

这是我的设置:

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前端运行一个小的亚马逊实例,并为所有服务运行一个大型实例。

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

有人可以告诉我如何检查我的jruby应用程序以了解它如何可能耗尽这么大的资源吗?

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

非常感谢任何关于在哪里寻找的提示。我甚至不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

确保Tomcat与其他内容之间没有意外通信。我会在第一时间检查:

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

这种不必要的负载可能来自处理来自其他应用程序的消息。