Qu'est-ce qui peut empêcher Linux de répondre pendant quelques minutes lors de la navigation sur certains sites Web?

28

J'utilise Linux 4.15, et cela m'arrive de nombreuses fois lorsque je navigue sur Google, Facebook ou tout autre site Web gourmand en ressources - L'ensemble du système d'exploitation ne répond plus, se bloque et devient inutile. La seule chose que je vois fonctionner est le disque (partition système principale formatée en ext4), qui est massivement utilisé (limitation des E / S).

Je suis obligé d'attendre une minute ou plus pour me débarrasser du ballonnement, parfois il ne répond pas pendant douze minutes, et donc je suis frustré. Le fait que le système d'exploitation ne soit pas capable de bien gérer le multitâche a tendance à refléter un comportement absolument bizarre et inacceptable.

Cela se produit non seulement avec Firefox, mais avec toute application d'interpréteur javascript, y compris Microsoft VSCode ou angular-cli ( ng servecommande), ainsi que tout autre thread d'exécution gourmand en ressources - comme le cas de plantuml lors de la génération d'un très grand graphique à partir d'un diagramme UML très complexe.

Aujourd'hui, le système d'exploitation devient totalement ingérable, après le lancement d'un logiciel de récupération de données pour un disque dur externe (sur une partition ext4) qui a récemment été débranché d'un mauvais port USB par un petit mouvement.

Je ne suis pas en mesure de dire la cause profonde d'un tel comportement de buggy

J'ai de nombreux onglets ouverts dans le navigateur et 94% d'utilisation de la partition OS selon la dfsortie:

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

En tant que matériel, j'utilise:

  1. Intel Core i3 v2348M selon 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 Go de RAM. (Voir la htopsortie ci-dessous).

  3. 99,83 MHz de vitesse du bus de la carte mère
  4. Disque dur interne de 500 Go - Voici le rapport SMART du système d'exploitation:

    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.
    

Ce sont les résultats de l'utilisation des ressources par 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

Ce sont également les résultats des statistiques de VM générées par la commande vmstat 5.

AFAIK, le bloatware ne devrait pas rendre le système d'exploitation insensible, donc je ne considérerais ni n'accepterais pas que le bloatware soit la cause première du problème - car le travail du système d'exploitation consiste à isoler les processus et à assurer le multitâche.

Je ne sais pas si ce problème est spécifique au système d'exploitation, au matériel ou à la configuration.

Des idées?

Kais
la source
4
Les commentaires ne sont pas pour une discussion approfondie; cette conversation a été déplacée vers le chat . Veuillez vous assurer de mettre à jour la question au besoin pour toutes les clarifications résultant des commentaires / discussion. Merci!
Jeff Schaller
3
Je soupçonne que votre système échange beaucoup; pouvez-vous exécuter vmstat 5pendant que votre système agit? Vous pouvez démarrer vmstat au préalable et publier les lignes imprimées pendant les blocages. Je recherche spécifiquement les colonnes siet so, qui indiquent combien le système échange réellement. Pouvez-vous également publier la sortie de top, triée par utilisation de la mémoire (shift-M)? (ou quel que soit le mode htop équivalent)
marcelm
1
Lorsqu'un système de fichiers est presque plein, il peut devenir très lent. Je ne sais pas si c'est probablement le cas avec ext4.
Personne
1
@Kais Essayez les deux et voyez ce qui fonctionne? Mon échange remplit au maximum la moitié de ce que j'ai préparé et ne me gèle pas. Le fait que l'on subisse des ralentissements ou non suite à l'utilisation de swap dépend également des modèles d'utilisation, je pense, donc nos expériences peuvent différer.
JoL
2
Essayez de désactiver entièrement le swap, ce qui confirmera ou éliminera le débordement de disque comme source du problème. Le but de l'échange est de mettre les pages inutilisées sur le disque, mais si la plupart des pages sont vraiment utilisées, l'échange ne sera pas utile. Si votre charge de travail typique nécessite 10 Go de pages résidentes, une machine de 8 Go aura du mal. La réponse à l'épuisement des ressources consiste à réduire la charge de travail ou à augmenter la ressource (dans ce cas, essayez Chrome ou ajoutez plus de mémoire physique).
bain

Réponses:

27

Qu'est-ce qui peut rendre Linux si insensible?

La surutilisation de la RAM disponible, qui provoque une grande quantité de permutation, peut certainement le faire. N'oubliez pas que les E / S à accès aléatoire sur votre disque dur mécanique nécessitent le déplacement d'une tête de lecture / écriture, qui ne peut effectuer qu'une centaine de recherches par seconde.

Il est habituel pour Linux de sortir totalement pour déjeuner, si vous surchargez "trop" de RAM. J'ai également un disque tournant et 8 Go de RAM. J'ai eu des problèmes avec quelques logiciels avec des fuites de mémoire. C'est-à-dire que leur utilisation de la mémoire ne cesse de croître au fil du temps et ne diminue jamais, donc la seule façon de le contrôler aurait été d'arrêter le logiciel, puis de le redémarrer. Sur la base des expériences que j'ai eues pendant cela, je ne suis pas très surpris d'entendre des retards de plus de dix minutes, si vous générez 3 Go + de swap.

Vous ne le verrez pas nécessairement dans tous les cas où vous avez plus de 3 Go de swap. La théorie dit que le concept clé est la raclée . D'un autre côté, si vous essayez de basculer entre deux ensembles de travail différents et que cela nécessite un échange de 3 Go vers l'intérieur et vers l'extérieur, à 100 Mo / s, cela prendra au moins 60 secondes même si le modèle d'E / S peut être parfaitement optimisé. En pratique, le modèle d'E / S sera loin d'être optimal.

Après la difficulté que j'ai rencontrée, j'ai reformaté mon espace de swap à 2 Go (plusieurs fois plus petit qu'auparavant), afin que le système ne puisse pas swaper aussi profondément. Vous pouvez le faire même sans vous soucier de redimensionner la partition, car mkswapprend un paramètre de taille facultatif.

L'équilibre approximatif est entre le manque de mémoire et la destruction des processus, et le blocage du système pendant si longtemps que vous abandonnez et redémarrez de toute façon. Je ne sais pas si une partition de swap de 4 Go est trop grande; cela peut dépendre de ce que vous faites. L'important est de surveiller le début de la rotation du disque, de vérifier l'utilisation de la mémoire et de réagir en conséquence.

La vérification de l'utilisation de la mémoire des applications multi-processus est difficile. Pour voir l'utilisation de la mémoire par processus sans compter la mémoire partagée en double, vous pouvez utiliser sudo atop -R, appuyer sur Met m, et regarder dans la colonne PSIZE. Vous pouvez également utiliser smem. smem -t -P firefoxaffichera le PSS de tous vos processus Firefox, suivi d'une ligne avec le PSS total. Il s'agit de la bonne approche pour mesurer l'utilisation totale de la mémoire des navigateurs basés sur Firefox ou Chrome. (Bien qu'il existe également des fonctionnalités spécifiques au navigateur pour afficher l'utilisation de la mémoire, qui afficheront des onglets individuels).

sourcejedi
la source
1
Les commentaires ne sont pas pour une discussion approfondie; cette conversation a été déplacée vers le chat .
Jeff Schaller
Cela pourrait valoir la peine d'envisager l'utilisation de ulimitpour tenter de contrôler l'utilisation des processus (c'est délicat avec une application multi-processus, mais cela peut être utile).
Toby Speight
2
@TobySpeight si vous souhaitez limiter l'utilisation de la mémoire de l'application, vous devez utiliser des groupes de contrôle. ulimitn'aide vraiment pas.
sourcejedi
Oui, c'est probablement un meilleur choix. Cela vaut vraiment la peine d'être mentionné dans la réponse, de toute façon.
Toby Speight
2
The important thing is to watch out for when the disk starts churning, check your memory usage, and respond accordingly.<- ou, si vous utilisez une interface graphique, créez une crontab qui exécute un script simple (toutes les minutes environ) qui vérifie la quantité de RAM libre qui vous reste, vous en avertissant. J'ai fait le mien pour Linux Mint, et j'en ai beaucoup appris. C'est quelque chose que vous pouvez essayer de jouer avec.
Ismael Miguel
5

AFAIK, le bloatware ne devrait pas rendre le système d'exploitation insensible, donc je ne considérerais ni n'accepterais même pas que le bloatware soit la cause première du problème

Vous n'allez pas aimer ça, mais je pense que le bloatware est votre problème (bien que je ne sois pas sûr que ce soit la mémoire ou le disque qui est le problème). Malheureusement, le noyau Linux est horrible pour gérer les situations de pression de mémoire élevée et est connu pour nécessiter essentiellement un redémarrage une fois la mémoire épuisée. Il y a trois choses qui m'amènent à croire que votre problème est l'épuisement des ressources:

  1. Votre espace disque sur root (/) et DATA est presque plein. Je ne sais pas pourquoi vous utilisez DATA, mais j'ai rencontré des problèmes avant avec le redimensionnement de ma partition racine trop petite et mon système devenant inutilisable.
  2. Vous avez une pression de mémoire élevée, ce qui signifie que votre RAM est presque pleine. Lorsque la RAM commence à être pleine, vous commencerez à avoir des défauts de page. Les erreurs de page se produisent lorsque le noyau n'est pas en mesure d'allouer suffisamment de mémoire pour un processus et doit utiliser à la place certains des systèmes de swap beaucoup plus lentement. Cela nous amène à notre dernière observation:
  3. Votre espace de swap est presque plein. Il y a clairement une pression de mémoire élevée sur votre système car la RAM et le swap sont presque pleins.

Fondamentalement, associez ces trois éléments et votre système n'a pas suffisamment de ressources disponibles pour faire beaucoup de choses. Pour ce qui est regrettable de voir à quel point Linux gère mal les situations de faible mémoire (par rapport, disons, au noyau NT sous Windows), mais cela semble être le cas. Vous pouvez trouver plus de discussion dans ce fil Reddit et sa liste de diffusion liée.

Quant à la façon de résoudre votre situation, je dirais que l'augmentation de la taille de votre swap est une bonne idée, mais comme vous manquez d'espace disque, ce sera un problème. À moins que votre serveur Minecraft n'ait une tonne de personnes, je pense qu'il serait prudent de réduire sa mémoire à environ 1024 m (j'utilise personnellement 1024 m avec environ 10 personnes et cela fonctionne bien). J'utiliserais également un robinet ou du papier pour votre serveur Minecraft car ils ont tendance à être plus performants.

Bonne chance!

Chasse
la source
7
C'est clairement la mémoire qui est le problème, pas le disque. Il est vrai que Linux est mauvais sous haute pression mémoire. Mais ce n'est pas vrai qu'un redémarrage est nécessaire. Si vous parvenez à libérer de la mémoire, Linux deviendra tout aussi réactif qu'avant que la pression de la mémoire ne dépasse la capacité disponible.
Gilles 'SO- arrête d'être méchant'
1
@Kais J'ai dit "cela nous amène à notre dernière observation" comme enchaînement puisque je parlais de l'espace d'échange et continuerais à en parler au point 3. À propos de Minecraft, il semblait que vous utilisiez un serveur Minecraft et que vous aviez alloué 3G de RAM. Je disais qu'à moins que vous ayez une tonne de gens qui jouent dessus en même temps, vous pourriez ne pas avoir besoin de beaucoup de RAM. J'ai dit "ils ont tendance à être plus performants" en parlant de papier et de spigot, qui sont des serveurs Minecraft alternatifs qui offrent de meilleures performances que vanilla MC.
Chase
2
J'ai entendu dire que l'utilisation du swap est généralement une mauvaise idée? Au moins dans un environnement serveur, lorsque le gel pendant 12 minutes n'est pas acceptable?
9ilsdx 9rvj 0lo
2
@Kais, d'après mon expérience, Windows est encore pire avec les programmes non-GUI, mais il suspendra les programmes GUI non-avant-plan si la pression de la mémoire est élevée, ce qui résout le problème pour le bureau, en supposant que les applications de bureau n'ont pas d'arrière-plan les tâches.
Simon Richter
2
Vanilla Minecraft peut-être; mais les grands modpacks atteignent facilement 3 Gio avant qu'un joueur ne se joigne même à :)
Luaan
4

Quelle est la sortie de free -m? La quantité de RAM dont vous disposez est inutile si nous ne savons pas combien vous utilisez. Cela et je suis intéressé de savoir combien d'espace de swap est utilisé.

Je pense cependant que vous avez répondu à votre propre question. Le fait d'ouvrir "de nombreux onglets" dans votre navigateur peut certainement ralentir votre système si vous ne les fermez jamais, car ils continueront à consommer de la mémoire malgré tout; lorsque votre système se bloque, combien en avez-vous à la fois?

Il est également logique que votre système se bloque à partir d'autres tâches gourmandes en mémoire telles que «générer un très grand graphique à partir d'un diagramme UML très complexe». Cela ralentira absolument votre système lors de la génération du graphique, ce n'est donc pas une surprise.

Il semble vraiment que c'est ainsi que votre système est censé se comporter. Soit ça, soit je manque quelque chose ici.

Soit dit en passant, les statistiques du disque dur n'ont pas d'importance quand votre système ne répond plus, car un manque de mémoire est presque toujours le coupable.

Zach Sanchez
la source
1
"Cela va absolument ralentir votre système" - Oui, cela est prévu, mais ne provoque pas de session X incontrôlable (c'est-à-dire le résultat d'un système gelé), où je ne peux pas voir le curseur de la souris bouger.
Kais
1
En fait, on pourrait s'y attendre, le comportement que vous décrivez est exactement ce qui se produit lorsque j'utilise trop de RAM sur mon système. J'ai même eu mon système obstrué au point que je ne pouvais pas passer à un terminal textuel, et j'ai le double de la RAM comme vous. Si jamais vous rencontrez ce type de situation où vous ne pouvez pas utiliser votre session X, vous devez basculer vers le terminal textuel et tuer les processus offensants. Si cela échoue, vous devrez effectuer un redémarrage matériel. Du mieux que je peux vous dire.
Zach Sanchez
1
@Kais macOS devient également lent dans les situations de faible mémoire. Il n'y a vraiment aucun moyen pour le système de décider judicieusement de la mémoire qu'il doit absolument conserver dans la RAM, de sorte que le basculement entre les applications basculerait comme un fou, au point où l'interface utilisateur ne répond plus.
Kusalananda
5
ehh, ce n'est pas qu'il n'y a pas de moyens beaucoup plus efficaces pour garder l'interface utilisateur du "gestionnaire de fenêtres" réactive. La recherche MS a écrit tout un système d'exploitation expérimental sur une conception qui interdisait la pagination de la demande. Preuve de concept: exécutez le "gestionnaire de fenêtres" dans Midori, émulez des applications Linux, y compris l'échange. Voilà, le "gestionnaire de fenêtres" restera réactif même si les applications s'échangent. Au minimum, cela pourrait vous permettre de tuer de manière fiable certaines applications pour libérer de la mémoire. Linux n'est pas parfait. Le passage de Gnome de X11 à Wayland a même aggravé considérablement la réactivité par rapport aux systèmes surchargés.
sourcejedi
2
Les statistiques du disque dur peuvent être importantes. Une cause possible de non réponse est un disque défaillant, qui provoque un énorme retard dans les E / S. Mais je ne vois aucune preuve de ce qui se passe dans ce cas.
200_success
4

Quand j'ai lu le titre, ma pensée immédiate était "pas assez de RAM", car j'ai moi-même rencontré exactement ce problème sous Linux, plus de 10 minutes de frénésie de disque frénétique après avoir ouvert trop d'onglets de navigateur. Je suis d'accord, c'est lamentable et doit être amélioré. Windows gère beaucoup mieux cette situation.

Quelques suggestions:

  • Ajoutez une applet de moniteur de mémoire à votre barre d'état système afin de pouvoir garder un œil dessus.
  • Dans les préférences de Firefox, définissez la "limite du processus de contenu" sur "1". Comme le texte ci-dessous le paramètre dit: "Des processus de contenu supplémentaires peuvent améliorer les performances lors de l'utilisation de plusieurs onglets, mais utiliseront également plus de mémoire."
  • Supprimez ou remplacez tous les modules complémentaires de navigateur gourmands en mémoire. Gardez votre bloqueur de publicités, car les publicités consomment plus de mémoire que n'importe quel bloqueur.
  • Enquêter et éventuellement supprimer tous les autres programmes gourmands en mémoire.

Cependant, la seule vraie solution est d'acheter plus de RAM.

Non seulement une abondance de RAM empêchera cette catastrophe de se produire, mais elle permettra au système de créer un grand cache de fichiers en RAM, ce que votre système ne peut actuellement jamais faire car il fonctionne si près de la limite. Un cache de fichiers volumineux éloignera le travail du disque dur et accélérera généralement la plupart des actions sur le système. Ça en vaut la peine.

Boann
la source
Excellente réponse, merci beaucoup. Mais en ce qui concerne les "processus de contenu supplémentaires peuvent améliorer les performances lors de l'utilisation de plusieurs onglets, mais utiliseront également plus de mémoire." - Si je comprends bien, Firefox est-il capable d'ouvrir jusqu'à 8 processus par onglet, par paramètre par défaut?
Kais
1
@Kais Je pense que c'est 1 processus par onglet. Dans tous les cas, si vous définissez la limite à 1, il y aura 1 total de processus pour tous les onglets, ce qui devrait utiliser moins de mémoire.
Boann
Compris, merci encore.
Kais
4

Votre sortie htop montre que votre besoin de RAM est supérieur à sa capacité (RAM totale + SWAP). Donc, la première considération évidente à faire est de réduire l'utilisation de la RAM ou d'augmenter la disponibilité de la RAM.

Notez que les versions modernes de Firefox sont extrêmement gourmandes en ressources, en raison de la façon dont les fenêtres / onglets disposent d'un espace de traitement et de mémoire. L'idée était d'éviter de planter les onglets en mettant le navigateur entier à genoux. Vaut-il le prix? Qui peut dire ... Quoi qu'il en soit, j'ai eu un problème similaire à cause de ce qui précède, car ma carte mère Pentium 4 ne prend en charge que 2 Go de RAM. Pour éviter d'éventuels plantages épuisés en mémoire, j'ai ajouté ~ 800M d'espace de swap sur un SSD de rechange, évidemment avec l'intention de l'utiliser le moins possible. J'ai atteint cet objectif en modifiant un paramètre appelé swappiness, qui détermine à quel point le noyau est impatient d'échanger des pages mémoire. Quelques commandes utiles comme suit.

Vérifiez la permutabilité actuelle: cat /proc/sys/vm/swappiness

Cela peut vous donner un résultat autour de 60, ce qui est assez élevé pour des performances maximales sur des systèmes avec une charge plus faible. Pour vous, cela fonctionne évidemment contre-productif, vous pouvez donc modifier le paramètre à l'aide d'une commande telle que sysctl vm.swappiness=1modifier le paramètre pendant que le système fonctionne.

Pour enregistrer ces modifications, vous devrez rechercher le fichier /etc/sysctl.conf. Dans ce fichier, modifiez la valeur ou ajoutez la ligne vm.swappiness=1.

Attention, ce n'est pas une solution dans votre cas, mais cela devrait être une solution de contournement utilisable.

Crédits /ubuntu/103915/how-do-i-configure-swappiness

source pour la réponse ci-dessus, comprend des explications supplémentaires. J'ai trouvé ce message très utile dans mon cas.

M. Donutz
la source
Merci pour votre réponse. Cela semble être une bonne recommandation pour la configuration de la machine virtuelle.
Kais
2

Une excellente discussion sur la façon dont le problème est causé, se poursuit et s'aggrave. J'aime anticiper les problèmes tels que ceux que vous rencontrez en lançant du matériel lors de la conception initiale de l'ordinateur et / ou en mettant à niveau une implémentation existante. Peut tu,

  • ajouter de la RAM (32 Go fonctionne très bien pour de nombreuses configurations)

  • remplacez votre disque dur par un SSD

  • ajouter un SSD (Solid State Drive) pour swap drive

  • créer une partition de swap dans la RAM (avec 32 Go ou plus de RAM)

  • obtenir un disque dur plus rapide

  • passer à un système avec un traitement plus rapide et une architecture de bus plus large / plus rapide.

Certaines de ces mises à niveau / remplacements de matériel peuvent coûter bien moins de 100 $ US. Ce ne sont pas spécifiquement Linux, ni vos implémentations logicielles exactes, mais le matériel que vous utilisez ne semble pas adapté à vos tâches.

Vieil oncle ho
la source
1
Réponse très utile, merci d'avoir souligné les recommandations de remplacement du matériel.
Kais
1
J'espère que ça aide. Je ne sais pas quel type d'ordinateur ou l'équipement spécifique, il s'agit donc d'étapes génériques, par ordre d'amélioration le plus probable. Tout ou partie pourrait aider vos ralentissements spécifiques qui sont probablement dus à la destruction du cache, à l'échange et à des lectures / écritures de disque plus rapides et moins nombreuses en général
Old Uncle Ho
6
La plupart d'entre elles sont de bonnes suggestions, mais le passage à la RAM est fondamentalement inutile à moins que vous n'utilisiez zram ou zswap pour le passage compressé à la RAM - elles en valent la peine, mais le passage à un disque virtuel non compressé crée exactement autant de pression RAM qu'il soulage ( en fait, très légèrement plus en raison des frais généraux).
cas
Je ne sais pas pourquoi quelqu'un passerait à la RAM, sauf lors de la compression, ce qui semble être une excellente idée sur les charges de travail à haute RAM / faible CPU.
Peter - Rétablir Monica
1
@bain: comment est-il toujours préférable d'avoir des pages échangées vers la RAM contre toujours mappées? Ils utilisent toujours autant de pages de RAM physique, sauf si vous utilisez la compression. C'est là que réside la valeur. La seule différence est plus de tenue de livres, mais peut-être des tables de pages de matériel plus propres. Pour la mémoire au démarrage uniquement, les processus négligent fondamentalement de démapper, par exemple les fonctions / données qui ne sont touchées qu'au démarrage, le swap sur disque est meilleur car il ne consomme aucun espace DRAM. Pour les démons d'arrière-plan qui ne sont pas utilisés de manière interactive, la latence n'est pas importante, donc le swap de disque gagne à nouveau.
Peter Cordes
2

Habituellement, c'est "juste" le X11 qui devient inutilisable. Pour obtenir une séquence de touches de votre clavier vers un programme et lui faire afficher quoi que ce soit à l'écran, le code de plusieurs processus différents doit être exécuté. (Serveur X pour obtenir la séquence de touches du noyau, xterm ou équivalent pour obtenir l'événement et décider de dessiner quelque chose, puis envoyer un message au serveur X pour dessiner un glyphe à partir d'une police.)

Le simple fait de passer la souris sur une fenêtre avec un navigateur Web affichant une page avec un tas de conneries Javascript peut entraîner un tas de messages pour un tas de processus, qui provoquent tous ces processus pour se réveiller et toucher un tas de données. Vraisemblablement, y compris un tas de bitmaps non compressés "mis en cache". Il est donc très probable que cela expulse plus de choses qui seront bientôt nécessaires.

ctrl + alt + F2 pour basculer vers une autre console virtuelle permet généralement de se connecter et d'exécuter des commandes shell avec seulement quelques secondes de latence lorsque quelque chose provoque un swash thrashing. C'est juste bash; le noyau Linux n'est pas échangeable et il a tout le
code VT et clavier <-> TTY.


Pour éviter le ralentissement lorsque vous n'êtes pas vraiment débordant, la réduction du "swappiness" peut vous aider. par exemple, j'ai réglé l' /proc/sys/vm/swappinessaccordable sur6 sur mon bureau avec 16 Go de RAM et une partition de swap de 2 Go sur un SSD NVMe. Vous pouvez en savoir plus sur le réglage de la latence interactive (par opposition au débit du serveur); n'importe quel guide le mentionnera.

Mais si vous avez un échange, Linux l'utilisera avant d'invoquer le tueur OOM. Gardez votre partition de swap petite , juste assez grande pour que Linux affiche des conneries vraiment périmées qui ne sont généralement pas utilisées pendant longtemps. (par exemple des fuites de mémoire!)

Je n'ai eu aucun problème avec le swap étant plein. Linux moderne traite très bien d'avoir un espace d'échange limité. Le chrome (que j'utilise à la place de Firefox) devient parfois lent avec des dizaines d'onglets Stack Overflow ouverts, mais The Great Suspender est un bon complément pour décharger les onglets lorsque vous ne les utilisez pas. Je pense que cela économise beaucoup de RAM pour moi, même si cela ne déchargera que les onglets où vous n'avez rien tapé dans une zone de texte. Il pourrait également être disponible pour Firefox.


Comme d'autres l'ont suggéré, 16 Go de RAM sont vraiment agréables pour une utilisation interactive avec Linux. Les prix des DRAM sont relativement bas actuellement ; après avoir atteint un sommet il y a environ 1,5 an, ils ont pour la plupart décliné à nouveau.

Peter Cordes
la source
Excellente réponse, merci beaucoup. Mais en ce qui concerne "un tas de merde Javascript peut entraîner un tas de messages pour un tas de processus, qui provoquent tous ces processus de se réveiller et de toucher un tas de données" - je me demande quels sont ces processus, sont-ils Firefox processus enfant?
Kais
@Kais: gestionnaire de fenêtres, navigateur Web, serveur X, éventuellement divers autres clients X dans un bureau plus compliqué. Et tous les autres processus dont les fenêtres survolent votre souris (c'est ce que je pensais quand j'ai écrit cette phrase). Par exemple, dans KDE, la barre des tâches est un processus distinct ( plasma) du kwingestionnaire de fenêtres.
Peter Cordes
J'utilise LXDE, donc dans mon cas, seuls l'Openbox et le serveur XOrg sont les processus qui se réveillent? De plus, quels sont les types de messages qui leur sont transmis?
Kais
@Kais: messages de protocole X11 sur une socket de domaine Unix. Essayez de courir un jour xevpour voir quel type de messages vous pouvez recevoir en déplaçant la souris. Essayez également strace xevde voir les appels système qui impliquent du côté client.
Peter Cordes
Je vois, merci. Lors de l'exécution de la xevcommande, j'ai des messages uniquement en basculant vers différentes fenêtres et en cliquant dessus, mais ce n'est pas le cas lorsque je passe simplement la souris.
Kais
-2

Qu'est-ce qui peut empêcher Linux de répondre pendant quelques minutes lors de la navigation sur certains sites Web?

Vous n'utilisez pas Linux correctement. Ce qui devient particulièrement visible sur une machine à ressources limitées. Vous n'avez pas besoin de plus de RAM, ni d'un processeur plus rapide.

Contexte:

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

Pour «résoudre» votre problème:

Laissez les programmes non utilisateur seuls, mais commencez à changer les priorités (niveaux agréables) de vos programmes utilisateur afin qu'ils ne vous causent pas de problèmes. Modifiez ce qui lance vos programmes pour inclure de bons niveaux, allant généralement pas de problème, au pire délinquant.

Exemples du monde réel:

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}

Votre WorstOffender ne répondra toujours pas pendant quelques minutes, c'est littéralement un problème d'acheter une meilleure boîte, mais cela ne causera plus votre système d'exploitation (Linux) et tout ce que vous avez en cours de fonctionnement ne répondra pas non plus.

Michael
la source
2
J'ai travaillé pendant des décennies avec Linux à la fois avec de nombreux serveurs et sur ma propre station de travail (souvent dans des configurations de machines virtuelles très limitées), et je n'ai pas eu à résoudre une seule fois un problème de performances lié à la RAM nice -n. "Vous n'avez pas besoin de plus de RAM" - il a certainement besoin de plus de RAM; ou pourrait utiliser ulimitpour limiter durement les pires contrevenants afin que sa RAM existante soit de nouveau suffisante. "Vous n'utilisez pas Linux correctement." est complètement éteint.
AnoE
Et j'ai travaillé avec des installations de GUI Linux sur du matériel à ressources limitées au cours des 22 dernières années et des travaux «sympas» pour résoudre le problème de «ne pas répondre à Linux pendant des minutes».
Michael
Je ne nie pas que cela fonctionne; Je dis simplement que la présenter comme la "bonne" façon de travailler avec Linux n'est peut-être pas la meilleure chose.
AnoE