Почему процессы на Ruby на 100% ЦП на пассажире
У меня есть приложение rails (2.3.5), работающее на VPS с 4 ядрами при 2 ГГц и 4 ГБ памяти. Я использую nginx (0.7.61) и phusion passenger(2.2.14) на Ruby Enterprise (1.8.7-2010.01) с максимальным размером пула, установленным на 30. Моя проблема заключается в том, что кажется, что каждый процесс ruby выполняет запрос рельсов выполняется на уровне 100% процессорного времени. Если я запускаю TOP, они сбрасываются каждый раз, когда дисплей обновляется, поэтому они не зависают, но работают на все 100%.
Есть ли способ, которым я могу это исправить? Или, по крайней мере, выяснить, какая часть кода зашкаливает на процессоре? Это нормальное поведение?
Вот ТОП выход:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2427 psadmin 25 0 91904 76m 2696 R 100 1.9 739:05.96 Rails: /var/www/apps/main_rails_app/current
3457 psadmin 25 0 98180 82m 2532 R 100 2.0 711:21.91 Rails: /var/www/apps/main_rails_app/current
2415 psadmin 25 0 93952 77m 2708 R 99 1.9 727:49.31 Rails: /var/www/apps/main_rails_app/current
3455 psadmin 25 0 99204 83m 2528 R 69 2.0 726:04.70 Rails: /var/www/apps/main_rails_app/current
2791 psadmin 16 0 98044 81m 2492 S 31 2.0 0:10.16 Rails: /var/www/apps/main_rails_app/current
8034 psadmin 15 0 8160 3656 1772 S 1 0.1 0:35.39 nginx: worker process
8035 psadmin 15 0 8324 3696 1732 S 0 0.1 0:31.34 nginx: worker process
2588 psadmin 15 0 197m 183m 2712 S 0 4.5 1:02.16 Rails: /var/www/apps/main_rails_app/current
Спасибо!
Изменить: пробовал Strace с последующими вилками, как указано ниже. Это вывод, который сбрасывается снова и снова:
sudo strace -f -p 3455
clock_gettime(CLOCK_MONOTONIC, {394577, 508326476}) = 0
select(0, [], [], [], {0, 0}) = 0 (Timeout)
--- SIGVTALRM (Virtual timer expired) @ 0 (0) ---
sigreturn()
1 ответ
Проверьте ваши логи на подозрительное поведение. В общем, рельсы сосут кучу процессоров, хотя... вы также можете попытаться указать strace на оскорбительные пиды.