Quando meu computador congela, geralmente é muito fácil resolver o problema entrando no terminal e executando top para descobrir o que está consumindo a memória e interrompendo o processo. Às vezes pode ser difícil quando está muito congelado, tenho que apertar CTRL
+ ALT
+ F1
para entrar no terminal. Também é útil ter uma configuração de atalho de teclado para executar o xkill, para que eu possa encerrar aplicativos GUI que sei que estão congelando.
O que ainda não descobri como lidar, mesmo depois de anos tendo esse problema, são esses scripts de navegador que não respondem. Às vezes meu computador congela tanto que não consigo mover o ponteiro do mouse, e eventualmente ele descongela e vejo que um dos navegadores (sempre foi o Firefox, ultimamente tem sido o Chrome), aparecerá um pop-up dizendo que um javascript o script não está respondendo. Isso me dá a opção de matá-lo, mas apertar o botão matar nunca parece resolver o problema.
Como você lida com esse problema? Além disso, como você lida com problemas de sobrecarga de memória em geral? Eu costumava apenas apertar CTRL
+ ALT
+ T
, executar top e ver qual programa estava usando mais memória e depois matá-lo, mas são muitas etapas e quando o computador está travado, uma única etapa pode levar muito tempo. Então, estou procurando maneiras melhores, como configurar um killswitch para fazer isso em uma única etapa ou configurar um daemon que elimine qualquer programa que esteja prestes a congelar a máquina.
Além disso, qual é a melhor maneira de descobrir qual programa está causando o problema? top nem sempre é fácil de ver porque às vezes top não mostra nenhum programa consumindo CPU excessiva, mas se eu rolar para baixo vejo que há cerca de 50 instâncias deste programa em execução, então seria muito melhor se eu pudesse ver a CPU combinada uso do programa. Firefox e Chrome são os dois principais culpados, ocasionalmente sublime-text-3 (talvez isso seja devido a muitas abas abertas?).
Então encontrei este comando:
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
O que dá esta lista agora:
PID PPID CMD %MEM %CPU
6896 968 /opt/google/chrome/chrome - 13.1 2.7
27334 4769 /usr/lib/firefox/firefox 6.6 13.0
5607 4769 /usr/bin/compiz 4.7 44.7
26381 26363 /usr/lib/libreoffice/progra 2.7 0.0
953 4769 /opt/google/chrome/chrome h 2.0 3.0
2777 2457 /usr/lib/xorg/Xorg -core :0 1.8 29.5
6980 4769 /usr/lib/x86_64-linux-gnu/z 1.6 0.0
8180 8167 mono /usr/lib/AirVPN/AirVPN 1.6 2.1
1096 968 /opt/google/chrome/chrome - 1.4 0.1
Meu computador não está congelado agora, então está tudo bem, mas o próprio Firefox está congelando quando tento usá-lo. Costumo manter muitas abas abertas. É por isso que vejo tantas instâncias do Chrome e do Firefox quando executo o top?
Vejo que o htop oferece muito mais opções do que o top, então provavelmente é uma ferramenta melhor para diagnosticar o problema. Há algumas coisas que não entendo sobre tudo isso, em primeiro lugar, o que é mais importante% CPU ou% MEM quando se trata de seu computador travar regularmente. htop permite classificar por qualquer um deles. Aqui está o que ele me mostra quando classifico por uso de memória:
e aqui está o que obtenho quando classifico por uso da CPU:
Então, como vi ao executar o ps, o firefox e o chrome estão ocupando a maior parte da memória, e o compiz está ocupando a maior parte da CPU. Existem outros fatores importantes a serem observados quando se trata de descongelar seu sistema? Por exemplo, se o tempo que um processo está em execução entra em jogo, vejo que o compiz está em execução há mais tempo do que qualquer outra coisa:
Quanto ao killswitch, encontrei um que outra pessoa escreveu:
while [ 1 ]; do
echo
echo checking for run-away process ...
CPU_USAGE=$(uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g")
CPU_USAGE_THRESHOLD=300
PROCESS=$(ps aux r)
TOPPROCESS=$(ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | grep -v PID | head -n 1)
if [ $CPU_USAGE -gt $CPU_USAGE_THRESHOLD ]; then
kill -9 $(ps -eo pid --sort=-%mem | grep -v PID | head -n 1)
echo "High memory usage process killed $TOPPROCESS\n"
echo "Load average was at $CPU_USAGE\n"
else
echo 'CPU Load Back to Normal'
exit 0
fi
done
Mas não tenho 100% de certeza de como funciona ou o que faz. Quando corro:
uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g"
Ele retorna números como 149, 179, 178. Li o manual de tempo de atividade e não consigo entender como ele é útil para evitar o congelamento do sistema.
Eles não são IDs de processo que vejo em nenhuma das principais memórias usando aplicativos mostrados por htop.
Executando o tempo de atividade por si só, eu entendo o seguinte:
17:49:53 up 1 day, 11:09, 2 users, load average: 3.16, 2.45, 2.03
Portanto, meu sistema está ativo há 17,49 horas. Não sei o que significa a média de carga em termos do meu computador. Recebi este computador do meu irmão recentemente, já que ele tinha um computador não utilizado em seu escritório, quando verifico as especificações:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 26
Model name: Intel(R) Core(TM) i7 CPU 940 @ 2.93GHz
Stepping: 4
CPU MHz: 1867.000
CPU max MHz: 2934.0000
CPU min MHz: 1600.0000
BogoMIPS: 5852.21
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-7
Estou muito chocado, é uma fera, 8 CPUs. E a RAM:
free -lm
total used free shared buff/cache available
Mem: 12005 7154 311 531 4539 3996
Low: 12005 11694 311
High: 0 0 0
Swap: 30516 1002 29513
12 Gb, meu Deus, não fazia ideia. Meu laptop antigo tinha 2 Gb. Portanto, é um mistério por que está congelando assim agora.
Então, o que estou pensando é:
1.) Qual é a melhor maneira de descobrir o que está causando lentidão e congelamento do sistema?
2.) Como você lida com essa situação específica de script sem resposta sem ter que encerrar o navegador real? Eu uso plugins como NoScript, mas muitas vezes preciso habilitar o javascript. Além disso, certos plug-ins também usam scripts. Por que matá-los nunca resolve nada, é porque eles não podem ser mortos assim? Haveria uma maneira de escrever um script que pesquisasse em seus navegadores e descobrisse qual guia está executando a página com o script que não responde, feche e reinicie a guia? Ou melhor ainda, apenas encerrar o script de uma forma que permita que o computador funcione corretamente novamente? Não sei por que um script que não responde congela todo o meu sistema. Acho que o navegador consome memória excessiva ao tentar executar o script com falha.
2.) Qual é a melhor maneira de descongelar seu sistema, especialmente nos piores cenários, quando você não consegue mover o ponteiro do mouse. Um combo de teclas de atalho conectado a um killswitch seria o caminho a seguir?
3.) Para fazer um kill switch, como você faria isso? O que o script deve fazer? Deve descobrir qual programa está usando mais memória e/ou CPU e eliminá-lo. Eu preferiria adotar uma abordagem mais sofisticada porque, em certos casos, o aplicativo que está usando mais memória ou CPU pode ser algo que preciso manter aberto, como se estivesse trabalhando no Firefox e matá-lo poderia causar perda de dados. Estou escrevendo. Posso fornecer ao script uma lista de aplicativos que são menos importantes, para que ele possa percorrer essa lista e avaliar se eles estão consumindo memória suficiente para valer a pena matá-los.
4.) Aumentar o tamanho da partição SWAP ajudaria?
Responder1
Seu gargalo é o que parece estar no limite em um gerenciador de tarefas como o htop
. Nesse caso, parece que a RAM está transbordando de guias do Chrome. Felizmente,Chrome vem com seu próprio gerenciador de tarefasque permite que você veja e elimine qual guia está consumindo sua RAM:
Extensões do Chrome comoO Grande SuspensoreGuias preguiçosastambém ajuda a economizar RAM.
Se o Chrome não for o culpado e você precisar de um sistema responsivo rápido, veja:Pressa! O Ubuntu está ficando sem RAM rapidamente e meu computador está prestes a congelar completamente! Qual comando me salvará?