Por que o Firefox está preso e como posso soltá-lo?

2

O Firefox está suspenso. Normalmente eu mato com -1, -9 ou -15, mas dessa vez, quero descobrir o porquê. Eu tenho uma hora ou mais a perder com isso, e buscar a educação acima de realmente resolver o problema.

Objetivo: obter essa instância do firefox em execução novamente, sem eliminá-lo e reiniciá-lo.

O Firefox estava funcionando bem, apesar de lento devido ao uso pesado de memória. Eu tinha o número de abas de Avogadro abertas em cerca de mil janelas do navegador. (Algum exagero pode estar envolvido.) Eu estava fechando algumas abas, quando em um ponto a janela do navegador parou de repintar o conteúdo. Arrastar janelas não relacionadas sobre causas remanescentes dessas janelas para permanecerem ali para sempre. Qualquer que seja o equivalente X11 de WM_PAINT, ele está sendo ignorado. As tentativas de abrir um novo Firefox clicando em URLs nos e-mails exibem apenas uma mensagem de erro dizendo "O Firefox já está em execução, mas não está respondendo".

O Firefox tem o ID do processo 9297.
O processo 526 é o gerenciador de janelas.

= > ps axl | grep 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>

(Eu estava jogando com o renice para ver se a prioridade tinha algo a ver com o firefox pendurado. Não. Mas deixei-o em -7.)

= > ps -efL | grep 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>

Este se atrasa porque o segmento principal 9297 ainda não terminou esse segmento, obtendo seu código de saída. Pelo menos, essa é minha compreensão de processos "defuntos". Não sei como investigar mais detalhadamente esse detalhe, ou como determinar se é por isso que o Firefox está suspenso.

= > 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 ...>           
...

As mesmas seis linhas se repetem enquanto eu deixo o strace rodar, embora às vezes existam apenas duas linhas em vez de três para o PID. Eu não vi nenhuma menção a outros pids, além desses dois.

= > 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

Então, quais são esses dois processos, 13945 e 9356?

= > ps-eL | grep 9297 | grep 9356
    9297 9356? 02:02:50 SoftwareVsyncTh     9297 13945? 01:04:15 firefox

Então, o que é SoftwareVsyncTh? O Google não ajuda muito. Esse símbolo aparece na saída 'ps' e em outra listagem de processos e encadeamentos, mas não em qualquer código-fonte on-line ou em fóruns de Q & A que o mencionem de uma maneira específica. Por tudo que eu sei, e esses dois processos, não tem nada a ver com o Firefox estar preso e não pintar suas vitrines.

Que comandos adicionais eu poderia usar para descobrir mais pistas? Existe uma maneira de obter uma lista de janelas e guias com suas urls, e fechar uma (a URL mais suspeita / com aparência de spam) de uma linha de comando shell?

Bem, o que quer que esteja acontecendo com eles, descubro que posso obter algumas informações sobre o tópico principal:

= > strace -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) 

que se repete sem alterações.

Eu não sou um gênio em threads, processos, exclusões mútuas e futexes e tudo mais, mas talvez resolvendo esse mistério, eu me tornarei um! Eu só preciso saber mais comandos para investigar mais, e entender o que exatamente está acontecendo nos resultados strace que podem estar relacionados com o enforcamento do Firefox.

Existe algum comando que eu possa tentar para colocar o Firefox de volta em ação?

Especificações do sistema: Intel quad core, 16GB, o Arch Linux foi atualizado há cerca de um mês ou dois atrás. Usando o icewm, vários espaços de trabalho e muitos editores de texto, visualizadores de PDF, navegadores e o que estiver aberto. Executando conky para mostrar RAM e uso de swap no canto superior esquerdo da tela. Eu geralmente estou prestes a entrar em swap.

    
por DarenW 05.10.2016 / 10:37

0 respostas