Tomcat 上的 Jruby Rails 应用程序 CPU 使用率峰值
-
23-09-2019 - |
题
这也可能属于服务器故障。这是服务器配置和代码之间的组合(我认为)
这是我的设置:
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 后,我一直看到它,它使网站完全无法使用。
非常感谢任何关于在哪里查看的提示。我什至不知道从哪里开始。
没有正确的解决方案
其他提示
确保 Tomcat 和其他东西之间没有意外的通信。我会首先检查是否:
- ActiveMQ 代理不与网络中的其他代理通信。默认情况下,AMQ 代理以 OpenWire 自动发现模式启动。
- JGroups/多播通常不会与网络中的某些内容进行通信。
这种不必要的负载可能是由于处理来自另一个应用程序的消息而导致的。
不隶属于 StackOverflow