2GHz 및 4GB 메모리 4 코어를 사용하는 VPS에서 레일 앱 (2.3.5)을 실행하고 있습니다. Ruby Enterprise (1.8.7-2010.01)에서 최대 풀 크기가 30으로 설정된 nginx (0.7.61) 및 phusion passenger (2.2.14)를 실행 중입니다. 문제는 마치 실행중인 모든 루비 프로세스 레일 요청은 거의 100 % cpu에서 실행됩니다. TOP를 실행하면 디스플레이가 새로 고침 될 때마다 화면이 매번 내려져서 매달리지 않고 떨어지지 만 여전히 100 %로 실행 중입니다.루비 프로세스가 승객의 CPU 사용률이 100 % 인 이유
내가이 문제를 일으킬 수있는 방법이 있습니까? 또는 적어도 코드의 어떤 부분이 CPU에 영향을 미치는지 파악하십시오. 이것은 정상적인 행동입니까?
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
감사 :
다음은 TOP 출력입니다!
편집 : 아래에 언급 된대로 따라 잡은 포크로 스트라이크를 시도하십시오. 이 출력은 계속해서 덤프됩니다.
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()
레일즈 2.3.5 승객 2.2.5 루비 1.8.7 (2009-12-24 패치 레벨 248) [x86_64-linux], MBARI 0x6770, 루비 엔터프라이즈 에디션 2010.01 – mazhout
비슷한 문제가있어서 strace 출력을 설명하는 루프 안에 DateTime.now를 호출하는 코드에 몇 가지 버그가 있습니다. 'stat ("/ etc/localtime", {st_mode = S_IFREG | 0644, st_size = 3543, ...}) = 0' 반복 호출을 중지하고 차이가 있는지 확인하기 위해 수정 프로그램을 계획합니다. . –
Ruby는 스레드 간의 컨텍스트 전환에'SIGVTALRM'을 사용합니다. 그것에 대해 이상한 것은 없습니다. 물론 strace의 유일한 출력이며 반복적으로 많이 발생합니다. – Steen