Firefox가 중단되었습니다. 일반적으로 -1, -9 또는 -15로 종료하지만 이번에는 젠장, 이유를 알고 싶었습니다. 나는 이것에 약 1시간을 낭비하고 실제 문제 해결 이상의 교육을 구합니다.
목표: Firefox 인스턴스를 종료하고 다시 시작하지 않고 다시 실행합니다.
Firefox는 잘 실행되지만 과도한 메모리 사용량으로 인해 속도가 느려집니다. 약 천 개의 브라우저 창에 Avogadro의 여러 탭이 열려 있습니다. (일부 과장이 있을 수 있습니다.) 브라우저 창이 내용 다시 그리기를 멈췄을 때 일부 탭을 닫고 있었습니다. 관련 없는 창을 드래그하면 해당 창의 남은 부분이 영원히 남아 있을 수 있습니다. WM_PAINT에 해당하는 X11이 무엇이든 무시됩니다. 이메일에 있는 URL을 클릭하여 새 Firefox를 시작하려고 하면 "Firefox가 이미 실행 중이지만 응답하지 않습니다."라는 오류 메시지만 나타납니다.
Firefox의 프로세스 ID는 9297입니다.
프로세스 526은 Windows 관리자입니다.
=> ps axl 쿼리 9297 |
0 1000 9297 526 13 -7 6080428 4465776 poll_s S<sl ? 11602:12 firefox
0 1000 20000 9297 20 0 0 0 exit Z ? 216:31 [plugin-containe] <defunct>
(저는 우선순위가 Firefox 정지와 관련이 있는지 확인하기 위해 renice와 놀고 있었습니다. 아니요. 하지만 -7로 두었습니다.)
=> ps -efL |쿼리 9297
darenw 9297 526 9297 57 61 Sep22 ? 6-23:10:34 firefox
darenw 9297 526 9300 0 61 Sep22 ? 00:00:00 firefox
darenw 9297 526 9301 0 61 Sep22 ? 00:00:00 firefox
... dozens like these ...
darenw 9297 526 7607 0 61 16:17 ? 00:00:00 firefox
darenw 9297 526 7657 0 61 16:17 ? 00:00:00 firefox
darenw 20000 9297 20000 1 1 Sep23 ? 03:34:36 [plugin-containe] <defunct>
=> ps axl grep 20000 |
0 1000 20000 9297 20 0 0 0 exit Z ? 216:31 [plugin-containe] <defunct>
주 스레드 9297이 아직 종료 코드를 가져와 스레드를 종료하지 않았기 때문에 문제가 지속됩니다. 적어도 그것은 "무효화" 프로세스에 대한 나의 이해입니다. 이 세부 사항을 더 자세히 조사하는 방법이나 이것이 Firefox 정지의 원인인지 확인하는 방법을 모르겠습니다.
=> strace -f -p 9297
...
[pid 13945] <... select resumed> ) = 0 (Timeout)
[pid 13945] select(0, NULL, NULL, NULL, {0, 10000}) = 0 (Timeout)
[pid 13945] select(0, NULL, NULL, NULL, {0, 10000} <unfinished ...>
[pid 9356] <... futex resumed> ) = -1 ETIMEDOUT (Connection timed out)
[pid 9356] futex(0x7f28b7df8be8, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 9356] futex(0x7f28b7df8c14, FUTEX_WAIT_BITSET_PRIVATE, 1, {6910910, 806929252}, ffffffff <unfinished ...>
...
strace를 실행할 때마다 동일한 6개 라인이 반복되지만 때로는 PID에 대해 3개 대신 2개 라인만 있는 경우도 있습니다. 이 두 가지 외에 다른 PID에 대한 언급은 없습니다.
=> ps axl grep 13945 |
4 0 4985 23253 20 0 11064 2236 pipe_w S+ pts/19 0:00 grep 13945
=> ps axl grep 9356 |
4 0 5111 23253 20 0 11064 2232 pipe_w S+ pts/19 0:00 grep 9356
그렇다면 두 프로세스 13945와 9356은 무엇입니까?
=> ps -eL | grep 9297 |grep 9356
9297 9356? 02:02:50 소프트웨어 VsyncTh 9297 13945? 01:04:15 파이어폭스 브라우저
그렇다면 SoftwareVsyncTh는 무엇입니까? Google은 별로 도움이 되지 않았습니다. 이 기호는 "ps" 출력과 기타 프로세스 및 스레드 목록에 표시되지만 특정 방식으로 이를 언급하는 온라인 소스 코드나 Q&A 포럼에는 표시되지 않습니다. 내가 아는 한, 이 두 프로세스는 Firefox가 멈춰서 창을 그릴 수 없는 것과는 아무런 관련이 없습니다.
더 많은 단서를 찾으려면 어떤 추가 명령을 사용할 수 있나요? 창, 탭 및 해당 URL 목록을 가져오고 셸 명령줄에서 하나(가장 의심스러운/스팸 URL)를 닫는 방법이 있습니까?
글쎄, 무슨 일이 일어났든 메인 스레드에서 몇 가지 정보를 얻을 수 있다는 것을 알았습니다.
=> 추적 -p 9297
--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TKILL, si_pid=9297, si_uid=1000} ---
rt_sigreturn({mask=[]}) = -1 EINTR (Interrupted system call)
poll([{fd=23, events=POLLPRI|POLLOUT}], 1, 5000) = ? ERESTART_RESTARTBLOCK (Interrupted by signal)
계속해서 반복해도 아무 변화가 없습니다.
저는 스레드, 프로세스, 뮤텍스, 퓨텍스 등에 관한 천재는 아니지만 아마도 이 미스터리를 해결하면 천재가 될 수 있을 것입니다! 더 자세히 조사하고 Firefox 정지와 관련이 있을 수 있는 추적 결과에서 정확히 무슨 일이 일어나고 있는지 이해하려면 더 많은 명령을 알아야 합니다.
Firefox를 다시 시작하도록 할 수 있는 명령이 있나요?
시스템 사양: 쿼드 코어 Intel 프로세서, 16GB, Arch Linux 마지막 업데이트는 약 한두 달 전에 이루어졌습니다. icewm, 여러 작업 공간, 다양한 텍스트 편집기, PDF 뷰어, 브라우저 및 열려 있는 모든 것을 사용하세요. 화면 왼쪽 상단에 RAM 및 스왑 공간 사용량을 표시하려면 conky를 실행하세요. 나는 보통 교환 직전에 있습니다.