Ruby on rails 恶意Ruby进程占用所有CPU。由Phusion乘客提供的Ruby on Rails
Apache上乘客提供的RoR应用程序存在问题。当应用程序启动或Apache重新启动时,它是正常的,但经过一段时间后,我们开始看到ruby进程正在消耗所有可用的CPU 有时这些过程显示为乘客状态,有时则不显示。它们总是出现在顶部,占用所有CPU。 它们逐渐堆积起来,永远不会被乘客杀死 我尝试了以下诊断: 战略: 每次我和他们较量,他们都没有产出。如果我将strace从passenger status附加到一个健康的ruby进程,那么我可以看到该进程正在做什么的信息被记录下来。以下是rogue进程的输出:Ruby on rails 恶意Ruby进程占用所有CPU。由Phusion乘客提供的Ruby on Rails,ruby-on-rails,ruby,gdb,passenger,Ruby On Rails,Ruby,Gdb,Passenger,Apache上乘客提供的RoR应用程序存在问题。当应用程序启动或Apache重新启动时,它是正常的,但经过一段时间后,我们开始看到ruby进程正在消耗所有可用的CPU 有时这些过程显示为乘客状态,有时则不显示。它们总是出现在顶部,占用所有CPU。 它们逐渐堆积起来,永远不会被乘客杀死 我尝试了以下诊断: 战略: 每次我和他们较量,他们都没有产出。如果我将strace从passenger status附加到一个健康的ruby进程,那么我可以看到该进程正在做什么的信息被记录下来。以下是rogue进程
strace -f -p 8648
Process 8648 attached with 2 threads - interrupt to quit
[pid 8650] select(6, [5], NULL, NULL, NULL
I'll then go into top and the thread is sigging at 88%. When I o back to strace.. there is nothing. Just the following output:
strace -c -p 8648
Process 8648 attached - interrupt to quit
^CProcess 8648 detached
gdb:
我对其中一个恶意进程运行了以下命令:
sudo gdb
attach 12345 <--- replace "12345" with the actual PID
在gdb中:我尝试运行以下命令:
session-ruby
redirect_stdout # redirects gdb output to /tmp/ruby-debug.PID
eval "caller" # dumps backtrace
然而,当我试图将进程输出重定向到std_out时,它似乎终止了进程,因为我无法在之后运行eval“caller”
/tmp/ruby-debug.12840中没有输出(该文件不存在),但是我在Apache错误日志中找到了它。此条目指的是我试图调试的进程(PID=12840)…但是我不确定此错误是否指的是进程正在执行的操作或我试图重定向std_时遇到的问题
实际堆栈跟踪可在以下要点中找到:
西格布特
我还尝试过用SIGABRT信号终止线程。不幸的是,日志中没有显示任何内容
应用程序版本:
Phusion Passenger 3.0.11,
红帽linux
Ruby 1.9.3-p125
轨道3.1.3
我真的非常感谢你在这方面的帮助。我在邮件列表和论坛中搜寻,试图找到答案,但还没有成功。
谢谢
Ian两个回溯都指向正则表达式(比如ruby的正则表达式引擎)(=~是正则表达式匹配),因此可能应用的正则表达式中有一个没有它应该的那么有限,或者只是处理大量数据。
session-ruby
redirect_stdout # redirects gdb output to /tmp/ruby-debug.PID
eval "caller" # dumps backtrace