【问题标题】:Jruby Rails app on Tomcat CPU Usage spikesTomcat CPU 使用率峰值上的 Jruby Rails 应用程序
【发布时间】:2011-01-21 14:45:08
【问题描述】:

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

这是我的设置:

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 之后,我一直都在看到它,它使网站完全无法使用。

非常感谢任何有关在哪里查看的提示。我什至不知道从哪里开始。

【问题讨论】:

    标签: jms activemq tomcat5.5 jrubyonrails mule


    【解决方案1】:

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

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

    这种不必要的负载可能是由于处理来自另一个应用程序的消息造成的。

    【讨论】:

    • 感谢您的提示。我实际上是前面的 ruby​​ 人,所以我仍在研究 java/activemq 但有机会我会看看
    猜你喜欢
    • 1970-01-01
    • 2011-06-02
    • 2017-05-26
    • 2017-07-22
    • 2011-04-22
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多