%20%ED%98%B8%EC%B6%9C%20%EC%8B%9C%20%ED%95%9C%EB%8F%99%EC%95%88%20%EC%A4%91%EB%8B%A8%EB%90%A9%EB%8B%88%EB%8B%A4..png)
그래서 이상한 시나리오가 생겼습니다. apache/passenger/Rails 서버와 다른 서비스가 있습니다. 예를 들어 top 명령 자체는 100% Cpu 시간을 사용합니다(iostat 및 ruby도 마찬가지이며 다른 프로세스는 정상인 것 같습니다). 처음에는 이것이 유명한 futex 버그인 줄 알았습니다.리눅스 futex_wait() 버그(프로세서는 Xeon E5이므로) 3.2.13-grsec-xxxx-grs-ipv6-64 커널이 포함된 Centos 6.5이며 futex 버그의 영향을 받지 않는 것으로 보입니다. 다음은 top 명령의 출력입니다.
top - 18:14:46 up 60 days, 6:32, 2 users, load average: 2.15, 1.24, 1.04
Tasks: 180 total, 1 running, 179 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.6%us, 1.0%sy, 0.0%ni, 95.0%id, 1.7%wa, 0.0%hi, 0.7%si, 0.0%st
Mem: 66008460k total, 21226356k used, 44782104k free, 817252k buffers
Swap: 61437944k total, 0k used, 61437944k free, 17404540k cached
Change delay from 3.0 to:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18042 root 20 0 15076 1272 904 S 100.0 0.0 5109402h top
18041 root 20 0 105m 1192 1028 S 100.0 0.0 900776:13 sh
18043 root 20 0 98.6m 808 692 S 100.0 0.0 900776:13 iostat
1 root 20 0 19276 1508 1228 S 0.0 0.0 0:02.40 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 5119411h ksoftirqd/0
5 root 20 0 0 0 0 S 0.0 0.0 10218485h kworker/u:0
6 root RT 0 0 0 0 S 0.0 0.0 986912:21 migration/0
7 root RT 0 0 0 0 S 0.0 0.0 906076:59 migration/1
9 root 20 0 0 0 0 S 0.0 0.0 45038,51 ksoftirqd/1
11 root RT 0 0 0 0 S 0.0 0.0 911444:25 migration/2
13 root 20 0 0 0 0 S 0.0 0.0 120103,33 ksoftirqd/2
14 root RT 0 0 0 0 S 0.0 0.0 941393:43 migration/3
strace는 이러한 프로세스가 select() 시스템 호출에서 중단되었음을 보여줍니다.
# strace -p 1938
Process 1938 attached - interrupt to quit
select(12, [0 11], NULL, NULL, NULL^C <unfinished ...>
Process 1938 detached
그 이유는 무엇입니까?
답변1
나는 오늘 비슷한 상황으로 어려움을 겪었습니다. 내 친구들은 gdb
, rb_backtrace()
그리고 이었습니다 rake debug
. 제 경우에는 드문 상황에서 무한 while 루프가 발생했습니다.
rb_backtrace()
역추적을 인쇄하기 만 하면 됩니다 . 내 경우에는 Apache의 오류 로그( )에 출력되었습니다 /var/log/apache2/error.log
.
이 역추적은 평소보다 역순입니다. 마지막 줄을 확인하고 애플리케이션 코드를 참조하는 줄을 찾으세요. 그런 다음 Ruby 디버거를 사용하여 해당 줄 바로 앞에서 디버깅합니다.
이 게시물https://robots.thoughtbot.com/using-gdb-to-inspect-a-running-ruby-process도움이 되었습니다.