Cosa può far sì che Linux non risponda per minuti alla navigazione di determinati siti Web?


28

Sto usando Linux 4.15, e questo mi succede molte volte quando navigo su Google, Facebook o qualsiasi altro sito Web affamato di risorse - L'intero sistema operativo non risponde, congelato e inutile. L'unica cosa che vedo funzionare è il disco (partizione di sistema principale formattata come ext4), che è ampiamente utilizzato (limitazione I / O).

Sono costretto ad aspettare un minuto o più per sbarazzarmi del gonfiore, a volte non risponde per dodici minuti, e quindi mi sento frustrato. Il fatto che il sistema operativo non sia in grado di gestire correttamente il multitasking, tende a riflettere un comportamento assolutamente strano e inaccettabile.

Questo non accade solo con Firefox, ma con qualsiasi applicazione di interpretazione javascript incluso Microsoft VSCode o angular -cli ( ng servecomando) e qualsiasi altro thread di esecuzione affamato di risorse - come il caso di plantuml quando si genera un grafico molto grande da un diagramma UML molto complesso.

Oggi, il sistema operativo diventa totalmente ingestibile, dopo aver avviato un software di recupero dati per un HDD esterno (su partizione ext4) che recentemente è stato scollegato da una porta USB difettosa con poca mossa.

Non sono in grado di dire la causa alla base di tale comportamento errato

Ho molte schede aperte nel browser e il 94% di utilizzo della partizione OS secondo l' dfoutput:

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

Come hardware, sto usando:

  1. Intel Core i3 v2348M secondo 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 di RAM. (Vedi l' htopoutput di seguito).

  3. 99,83 MHz di velocità del bus della scheda madre
  4. HDD interno da 500 GB - Questo è il report SMART del sistema operativo:

    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.
    

Questi sono i risultati dell'utilizzo delle risorse per 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

Questi sono anche i risultati delle statistiche delle VM, generate dal comando vmstat 5.

AFAIK, il bloatware non dovrebbe rendere il sistema operativo non rispondente, quindi non prenderei in considerazione o accetterei nemmeno che il bloatware sia la causa principale del problema, poiché il processo del sistema operativo isola i processi e garantisce il multitasking.

Non so se questo problema sia specifico del sistema operativo, specifico dell'hardware o specifico della configurazione.

Qualche idea?


4
I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat . Assicurati di aggiornare la domanda in base alle necessità per eventuali chiarimenti risultanti dai commenti / chat. Grazie!
Jeff Schaller

3
Sospetto che il tuo sistema si stia scambiando molto; puoi correre vmstat 5mentre il tuo sistema funziona? Va bene avviare vmstat in anticipo e pubblicare le righe stampate durante i blocchi. Sto cercando specificamente le colonne sie so, che indicano quanto il sistema sta effettivamente scambiando. Inoltre, è possibile pubblicare l'output di top, ordinati per utilizzo della memoria (shift-M)? (o qualunque sia la modalità htop equivalente)
marcelm

1
Quando un file system è quasi pieno, può diventare molto lento. Non sono sicuro se questo è probabilmente il caso con ext4.
Nessuno l'

1
@Kais Provare entrambi e vedere cosa funziona? Il mio scambio si riempie al massimo alla metà di quello che ho preparato e non mi provoca alcun blocco. Se uno subisce rallentamenti o meno dall'uso dello swap dipende anche dai modelli di utilizzo che penso, quindi le nostre esperienze possono differire.
JoL

2
Prova a disabilitare completamente lo swap: ciò confermerà o eliminerà l'arresto del disco come fonte del problema. Lo scopo dello scambio è di mettere le pagine inutilizzate sul disco, ma se la maggior parte delle pagine è davvero in uso, lo scambio non sarà di aiuto. Se il tuo carico di lavoro tipico richiede 10 GB di pagine residenti, una macchina da 8 GB avrà difficoltà. La risposta all'esaurimento delle risorse è di ridurre il carico di lavoro o aumentare la risorsa (in questo caso, provare Chrome o aggiungere più memoria fisica).
Ottieni il

Risposte:


27

Cosa può rendere Linux così poco reattivo?

Il supercommissione della RAM disponibile, che causa una grande quantità di scambio, può sicuramente fare questo. Ricorda che l'I / O ad accesso casuale sul tuo HDD meccanico richiede lo spostamento di una testina di lettura / scrittura, che può fare solo circa 100 ricerche al secondo.

È normale che Linux esca totalmente a pranzo, se si sovraccarica la RAM "troppo". Ho anche un disco spinny e 8 GB di RAM. Ho avuto problemi con un paio di software con perdite di memoria. Cioè il loro utilizzo della memoria continua a crescere nel tempo e non si riduce mai, quindi l'unico modo per controllarlo sarebbe stato quello di arrestare il software e quindi riavviarlo. Sulla base delle esperienze che ho avuto durante questo periodo, non sono molto sorpreso di sentire ritardi nell'arco di dieci minuti, se stai generando 3 GB + di swap.

Non lo vedrai necessariamente in tutti i casi in cui hai più di 3 GB di swap. La teoria afferma che il concetto chiave è il thrashing . D'altra parte, se si sta tentando di alternare tra due diversi set di lavoro e richiede lo scambio di 3 GB in entrata e in uscita, a 100 MB / s saranno necessari almeno 60 secondi anche se il modello I / O può essere perfettamente ottimizzato. In pratica, il modello I / O sarà tutt'altro che ottimale.

Dopo la difficoltà che ho avuto con questo, ho riformattato il mio spazio di scambio a 2 GB (molte volte più piccolo di prima), quindi il sistema non sarebbe stato in grado di scambiare così profondamente. Puoi farlo anche senza complicare il ridimensionamento della partizione, perché mkswapaccetta un parametro di dimensione opzionale.

L'equilibrio approssimativo è tra l'esaurimento della memoria e il blocco dei processi e il blocco del sistema per così tanto tempo che si rinuncia e si riavvia comunque. Non so se una partizione di swap da 4 GB sia troppo grande; potrebbe dipendere da quello che stai facendo. L'importante è fare attenzione quando il disco inizia a sfornarsi, controllare l'utilizzo della memoria e rispondere di conseguenza.

Controllare l'utilizzo della memoria di applicazioni multi-processo è difficile. Per vedere l'utilizzo della memoria per processo senza contare due volte la memoria condivisa, puoi usare sudo atop -R, premere Me m, e guardare nella colonna PSIZE. Puoi anche usare smem. smem -t -P firefoxmostrerà PSS di tutti i tuoi processi firefox, seguito da una linea con PSS totale. Questo è l'approccio corretto per misurare l'utilizzo della memoria totale dei browser basati su Firefox o Chrome. (Sebbene ci siano anche funzionalità specifiche del browser per mostrare l'utilizzo della memoria, che mostrerà le singole schede).


1
I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Jeff Schaller

Potrebbe valere la pena considerare l'uso di ulimitper tentare di controllare l'utilizzo dei processi (è complicato con un'applicazione multi-processo, ma potrebbe essere utile).
Toby Speight,

2
@TobySpeight se si desidera limitare l'utilizzo della memoria dell'app, è necessario utilizzare i cgroups. ulimitdavvero non aiuta.
fonte

Sì, è probabilmente una scelta migliore. Vale davvero la pena menzionarlo nella risposta, comunque.
Toby Speight,

2
The important thing is to watch out for when the disk starts churning, check your memory usage, and respond accordingly.<- oppure, se usi una GUI, crea un crontab che esegue uno script semplice (ogni minuto circa) che controlla la quantità di RAM libera rimasta, avvisandoti. Ho creato il mio per Linux Mint e ho imparato parecchio da esso. È qualcosa con cui puoi provare a giocare.
Ismael Miguel,

5

AFAIK, il bloatware non dovrebbe rendere il sistema operativo non rispondente, quindi non prenderei in considerazione o accetterei che il bloatware sia la causa principale del problema

Non ti piacerà, ma penso che il bloatware sia il tuo problema (anche se non sono sicuro che sia il problema la memoria o il disco). Sfortunatamente, il kernel Linux è terribile nel gestire situazioni di alta pressione di memoria ed è noto per richiedere sostanzialmente un riavvio una volta esaurita la memoria. Ci sono tre cose che mi portano a credere che il tuo problema sia l'esaurimento delle risorse:

  1. Lo spazio su disco su root (/) e DATA è quasi pieno. Non sono sicuro di cosa usi i DATI, ma in precedenza ho riscontrato problemi con il ridimensionamento della partizione di root troppo piccolo e il mio sistema diventa inutilizzabile.
  2. Hai una pressione di memoria elevata, il che significa che la RAM è quasi piena. Quando la RAM inizia a riempirsi, inizierai a ricevere errori di pagina. Gli errori di pagina si verificano quando il kernel non è in grado di allocare memoria sufficiente per un processo e deve invece utilizzare alcuni dei sistemi molto più lentamente lo spazio di scambio. Questo ci conduce alla nostra ultima osservazione:
  3. Lo spazio di swap è quasi pieno. C'è chiaramente una forte pressione di memoria sul sistema poiché sia ​​la RAM che lo swap sono quasi pieni.

Fondamentalmente, metti insieme questi tre elementi e il tuo sistema non ha risorse sufficienti per fare molto di tutto. Per quanto sia sfortunato quanto scarsamente Linux gestisca situazioni di memoria insufficiente (rispetto, per esempio, al kernel NT in Windows), ma sembra che sia così. Puoi trovare ulteriori discussioni in questo thread di Reddit e nella sua mailing list collegata.

Per quanto riguarda come risolvere la tua situazione, direi che aumentare le dimensioni dello swap è una buona idea, ma dato che hai poco spazio su disco, questo sarà un problema. A meno che il tuo server Minecraft non abbia un sacco di persone, penso che sarebbe sicuro ridurre la sua memoria a circa 1024 m (uso personalmente 1024 m con circa 10 persone e funziona benissimo). Vorrei anche usare spigot o carta per il tuo server Minecraft poiché tendono ad essere più performanti.

In bocca al lupo!


7
È chiaramente la memoria il problema, non il disco. È vero che Linux è danneggiato sotto l'alta pressione della memoria. Ma non è vero che è necessario un riavvio. Se riesci a liberare un po 'di memoria, Linux diventerà reattivo come prima che la pressione della memoria superasse la capacità disponibile.
Gilles 'SO- smetti di essere malvagio' il

1
@Kais Ho detto "questo ci porta alla nostra ultima osservazione" come segue poiché stavo parlando dello spazio di swap e continuerei a parlarne al punto 3. A proposito di Minecraft, sembrava che avessi un server Minecraft e avessi assegnato 3G di RAM ad esso. Stavo solo dicendo che a meno che non ci siano un sacco di persone che ci giocano allo stesso tempo, potresti non aver bisogno di tanta RAM. Ho detto "tendono ad essere più performanti" quando si parla di carta e spigot, che sono server Minecraft alternativi che offrono prestazioni migliori rispetto a MC vanilla.
Insegui l'

2
Ho sentito che in genere usare lo swap è una cattiva idea? Almeno in ambiente server, quando il congelamento per 12 minuti non è accettabile?
9ilsdx 9rvj 0lo

2
@Kais, secondo la mia esperienza, Windows è ancora peggio con i programmi non GUI, ma sospenderà i programmi GUI non in primo piano se la pressione della memoria è alta, il che risolve il problema per il desktop, supponendo che le applicazioni desktop non abbiano sfondo compiti.
Simon Richter,

2
Vanilla Minecraft forse; ma i modpack di grandi dimensioni arrivano facilmente a 3 GiB prima che un giocatore si unisca anche a :)
Luaan

4

Qual è l'output di free -m? La quantità di RAM che hai è inutile se non sappiamo quanto stai usando. Quello e sono interessato a sapere quanto spazio di swap viene utilizzato.

Penso che tu abbia risposto alla tua stessa domanda, comunque. Avere aperte "molte schede" nel tuo browser può sicuramente rallentare il tuo sistema se non le chiudi mai, poiché continueranno a consumare memoria a prescindere; quando il sistema si blocca, quanti ne hai aperti contemporaneamente?

Ha anche senso se il tuo sistema si sta congelando da altre attività ad alta intensità di memoria come "generare un grafico molto grande da un diagramma UML molto complesso". Questo rallenterà assolutamente il tuo sistema in quanto genera il grafico, quindi non è certo una sorpresa.

Sembra davvero che questo sia il modo in cui il tuo sistema dovrebbe comportarsi. O quello o mi manca qualcosa qui.

A proposito, le statistiche dell'HDD non contano quando il tuo sistema non risponde poiché una mancanza di memoria è quasi sempre il colpevole.


1
"Questo rallenterà assolutamente il tuo sistema" - Sì, è previsto, ma non è previsto che si verifichi una sessione X incontrollabile (cioè il risultato di un sistema congelato), dove non riesco a vedere il cursore del mouse muoversi.
Kais

1
In realtà ci si aspetterebbe, il comportamento che stai descrivendo è esattamente ciò che accade quando uso troppa RAM sul mio sistema. Ho anche avuto il mio sistema intasare al punto che non potevo passare a un terminale testuale e ho il doppio della RAM come te. Se mai ti imbatti in quel tipo di situazione in cui non puoi usare la tua sessione X, devi passare al terminale testuale e terminare i processi offensivi. Se fallisce, dovresti fare un riavvio difficile. Il meglio che posso dirti.
Zach Sanchez,

1
@Kais macOS diventa lento anche in situazioni di memoria insufficiente. Non c'è davvero modo per il sistema di decidere in modo ragionevole quale memoria deve assolutamente conservare nella RAM, quindi il passaggio da un'applicazione a un'altra potrebbe passare da una pagina all'altra, al punto in cui l'interfaccia utente non risponde.
Kusalananda

5
ehh, non è che non ci siano modi molto più efficaci per mantenere reattiva l'interfaccia utente di "window manager". La ricerca sulla SM ha scritto un intero sistema operativo sperimentale su un progetto che proibiva il paging della domanda. Prova del concetto: esegui il "window manager" in Midori, emula le app Linux incluso lo swap. Ecco fatto, il "window manager" rimarrà reattivo anche se le app si stanno scambiando. Come minimo, potrebbe consentire di uccidere in modo affidabile alcune app per liberare memoria. Linux non è perfetto. Il passaggio di Gnome da X11 a Wayland ha persino peggiorato significativamente la reattività rispetto ai sistemi sovraccarichi.
sourcejedi

2
Le statistiche dell'HDD possono avere importanza. Una possibile causa di mancata risposta è un disco guasto, che provoca un enorme arretrato di I / O. Ma non vedo alcuna prova di ciò che accade in questo caso.
200_successo

4

Quando ho letto il titolo il mio pensiero immediato è stato "non abbastanza RAM", perché ho riscontrato esattamente questo problema su Linux, oltre 10 minuti di frenetico arresto del disco dopo aver aperto troppe schede del browser. Sono d'accordo, è triste e ha bisogno di miglioramenti. Windows gestisce questa situazione molto meglio.

Alcuni suggerimenti:

  • Aggiungi un'applet per il monitoraggio della memoria sulla barra delle applicazioni in modo da poterla tenere d'occhio.
  • Nelle preferenze di Firefox, impostare "Limite processo contenuto" su "1". Come dice il testo sotto l'impostazione, "Ulteriori processi di contenuto possono migliorare le prestazioni quando si utilizzano più schede, ma utilizzeranno anche più memoria".
  • Rimuovere o sostituire eventuali componenti aggiuntivi del browser affamati di memoria. Mantieni il tuo blocco degli annunci, poiché gli annunci consumano più memoria di qualsiasi blocco.
  • Indaga e probabilmente rimuovi qualsiasi altro programma affamato di memoria.

Tuttavia, l'unica vera soluzione è acquistare più RAM.

Non solo l'abbondanza di RAM impedirà che si verifichi questa catastrofe, ma consentirà al sistema di creare una cache di file di grandi dimensioni nella RAM, che il sistema attualmente non può mai fare perché funziona così vicino al limite. Una cache di file di grandi dimensioni toglierà il lavoro dall'HDD e renderà quasi tutte le azioni sul sistema più veloci in generale. Ne vale la pena.


Ottima risposta, grazie mille. Ma per quanto riguarda "Ulteriori processi di contenuto possono migliorare le prestazioni quando si utilizzano più schede, ma utilizzeranno anche più memoria". - Se ho capito bene, Firefox è in grado di aprire fino a 8 processi per scheda, per impostazione predefinita?
Kais il

1
@Kais Penso che sia 1 processo per scheda. In ogni caso, se imposti il ​​limite su 1, sarà 1 totale di processo per tutte le schede, che dovrebbe usare meno memoria.
Boann,

Capito, grazie ancora.
Kais il

4

L'output htop mostra che il bisogno di RAM è superiore alla sua capacità (RAM totale + SWAP). Quindi la prima ovvia considerazione da fare è ridurre l'utilizzo della RAM o aumentare la disponibilità della RAM.

Si noti che le versioni moderne di Firefox sono estremamente affamate di risorse, a causa del modo in cui a Windows / Tab viene assegnato lo spazio di processo e memoria. L'idea era di evitare le schede che si arrestavano in modo anomalo portando l'intero browser in ginocchio. Vale la pena il prezzo? Chi può dirlo ... Comunque, ho avuto un problema simile a causa di quanto sopra, poiché la mia scheda madre Pentium 4 supporta solo 2 GB di RAM. Per evitare possibili arresti anomali della memoria, ho aggiunto ~ 800 M di spazio di swap su un SSD di riserva, ovviamente con l'intenzione di usarlo il meno possibile. L'ho raggiunto modificando un'impostazione nota come swappiness, che determina quanto sia desideroso il kernel di scambiare le pagine di memoria. Alcuni comandi utili come segue.

Controlla l'attuale swappiness: cat /proc/sys/vm/swappiness

Questo potrebbe darti un risultato di circa 60, che è abbastanza alto per le massime prestazioni su sistemi con un carico inferiore. Per te, ovviamente, questo funziona controproducente, quindi puoi cambiare l'impostazione usando un comando tale da sysctl vm.swappiness=1cambiare l'impostazione mentre il sistema è in esecuzione.

Per salvare queste modifiche, dovrai cercare il file /etc/sysctl.conf. In quel file, cambia il valore o aggiungi la linea vm.swappiness=1.

Mente, questa non è una soluzione nel tuo caso, ma dovrebbe rendere una soluzione utilizzabile.

Crediti https://askubuntu.com/questions/103915/how-do-i-configure-swappiness

fonte per la risposta sopra, include ulteriori spiegazioni. Ho trovato quel post molto utile nel mio caso.


Grazie per la risposta. Questo sembra essere un buon consiglio per la configurazione della VM.
Kais

2

Alcune eccellenti discussioni su come il problema è causato, continua e cresce. Mi piace anticipare problemi come quelli che si verificano lanciando hardware sulla progettazione iniziale del computer e / o aggiornando un'implementazione esistente. Puoi,

  • aggiungi RAM (32 GB funziona alla grande per molte configurazioni)

  • sostituire il disco rigido con un SSD

  • aggiungere un SSD (Solid State Drive) per l'unità di scambio

  • creare una partizione di swap nella RAM (con 32 o più GB di RAM)

  • ottenere un HDD più veloce

  • passare a un sistema con elaborazione più veloce e architettura bus più ampia / più veloce.

Alcuni di questi aggiornamenti / sostituzioni hardware possono essere ben al di sotto di $ 100US. Questi non sono specifici di Linux, né delle esatte implementazioni software, ma l'hardware che stai utilizzando non sembra adeguato alle tue attività.


1
Risposta molto utile, grazie per aver sottolineato le raccomandazioni sulla sostituzione dell'hardware.
Kais

1
Spero che sia d'aiuto. Non sapere quale tipo di computer o attrezzatura specifica, quindi questi sono passaggi generici, in ordine di miglioramento molto probabile. Qualcuno o tutti aiuterebbero i tuoi rallentamenti specifici che sono probabilmente dovuti al blocco di cache, swap e per letture / scritture del disco più veloci e meno in generale
Vecchio zio Ho

6
La maggior parte di questi sono buoni suggerimenti, ma lo scambio con la RAM è sostanzialmente inutile a meno che tu non stia usando zram o zswap per lo scambio compresso in RAM - ne vale la pena, ma lo scambio con un ramdisk non compresso crea esattamente la stessa pressione RAM che allevia ( in realtà, leggermente più a causa delle spese generali).
Cas

Non sono sicuro del motivo per cui qualcuno dovrebbe passare alla RAM, tranne durante la compressione, che sembra un'ottima idea sui carichi di lavoro con RAM elevata / CPU bassa.
Peter - Ripristina Monica il

1
@bain: com'è mai meglio che le pagine vengano scambiate con la RAM rispetto a quelle ancora mappate? Stanno ancora usando altrettante pagine di RAM fisica a meno che tu non usi la compressione. Ecco dove si trova il valore. L'unica differenza è più contabilità ma forse tabelle di pagine hardware più pulite. Per la memoria di sola avvio che elabora sostanzialmente trascurare di non mappare, ad esempio funzioni / dati che vengono toccati solo durante l'avvio, lo scambio su disco è migliore perché non consuma spazio DRAM. Per i daemon in background che non vengono utilizzati in modo interattivo, la latenza non è importante, quindi vince lo swap del disco.
Peter Cordes,

2

Di solito è "solo" X11 che diventa inutilizzabile. Per ottenere una sequenza di tasti dalla tastiera a un programma e mostrarlo sullo schermo, è necessario eseguire il codice in diversi processi. (Server X per ottenere la sequenza di tasti dal kernel, xterm o equivalente per ottenere l'evento e decidere di disegnare qualcosa, quindi inviare un messaggio al server X per disegnare un glifo da un carattere.)

Basta spostare il mouse su una finestra con un browser Web che mostri una pagina con un mucchio di schifezze Javascript può portare a un mucchio di messaggi per un mucchio di processi, che fanno sì che tali processi si riattivano e tocchino un mucchio di dati. Presumibilmente includendo un mucchio di bitmap non compresse "memorizzate nella cache". Quindi è molto probabile che questo sfratti più cose che saranno presto necessarie.

ctrl + alt + F2 per passare a un'altra console virtuale di solito consente di accedere ed eseguire comandi di shell con solo un paio di secondi di latenza quando qualcosa sta causando il blocco dello swap. È solo bash; il kernel Linux non è scambiabile e ha tutto il
codice VT e tastiera <-> TTY.


Per evitare il rallentamento quando non sei veramente un thrash, può essere utile ridurre la "swappiness". ad esempio, ho impostato il /proc/sys/vm/swappinessparametro sintonizzabile 6sul mio desktop con 16 GB di RAM e una partizione di scambio di 2 GB su un SSD NVMe. Puoi leggere ulteriori informazioni sull'ottimizzazione per la latenza interattiva (al contrario della velocità effettiva del server); qualsiasi guida lo menzionerà.

Ma se hai qualche scambio, Linux lo userà prima di invocare il killer OOM. Mantieni piccola la tua partizione di swap , abbastanza grande da permettere a Linux di scovare una schifezza davvero vecchia che in genere non viene utilizzata da molto tempo. (es. perdite di memoria!)

Non ho avuto problemi con lo swap pieno. Linux moderno si occupa di avere uno spazio di scambio limitato bene. Chromium (che uso al posto di Firefox) a volte diventa lento con dozzine di schede Stack Overflow aperte, ma The Great Suspender è un bel componente aggiuntivo per scaricare schede quando non le stai usando. Penso che mi risparmia molta RAM, anche se scaricherà solo le schede in cui non hai digitato nulla in una casella di testo. Potrebbe anche essere disponibile per Firefox.


Come altri hanno suggerito, 16 GB di RAM sono davvero belli per l'uso interattivo con Linux. I prezzi delle DRAM sono relativamente bassi attualmente ; dopo aver toccato circa 1,5 anni fa, sono quasi sempre diminuiti.


Ottima risposta, grazie mille. Ma per quanto riguarda "un mucchio di cazzate Javascript può portare a un mucchio di messaggi per un mucchio di processi, tutti i quali fanno sì che quei processi si riattivano e tocchino un mucchio di dati" - Mi chiedo quali sono questi processi, sono Firefox processi figlio?
Kais il

@Kais: gestore di finestre, browser Web, server X, probabilmente vari altri client X in un desktop più complicato. E tutti gli altri processi su cui si agita il mouse (che è quello che stavo pensando quando ho scritto quella frase). ad es. in KDE, la barra delle applicazioni è un processo separato ( plasma) dal kwingestore delle finestre.
Peter Cordes,

Uso LXDE, quindi nel mio caso solo Openbox e il server XOrg sono i processi che possono svegliarsi? Inoltre, quali sono i tipi di messaggi che vengono passati a loro?
Kais il

@Kais: messaggi del protocollo X11 su un socket di dominio unix. Prova a correre xevqualche volta per vedere che tipo di messaggi puoi ottenere spostando il mouse. Prova anche strace xeva vedere le chiamate di sistema che coinvolgono il lato client.
Peter Cordes,

Vedo, grazie. Quando eseguo il xevcomando, ho i messaggi solo passando a finestre diverse e facendo clic su di esse, ma non è il caso quando mi sposto semplicemente sul mouse.
Kais il

-2

Cosa può far sì che Linux non risponda per minuti alla navigazione di determinati siti Web?

Non stai usando Linux nel modo giusto. Il che diventa particolarmente evidente su una macchina con risorse limitate. Non hai bisogno di più RAM, né di un processore più veloce.

Sfondo:

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

Per "risolvere" il problema:

Lascia soli i programmi non utente, ma inizia a modificare le priorità (livelli gradevoli) dei tuoi programmi utente in modo che non causino problemi. Modifica ciò che avvia i tuoi programmi in modo da includere livelli gradevoli, che vanno dal solito non è un problema, al peggior trasgressore.

Esempi del mondo reale:

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}

Il tuo WorstOffender continuerà a non rispondere per minuti, è letteralmente un problema per comprare un box migliore, ma ora non causerà la mancata risposta dell'intero sistema operativo (Linux) e tutto il resto che hai in esecuzione.


2
Ho lavorato per decenni con Linux sia con molti server che sulla mia workstation (spesso con configurazioni VM molto limitate) e non ho mai dovuto risolvere un problema di prestazioni relativo alla RAM nice -n. "Non hai bisogno di più RAM" - ha sicuramente bisogno di più RAM; o potrebbe usare ulimitper limitare duramente i peggiori trasgressori, quindi la sua RAM esistente è di nuovo sufficiente. "Non stai usando Linux nel modo giusto." è completamente spento.
AnoE

E ho lavorato con installazioni Linux GUI su risorse hardware limitate per gli ultimi 22 anni e “bello” ing lavori per risolvere mantenere “Linux non risponde per i minuti.”
Michael

Non nego che funzioni; Sto solo dicendo che presentarlo come il modo "giusto" di lavorare con Linux potrebbe non essere la cosa migliore.
AnoE
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.