O que pode deixar o Linux não responder por alguns minutos ao navegar em determinados sites?

28

Estou usando o Linux 4.15, e isso acontece comigo muitas vezes quando navego no Google, Facebook ou qualquer outro site que consome muitos recursos - Todo o sistema operacional fica sem resposta, congelado e inútil. A única coisa que vejo funcionando é o disco (partição principal do sistema formatada como ext4), que está em uso maciço (otimização de E / S).

Sou forçado a esperar um minuto ou mais para me livrar do inchaço, às vezes ele fica sem resposta por doze minutos e, portanto, fico frustrado. O fato de o sistema operacional não ser capaz de lidar bem com multitarefa tende a refletir um comportamento absolutamente estranho e inaceitável.

Isso não acontece apenas com o Firefox, mas com qualquer aplicativo interpretador de javascript, incluindo o Microsoft VSCode ou angular-cli ( ng servecomando), bem como qualquer outro encadeamento de execução que consome muitos recursos - como o caso de plantuml ao gerar um gráfico muito grande de um diagrama UML muito complexo.

Hoje, o sistema operacional se torna totalmente incontrolável, após o lançamento de um software de recuperação de dados para um HDD externo (partição ext4) que recentemente foi desconectado de uma porta USB ruim por pequenos movimentos.

Eu não sou capaz de dizer a causa raiz desse comportamento de buggy

Tenho muitas guias abertas no navegador e 94% de uso da partição do SO conforme a dfsaída:

Filesystem     1K-blocks      Used Available Use% Mounted on
udev             3964160         0   3964160   0% /dev
tmpfs             798164      3192    794972   1% /run
/dev/sda5      173466400 153224316  11407424  94% /
tmpfs            3990820     62936   3927884   2% /dev/shm
tmpfs               5120         4      5116   1% /run/lock
tmpfs            3990820         0   3990820   0% /sys/fs/cgroup
/dev/loop5           128       128         0 100% /snap/anbox-installer/24
/dev/loop2           128       128         0 100% /snap/anbox-installer/17
/dev/loop4        223616    223616         0 100% /snap/kde-frameworks-5/26
/dev/loop3         90624     90624         0 100% /snap/core/7169
/dev/loop7        223616    223616         0 100% /snap/kde-frameworks-5/25
/dev/loop8         90624     90624         0 100% /snap/core/7270
/dev/loop0         87552     87552         0 100% /snap/qownnotes/2160
/dev/loop1        241664    241664         0 100% /snap/kde-frameworks-5/27
tmpfs             798164         0    798164   0% /run/user/0
tmpfs             798164        32    798132   1% /run/user/1000
/dev/loop9         87552     87552         0 100% /snap/qownnotes/2176
/dev/sda3      188669948 187132488   1537460 100% /media/kais/DATA
/dev/sdb1       15142960   2091904  13051056  14% /media/kais/STORE N GO

Como hardware, estou usando:

  1. Intel Core i3 v2348M conforme lscpu:

    Architecture:        x86_64
    CPU op-mode(s):      32-bit, 64-bit
    Byte Order:          Little Endian
    Address sizes:       36 bits physical, 48 bits virtual
    CPU(s):              4
    On-line CPU(s) list: 0-3
    Thread(s) per core:  2
    Core(s) per socket:  2
    Socket(s):           1
    NUMA node(s):        1
    Vendor ID:           GenuineIntel
    CPU family:          6
    Model:               42
    Model name:          Intel(R) Core(TM) i3-2348M CPU @ 2.30GHz
    Stepping:            7
    CPU MHz:             905.312
    CPU max MHz:         2300.0000
    CPU min MHz:         800.0000
    BogoMIPS:            4589.49
    Virtualization:      VT-x
    L1d cache:           32K
    L1i cache:           32K
    L2 cache:            256K
    L3 cache:            3072K
    NUMA node0 CPU(s):   0-3
    Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer xsave avx lahf_lm epb pti tpr_shadow vnmi flexpriority ept vpid xsaveopt dtherm arat pln pts
    
  2. 8 GB de RAM. (Veja a htopsaída abaixo).

  3. 99,83 MHz de velocidade do barramento da placa principal
  4. Disco rígido interno de 500 GB - Este é o relatório SMART do sistema operacional:

    smartctl 6.6 2017-11-05 r4594 [x86_64-linux-4.15.0-33-generic] (local build)
    Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org
    
    === START OF INFORMATION SECTION ===
    Model Family:     Western Digital Blue Mobile
    Device Model:     WDC WD5000LPVX-22V0TT0
    Serial Number:    WD-WXE1E13AAMR4
    LU WWN Device Id: 5 0014ee 25db04ba7
    Firmware Version: 01.01A01
    User Capacity:    500,107,862,016 bytes [500 GB]
    Sector Sizes:     512 bytes logical, 4096 bytes physical
    Rotation Rate:    5400 rpm
    Device is:        In smartctl database [for details use: -P show]
    ATA Version is:   ACS-2 (minor revision not indicated)
    SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
    Local Time is:    Wed Aug  7 15:52:05 2019 CET
    SMART support is: Available - device has SMART capability.
    SMART support is: Enabled
    
    === START OF READ SMART DATA SECTION ===
    SMART overall-health self-assessment test result: PASSED
    
    General SMART Values:
    Offline data collection status:  (0x00) Offline data collection activity
                        was never started.
                        Auto Offline Data Collection: Disabled.
    Self-test execution status:      (   0) The previous self-test routine completed
                        without error or no self-test has ever 
                        been run.
    Total time to complete Offline 
    data collection:        ( 8040) seconds.
    Offline data collection
    capabilities:            (0x7b) SMART execute Offline immediate.
                        Auto Offline data collection on/off support.
                        Suspend Offline collection upon new
                        command.
                        Offline surface scan supported.
                        Self-test supported.
                        Conveyance Self-test supported.
                        Selective Self-test supported.
    SMART capabilities:            (0x0003) Saves SMART data before entering
                        power-saving mode.
                        Supports SMART auto save timer.
    Error logging capability:        (0x01) Error logging supported.
                        General Purpose Logging supported.
    Short self-test routine 
    recommended polling time:    (   2) minutes.
    Extended self-test routine
    recommended polling time:    (  93) minutes.
    Conveyance self-test routine
    recommended polling time:    (   5) minutes.
    SCT capabilities:          (0x7035) SCT Status supported.
                        SCT Feature Control supported.
                        SCT Data Table supported.
    
    SMART Attributes Data Structure revision number: 16
    Vendor Specific SMART Attributes with Thresholds:
    ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
      1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       1
      3 Spin_Up_Time            0x0027   149   143   021    Pre-fail  Always       -       1541
      4 Start_Stop_Count        0x0032   057   057   000    Old_age   Always       -       43173
      5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
      7 Seek_Error_Rate         0x002e   200   200   000    Old_age   Always       -       0
      9 Power_On_Hours          0x0032   083   083   000    Old_age   Always       -       12797
     10 Spin_Retry_Count        0x0032   100   100   000    Old_age   Always       -       0
     11 Calibration_Retry_Count 0x0032   100   100   000    Old_age   Always       -       0
     12 Power_Cycle_Count       0x0032   091   091   000    Old_age   Always       -       9496
    191 G-Sense_Error_Rate      0x0032   001   001   000    Old_age   Always       -       250
    192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       399
    193 Load_Cycle_Count        0x0032   147   147   000    Old_age   Always       -       160989
    194 Temperature_Celsius     0x0022   101   092   000    Old_age   Always       -       42
    196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
    197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0
    198 Offline_Uncorrectable   0x0030   100   253   000    Old_age   Offline      -       0
    199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
    200 Multi_Zone_Error_Rate   0x0008   100   253   000    Old_age   Offline      -       0
    
    SMART Error Log Version: 1
    No Errors Logged
    
    SMART Self-test log structure revision number 1
    No self-tests have been logged.  [To run self-tests, use: smartctl -t]
    
    SMART Selective self-test log data structure revision number 1
     SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
        1        0        0  Not_testing
        2        0        0  Not_testing
        3        0        0  Not_testing
        4        0        0  Not_testing
        5        0        0  Not_testing
    Selective self-test flags (0x0):
      After scanning selected spans, do NOT read-scan remainder of disk.
    If Selective self-test is pending on power-up, resume after 0 minute delay.
    

Estes são os resultados do uso de recursos por htop:

  1  [|||||                    14.1%]   Tasks: 286, 1497 thr; 2 running
  2  [|||||                    13.2%]   Load average: 3.00 4.97 6.09 
  3  [|||||                    12.5%]   Uptime: 3 days, 16:12:35
  4  [|||                       9.3%]
  Mem[|||||||||||||||||||5.09G/7.61G]
  Swp[|||||||||||||||||||3.68G/4.65G]

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 7006 jvb        20   0 6640M  102M  6780 S  5.3  1.3 18:53.18 java -Xmx3072m -X
 8224 kais     20   0 4537M  771M  200M S  6.6  9.9  2h31:23 /usr/lib/firefox/
 2299 kais     20   0 2958M  184M 42912 S  5.3  2.4 13:54.41 /usr/lib/firefox/
 1216 root       20   0  519M  120M 94640 S  5.3  1.5  1h52:50 /usr/lib/xorg/Xor
28401 kais     20   0 3354M  584M  107M S  7.9  7.5 34:44.51 /usr/lib/firefox/
 8439 kais     20   0 4537M  771M  200M S  4.6  9.9 37:06.21 /usr/lib/firefox/
 8831 kais     20   0 3222M  351M 64828 R  4.0  4.5 11:19.87 /usr/lib/firefox/
 7025 jvb        20   0 6640M  102M  6780 S  0.0  1.3  0:18.34 java -Xmx3072m -X
 7027 jvb        20   0 6640M  102M  6780 S  0.0  1.3  0:18.05 java -Xmx3072m -X
 5901 kais     20   0  7492  5612  2904 R  4.0  0.1  0:00.66 htop
 5329 kais     20   0  547M 47456 38388 S  1.3  0.6  0:01.29 /usr/lib/gnome-te
13540 kais     20   0 2958M  184M 42912 S  2.0  2.4  0:06.25 /usr/lib/firefox/
16897 kais     20   0  904M 28292 18076 S  2.0  0.4 50:08.37 pavucontrol
17999 kais     20   0 2424M 29460 25380 S  1.3  0.4 52:41.73 /usr/bin/pulseaud
F1 Help  F2 Setup  F3 Search  F4 Filter  F5 Tree  F6 SortBy F7 Nice  -  F8 Nice  +  F9 Kill  F10 Quit

Esses são os resultados das estatísticas da VM, geradas pelo comando vmstat 5.

AFAIK, o bloatware não deve deixar o sistema operacional sem resposta, então eu não consideraria ou aceitaria que o bloatware é a causa raiz do problema - já que o trabalho do sistema operacional é isolar processos e garantir multitarefa.

Não sei se esse problema é específico do sistema operacional, específico do hardware ou da configuração.

Alguma ideia?

Kais
fonte
4
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo . Atualize a pergunta conforme necessário para quaisquer esclarecimentos resultantes dos comentários / bate-papo. Obrigado!
Jeff Schaller
3
Eu suspeito que seu sistema está trocando bastante; você pode executar vmstat 5enquanto o sistema está funcionando? Não há problema em iniciar o vmstat antecipadamente e postar as linhas impressas durante os congelamentos. Estou procurando especificamente pelas colunas sie so, que indicam quanto o sistema está realmente trocando. Além disso, você pode postar a saída de top, classificada por uso de memória (shift-M)? (ou qualquer que seja o modo htop equivalente)
marcelm
1
Quando um sistema de arquivos está quase cheio, pode ficar muito lento. Não tenho certeza se esse é provavelmente o caso do ext4.
Ninguém
1
@ Kais Experimente os dois e veja o que funciona? Minha troca preenche no máximo a metade do que eu preparei e não me causa nenhum congelamento. Se alguém experimenta lentidão ou não com o uso de swap também depende dos padrões de uso, penso, portanto nossas experiências podem ser diferentes.
JoL
2
Tente desativar totalmente a troca - isso confirmará ou eliminará a debulha do disco como a origem do problema. O objetivo da troca é colocar páginas não utilizadas no disco, mas se a maioria das páginas estiver realmente em uso, a troca não ajudará. Se sua carga de trabalho típica exigir 10 GB de páginas residentes, uma máquina de 8 GB terá problemas. A resposta para a exaustão de recursos é diminuir a carga de trabalho ou aumentar o recurso (nesse caso, tente o chrome ou adicione mais memória física).
bain

Respostas:

27

O que pode tornar o Linux tão insensível?

O supercomprometimento da RAM disponível, que causa uma grande quantidade de trocas, pode definitivamente fazer isso. Lembre-se de que a E / S de acesso aleatório no seu HDD mecânico requer a movimentação de um cabeçote de leitura / gravação, que pode fazer apenas 100 buscas por segundo.

É comum o Linux sair totalmente para almoçar, se você comprometer demais a RAM "demais". Eu também tenho um disco giratório e 8 GB de RAM. Eu tive problemas com alguns softwares com vazamentos de memória. Ou seja, o uso de memória continua crescendo ao longo do tempo e nunca diminui; portanto, a única maneira de controlá-lo seria parar o software e depois reiniciá-lo. Com base nas experiências que tive durante isso, não estou muito surpreso ao ouvir atrasos em dez minutos, se você estiver gerando 3 GB ou mais de swap.

Você não verá necessariamente isso em todos os casos em que tiver mais de 3 GB de swap. A teoria diz que o conceito-chave está se debatendo . Por outro lado, se você estiver tentando alternar entre dois conjuntos de trabalho diferentes e exigir troca e devolução de 3 GB, a 100 MB / s, levará pelo menos 60 segundos, mesmo que o padrão de E / S possa ser perfeitamente otimizado. Na prática, o padrão de E / S estará longe de ser o ideal.

Após a dificuldade que tive com isso, reformatei meu espaço de troca para 2 GB (várias vezes menor que antes), para que o sistema não pudesse trocar tão profundamente. Você pode fazer isso mesmo sem mexer no redimensionamento da partição, porque mkswaputiliza um parâmetro de tamanho opcional.

O equilíbrio aproximado é entre ficar sem memória e interromper os processos e interromper o sistema por tanto tempo que você desiste e reinicia de qualquer maneira. Não sei se uma partição de swap de 4 GB é muito grande; pode depender do que você está fazendo. O importante é observar quando o disco começa a agitar, verificar o uso da memória e responder de acordo.

É difícil verificar o uso da memória de aplicativos com vários processos. Para ver o uso da memória por processo sem contar duas vezes a memória compartilhada, você pode usar sudo atop -R, pressionar Me me procurar na coluna PSIZE. Você também pode usar smem. smem -t -P firefoxmostrará o PSS de todos os seus processos do firefox, seguido por uma linha com o PSS total. Essa é a abordagem correta para medir o uso total de memória dos navegadores baseados no Firefox ou Chrome. (Embora existam também recursos específicos do navegador para mostrar o uso da memória, que mostrarão guias individuais).

sourcejedi
fonte
1
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
Jeff Schaller
Pode valer a pena considerar o uso de ulimitpara tentar controlar o uso dos processos (é complicado com um aplicativo de vários processos, mas pode ser útil).
Toby Speight
2
@TobySpeight se você quiser limitar o uso de memória do aplicativo, precisará usar o cgroups. ulimitrealmente não ajuda.
sourcejedi
Sim, essa é provavelmente uma escolha melhor. Realmente vale a pena mencionar na resposta, de qualquer maneira.
Toby Speight
2
The important thing is to watch out for when the disk starts churning, check your memory usage, and respond accordingly.<- ou, se você usar uma GUI, crie um crontab que execute um script simples (a cada minuto) que verifique a quantidade de RAM livre restante, avisando-o. Eu fiz o meu próprio para o Linux Mint e aprendi bastante com ele. É algo que você pode tentar brincar.
Ismael Miguel
5

AFAIK, o bloatware não deve deixar o sistema operacional sem resposta, então eu não consideraria ou aceitaria que o bloatware é a causa raiz do problema

Você não vai gostar disso, mas acho que o problema é o bloatware (embora não tenha certeza se é o problema da memória ou do disco). Infelizmente, o kernel do Linux é péssimo em lidar com situações de alta pressão de memória e é conhecido por exigir basicamente uma reinicialização quando a memória estiver esgotada. Há três coisas que me levam a acreditar que seu problema é esgotamento de recursos:

  1. Seu espaço em disco na raiz (/) e DATA está quase cheio. Não sei para que você usa o DATA, mas já tive problemas antes com o redimensionamento da minha partição raiz muito pequena e meu sistema se tornando inoperante.
  2. Você tem alta pressão de memória, o que significa que sua RAM está quase cheia. Quando a RAM começar a ficar cheia, você começará a ter falhas na página. As falhas de página ocorrem quando o kernel é incapaz de alocar memória suficiente para um processo e, em vez disso, deve usar alguns dos sistemas de espaço de troca muito mais lento. Isso nos leva à nossa última observação:
  3. Seu espaço de troca está quase cheio. Há claramente alguma pressão de memória alta no seu sistema, pois a RAM e a troca estão quase cheias.

Basicamente, junte esses três e seu sistema não terá recursos suficientes disponíveis para fazer quase tudo. É lamentável o quão mal o Linux lida com situações de pouca memória (em comparação com, digamos, o kernel do NT no Windows), mas parece que é assim. Você pode encontrar mais discussões neste tópico do Reddit e em sua lista de discussão vinculada.

Quanto a como corrigir sua situação, eu diria que aumentar o tamanho da troca é uma boa ideia, mas como você tem pouco espaço em disco, isso será um problema. A menos que seu servidor Minecraft tenha um monte de pessoas, acho que seria seguro reduzir sua memória para algo em torno de 1024m (eu pessoalmente uso 1024m com cerca de 10 pessoas e funciona bem). Eu também usaria torneira ou papel para o servidor Minecraft, pois eles tendem a ter melhor desempenho.

Boa sorte!

correr atrás
fonte
7
É claramente a memória que é o problema, não o disco. É verdade que o Linux é ruim sob alta pressão de memória. Mas não é verdade que é necessária uma reinicialização. Se você conseguir liberar alguma memória, o Linux se tornará tão sensível quanto antes da pressão da memória exceder a capacidade disponível.
Gilles 'SO- stop be evil'
1
@Kais Eu disse "isso nos leva à nossa última observação" como segue desde que eu estava falando sobre espaço de troca e continuaria falando sobre isso no ponto 3. Sobre o Minecraft, parecia que você estava executando um servidor Minecraft e havia alocado 3G de RAM para ele. Eu estava apenas dizendo que, a menos que você tenha uma tonelada de pessoas jogando ao mesmo tempo, talvez não precise de tanta memória RAM. Eu disse que "eles tendem a ter melhor desempenho" quando se fala em papel e torneira, que são servidores Minecraft alternativos que apresentam melhor desempenho em relação ao vanilla MC.
Chase
2
Ouvi dizer que geralmente usar swap é uma má idéia? Pelo menos no ambiente do servidor, quando o congelamento por 12 minutos não é aceitável?
9ilsdx 9rvj 0lo
2
@Kais, na minha experiência, o Windows é ainda pior com programas que não são da GUI, mas suspende programas da GUI não de primeiro plano se a pressão da memória for alta, o que resolve o problema da área de trabalho, supondo que os aplicativos da área de trabalho não tenham experiência tarefas.
Simon Richter
2
Baunilha Minecraft talvez; mas grandes modpacks facilmente chegar a 3 GiB antes de um jogador junta-se mesmo em :)
Luaan
4

Qual é o resultado de free -m? A quantidade de RAM que você tem é inútil se não soubermos quanto você está usando. Isso e estou interessado em saber quanto espaço de troca está sendo usado.

Eu acho que você respondeu sua própria pergunta, no entanto. Ter "muitas guias" abertas no navegador pode definitivamente tornar o sistema mais lento, se você nunca as fechar, pois elas continuarão consumindo memória; quando o sistema congela, quantos você abre por vez?

Também faz sentido se o seu sistema estiver congelando de outras tarefas que exigem muita memória, como "gerar um gráfico muito grande a partir de um diagrama UML muito complexo". Isso desacelerará totalmente o sistema, pois gera o gráfico, o que dificilmente surpreende.

Realmente parece que é assim que seu sistema deve se comportar. Ou isso ou eu estou perdendo alguma coisa aqui.

A propósito, as estatísticas de HDD não importam quando o sistema não responde, pois a falta de memória é quase sempre o culpado.

Zach Sanchez
fonte
1
"Isso absolutamente desacelerará seu sistema" - Sim, isso é esperado, mas não é esperado causar uma sessão X incontrolável (ou seja, resultado do sistema congelado), onde não consigo ver o cursor do mouse se movendo.
Kais
1
Isso seria realmente esperado, o comportamento que você está descrevendo é exatamente o que acontece quando eu uso muita RAM no meu sistema. Eu até entupi meu sistema a ponto de não conseguir mudar para um terminal baseado em texto e tenho o dobro da RAM que você. Se você se deparar com esse tipo de situação em que não pode usar sua sessão X, precisará mudar para o terminal baseado em texto e eliminar os processos ofensivos. Se isso falhar, você precisará fazer uma reinicialização completa. Sobre o melhor que posso lhe dizer.
Zach Sanchez
1
O @Kais macOS também fica lento em situações de pouca memória. Não há realmente nenhuma maneira de o sistema decidir sensatamente qual a memória absolutamente necessária para manter na RAM; portanto, a alternância entre aplicativos seria alterada como louca, a ponto de a interface do usuário não responder.
Kusalananda
5
ehh, não é que não haja maneiras muito mais eficazes de manter a interface do usuário do "gerenciador de janelas" responsiva. A pesquisa da MS escreveu todo um sistema operacional experimental em um projeto que proibia a paginação por demanda. Prova de conceito: execute o "gerenciador de janelas" no Midori, emule aplicativos Linux, incluindo swap. Lá está, o "gerenciador de janelas" permanecerá responsivo, mesmo que os aplicativos estejam trocando. No mínimo, isso pode permitir que você mate alguns aplicativos de maneira confiável para liberar memória. Linux não é perfeito. A mudança do Gnome do X11 para o Wayland ainda piorou significativamente a capacidade de resposta em sistemas sobrecarregados.
sourcejedi 7/08
2
As estatísticas do disco rígido podem importar. Uma possível causa de falta de resposta é um disco com falha, que causa um enorme atraso de E / S. Mas não vejo nenhuma evidência disso acontecendo neste caso.
200_success
4

Quando li o título, meu pensamento imediato foi "insuficiente RAM", porque eu mesmo experimentei esse problema no Linux, mais de 10 minutos de disco frenético agitando depois de abrir muitas guias do navegador. Concordo, é sombrio e precisa de melhorias. O Windows lida com essa situação muito melhor.

Algumas sugestões:

  • Adicione um applet de monitor de memória à bandeja do sistema para ficar de olho nele.
  • Nas preferências do Firefox, defina o "limite do processo de conteúdo" como "1". Como o texto abaixo da configuração diz: "Processos de conteúdo adicionais podem melhorar o desempenho ao usar várias guias, mas também usarão mais memória".
  • Remova ou substitua quaisquer complementos de navegador que consomem muita memória. Mantenha seu bloqueador de anúncios, pois os anúncios consomem mais memória do que qualquer bloqueador.
  • Investigue e remova outros programas que consomem muita memória.

No entanto, a única solução verdadeira é comprar mais RAM.

Não apenas uma abundância de RAM impedirá que essa catástrofe ocorra, como permitirá que o sistema construa um grande cache de arquivos na RAM, o que o seu sistema atualmente não pode fazer porque corre tão perto do limite. Um cache de arquivos grandes retira o trabalho do disco rígido e faz com que quase todas as ações no sistema pareçam mais rápidas em geral. Vale a pena.

Boann
fonte
Ótima resposta, muito obrigado. Porém, em relação a "Processos de conteúdo adicionais podem melhorar o desempenho ao usar várias guias, mas também usarão mais memória". - Se bem entendi, o Firefox pode abrir até 8 processos por guia, por configuração padrão?
Kais
1
@ Kais Eu acho que é um processo por guia. De qualquer forma, se você definir o limite como 1, haverá um total de 1 processo para todas as guias, o que deverá usar menos memória.
Boann
Entendido, obrigado novamente.
Kais
4

Sua saída htop mostra que sua necessidade de RAM é superior à sua capacidade (RAM total + SWAP). Portanto, a primeira consideração óbvia a ser feita é reduzir o uso de RAM ou aumentar sua disponibilidade.

Observe que as versões modernas do firefox são extremamente famintas por recursos, devido à maneira como as janelas / guias recebem processo e espaço de memória. A idéia era evitar travar as guias, deixando todo o navegador de joelhos. Vale o preço? Quem sabe ... De qualquer forma, tive um problema semelhante devido ao acima exposto, pois minha placa mãe Pentium 4 suporta apenas 2 GB de RAM. Para evitar possíveis falhas de memória esgotadas, adicionei ~ 800M de espaço de troca em um SSD sobressalente, obviamente com a intenção de usá-lo o mínimo possível. Eu consegui isso alterando uma configuração conhecida como swappiness, que determina o quão ansioso o kernel está para trocar as páginas de memória. Alguns comandos úteis da seguinte maneira.

Verifique a swappiness atual: cat /proc/sys/vm/swappiness

Isso pode resultar em cerca de 60, o que é bastante alto para o desempenho máximo em sistemas com carga mais baixa. Para você, obviamente, isso funciona contraproducente, para que você possa alterar a configuração usando um comando como sysctl vm.swappiness=1para alterar a configuração enquanto o sistema estiver em execução.

Para salvar essas alterações, você precisará procurar o arquivo /etc/sysctl.conf. Nesse arquivo, altere o valor ou adicione a linha vm.swappiness=1.

Lembre-se, isso não é uma solução no seu caso, mas deve ser uma solução útil.

Créditos https://askubuntu.com/questions/103915/how-do-i-configure-swappiness

fonte para a resposta acima, inclui mais explicações. Achei esse post muito útil no meu caso.

Mr. Donutz
fonte
Obrigado pela sua resposta. Parece ser uma boa recomendação para a configuração da VM.
Kais
2

Uma excelente discussão sobre como o problema é causado, continua e cresce. Eu gosto de me antecipar a problemas como o que você experimenta, lançando o hardware no design do computador inicial e / ou atualizando uma implementação existente. Você pode,

  • adicione RAM (32 GB funciona muito bem para muitas configurações)

  • substitua sua unidade de disco rígido por um SSD

  • adicione um SSD (Solid State Drive) para a unidade de troca

  • crie uma partição de swap na RAM (com 32 ou mais GB de RAM)

  • obtenha um HDD mais rápido

  • mude para um sistema com processamento mais rápido e arquitetura de barramento mais ampla / mais rápida.

Algumas dessas atualizações / substituições de hardware podem estar bem abaixo de US $ 100US. Eles não são específicos para o Linux, nem suas implementações exatas de software, mas o hardware que você está usando não parece adequado às suas tarefas.

Velho tio Ho
fonte
1
Resposta muito útil, obrigado por apontar as recomendações de substituição de hardware.
Kais
1
Espero que ajude. Não sabe que tipo de computador ou equipamento específico, portanto, são etapas genéricas, na ordem da melhoria mais provável. Qualquer um ou todos os ajudaria a desacelerações específicas que provavelmente são causadas por debulha de cache, troca e por leituras / gravações de disco mais rápidas e menos em geral
Old Uncle Ho
6
A maioria dessas são boas sugestões, mas a troca para a RAM é basicamente inútil, a menos que você esteja usando zram ou zswap para troca compactada para a RAM - elas valem a pena, mas a troca para um ramdisk não compactado cria exatamente a mesma pressão de RAM que ela libera ( na verdade, um pouco mais devido à sobrecarga).
cas
Não sei por que alguém trocaria a RAM, exceto ao compactar, o que parece ser uma ótima idéia para cargas de trabalho com alta RAM / baixa CPU.
Peter - Restabelece Monica
1
@ ban: como é sempre melhor ter páginas trocadas para RAM vs. ainda mapeadas? Eles ainda estão usando o mesmo número de páginas de RAM física, a menos que você use a compactação. Éque está o valor. A única diferença é mais contabilidade, mas talvez tabelas de páginas de hardware mais limpas. Para a memória somente de inicialização que processa basicamente a negligência de remover o mapeamento, por exemplo, funções / dados que são tocados apenas durante a inicialização, a troca para o disco é melhor porque não consome nenhum espaço DRAM. Para daemons em segundo plano que não são usados ​​interativamente, a latência não é importante; portanto, novamente a troca de disco vence.
Peter Cordes
2

Geralmente é "apenas" o X11 que se torna inutilizável. Para obter um pressionamento de tecla do teclado em um programa e mostrar algo na tela, é necessário executar o código em vários processos diferentes. (Servidor X para obter o pressionamento de tecla do kernel, xterm ou equivalente para obter o evento e decidir desenhar algo, envie uma mensagem ao servidor X para desenhar um glifo de uma fonte.)

Apenas passar o mouse sobre uma janela com um navegador da Web mostrando uma página com várias porcarias de Javascript pode resultar em várias mensagens para vários processos, os quais fazem com que esses processos sejam ativados e toque em vários dados. Presumivelmente, incluindo um monte de bitmaps descompactados "em cache". Portanto, é altamente provável que despeje mais coisas que são necessárias em breve.

ctrl + alt + F2 para alternar para outro console virtual geralmente possibilita o login e a execução de comandos do shell com apenas alguns segundos de latência quando algo está causando a troca de trocas. É só bash; o kernel do Linux não é permutável e possui todo o
código VTY e teclado <-> TTY.


Para evitar lentidão quando você não está realmente se debatendo, reduzir a "troca" pode ajudar. por exemplo, defino o /proc/sys/vm/swappinesssintonizador para6 no meu desktop com 16GB de RAM e uma partição swap de 2 GB em um NVMe SSD. Você pode ler mais sobre o ajuste da latência interativa (em oposição à taxa de transferência do servidor); qualquer guia mencionará isso sintonizável.

Mas se você tiver alguma troca, o Linux a usará antes de chamar o killer do OOM. Mantenha sua partição swap pequena , grande o suficiente para que o Linux pagine porcaria realmente obsoleta que normalmente não se acostuma por muito tempo. (por exemplo, vazamentos de memória!)

Não tive problemas com o swap estar cheio. O Linux moderno lida com espaço de troca limitado muito bem. O Chromium (que eu uso em vez do Firefox) às vezes fica lento com dezenas de guias do Stack Overflow abertas, mas o The Great Suspender é um ótimo complemento para descarregar as guias quando você não as estiver usando. Eu acho que economiza RAM significativa para mim, embora apenas descarregue abas onde você não digitou nada em uma caixa de texto. Também pode estar disponível para o Firefox.


Como outros sugeriram, 16 GB de RAM são realmente bons para uso interativo com o Linux. Os preços da DRAM estão relativamente baixos atualmente ; depois de cravar cerca de 1,5 anos atrás, eles caíram novamente.

Peter Cordes
fonte
Ótima resposta, muito obrigado. Mas em relação a "um monte de porcaria de Javascript pode resultar em um monte de mensagens para um monte de processos, os quais fazem com que esses processos sejam ativados e tocem em um monte de dados" - Estou me perguntando quais são esses processos, eles são o Firefox processos filhos?
Kais
@ Kais: Gerenciador de janelas, navegador da web, servidor X, possivelmente vários outros clientes X em um desktop mais complicado. E todos os outros processos cujas janelas o mouse passa (o que eu estava pensando quando escrevi essa frase). por exemplo, no KDE, a barra de tarefas é um processo separado ( plasma) do kwingerenciador de janelas.
Peter Cordes
Eu uso o LXDE, portanto, no meu caso, apenas o Openbox e o servidor XOrg são os processos que podem acordar? Além disso, quais são os tipos de mensagens que são passadas para eles?
Kais
@Kais: mensagens do protocolo X11 em um soquete de domínio unix. Tente executar um xevdia para ver que tipo de mensagem você pode receber ao mover o mouse. Tente também strace xevver as chamadas do sistema que envolvem o lado do cliente.
Peter Cordes
Entendo obrigado. Ao executar o xevcomando, recebo mensagens apenas alternando para janelas diferentes e clicando nelas, mas não é o caso quando apenas passo o mouse.
Kais
-2

O que pode deixar o Linux não responder por alguns minutos ao navegar em determinados sites?

Você não está usando o Linux corretamente. O que se torna especialmente visível em uma máquina com recursos limitados. Você não precisa de mais RAM, nem um processador mais rápido.

Fundo:

Almost every non-user program’s priority is 0.
Almost every user program’s priority is 20.

Para 'corrigir' o seu problema:

Deixe os programas não-usuários em paz, mas comece a alterar as prioridades (níveis agradáveis) dos seus programas para que eles não causem problemas. Edite o que inicia seus programas para incluir bons níveis, que geralmente não são um problema, para o pior infrator.

Exemplos do mundo real:

KMail:          nice -n 1 kmail -caption "%c" %i %m
LibreOffice:    nice -n 2 libreoffice --writer %U
Firefox:        nice -n 3 firefox %u
WorstOffender:  nice -n 9 {i'm a bad program}

Seu WorstOffender continuará sem resposta por alguns minutos, isso é literalmente um problema para comprar uma caixa melhor, mas agora não estará causando o sistema operacional inteiro (Linux) e tudo o que você está executando para deixar de responder.

Michael
fonte
2
Trabalho há décadas com o Linux, com muitos servidores e em minha própria estação de trabalho (geralmente em configurações de VM muito limitadas), e nunca tive que corrigir um problema de desempenho relacionado à RAM nice -n. "Você não precisa de mais RAM" - ele certamente precisa de mais RAM; ou poderia ulimitlimitar os piores criminosos para que sua RAM existente seja suficiente novamente. "Você não está usando o Linux corretamente." está completamente desligado.
AnoE
E trabalhei com instalações da GUI do Linux em hardware com recursos limitados nos últimos 22 anos e trabalhos "agradáveis" para resolver, mantendo o "Linux sem resposta por minutos".
Michael
Não nego que funcione; Só estou dizendo que colocá-lo como a maneira "certa" de trabalhar com o Linux pode não ser a melhor coisa.
AnoE