¿Qué puede hacer que Linux no responda durante minutos al navegar por ciertos sitios web?

28

Estoy usando Linux 4.15, y esto me sucede muchas veces cuando navego por Google, Facebook o cualquier otro sitio web que consuma recursos: todo el sistema operativo deja de responder, se congela y es inútil. Lo único que veo que funciona es el disco (partición del sistema principal formateada como ext4), que está en uso masivo (aceleración de E / S).

Me veo obligado a esperar un minuto o más para deshacerme de la hinchazón, a veces no responde durante doce minutos y, por lo tanto, me siento frustrado. El hecho de que el sistema operativo no pueda manejar bien la multitarea tiende a reflejar un comportamiento absolutamente extraño e inaceptable.

No solo esto sucede con Firefox, sino con cualquier aplicación de intérprete de JavaScript, incluido Microsoft VSCode o angular-cli ( ng servecomando), así como cualquier otro hilo de ejecución que requiera recursos, como el caso de plantuml cuando se genera un gráfico muy grande a partir de un Diagrama UML muy complejo.

Hoy en día, el sistema operativo se vuelve totalmente inmanejable, después de lanzar un software de recuperación de datos para un HDD externo (sobre la partición ext4) que se desconectó recientemente de un puerto USB defectuoso mediante un pequeño movimiento.

No puedo decir la causa raíz de este comportamiento defectuoso

Tengo muchas pestañas abiertas en el navegador y 94% de uso de la partición del sistema operativo según la dfsalida:

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, estoy usando:

  1. Intel Core i3 v2348M según 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. (Ver htopsalida a continuación).

  3. 99.83 MHz de velocidad del bus de la placa base
  4. Disco duro interno de 500 GB: este es el informe 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.
    

Estos son los resultados del 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

Esos son también los resultados de las estadísticas de VM, generadas por el comando vmstat 5.

AFAIK, el bloatware no debería hacer que el sistema operativo no responda, por lo que no consideraría ni siquiera aceptaría que el bloatware es la causa principal del problema, ya que el trabajo del sistema operativo es aislar los procesos y garantizar la multitarea.

No sé si este problema es específico del sistema operativo, del hardware o de la configuración.

¿Algunas ideas?

Kais
fuente
44
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat . Asegúrese de actualizar la Pregunta según sea necesario para cualquier aclaración que resulte de los comentarios / chat. ¡Gracias!
Jeff Schaller
3
Sospecho que su sistema está cambiando mucho; ¿Puedes correr vmstat 5mientras tu sistema está funcionando? Está bien iniciar vmstat de antemano y publicar las filas que se imprimen durante las congelaciones. Estoy buscando específicamente las columnas siy so, que indican cuánto intercambia realmente el sistema. Además, ¿puede publicar la salida top, ordenada por uso de memoria (shift-M)? (o cualquiera que sea el modo htop equivalente)
marcelm
1
Cuando un sistema de archivos está casi lleno, puede volverse muy lento. No estoy seguro de si este es el caso con ext4.
Nadie
1
@Kais Pruebe ambos y vea qué funciona. Mi intercambio se llena al máximo a la mitad de lo que preparé y no me causa ningún congelamiento. Si uno experimenta ralentizaciones o no por el uso de intercambio también depende de los patrones de uso, creo, por lo que nuestras experiencias pueden diferir.
JoL
2
Intente deshabilitar el intercambio por completo, eso confirmará o eliminará la agitación del disco como la fuente del problema. El punto de intercambio es colocar páginas no utilizadas en el disco, pero si la mayoría de las páginas están realmente en uso, entonces el intercambio no ayudará. Si su carga de trabajo típica requiere 10 GB de páginas residentes, entonces una máquina de 8 GB tendrá dificultades. La respuesta al agotamiento de recursos es reducir la carga de trabajo o aumentar el recurso (en este caso, intente con Chrome o agregue más memoria física).
Bain

Respuestas:

27

¿Qué puede hacer que Linux no responda tanto?

Comprometer en exceso la RAM disponible, lo que causa una gran cantidad de intercambio, definitivamente puede hacer esto. Recuerde que la E / S de acceso aleatorio en su HDD mecánico requiere mover un cabezal de lectura / escritura, que solo puede realizar alrededor de 100 búsquedas por segundo.

Es habitual que Linux salga totalmente a almorzar si sobrecompromete RAM "demasiado". También tengo un disco giratorio y 8 GB de RAM. He tenido problemas con un par de programas con pérdidas de memoria. Es decir, su uso de memoria sigue creciendo con el tiempo y nunca se reduce, por lo que la única forma de controlarlo habría sido detener el software y luego reiniciarlo. Según las experiencias que tuve durante esto, no estoy muy sorprendido de escuchar demoras de más de diez minutos, si está generando 3GB + de intercambio.

No necesariamente verá esto en todos los casos en que tenga más de 3 GB de intercambio. La teoría dice que el concepto clave es la paliza . Por otro lado, si está tratando de cambiar entre dos conjuntos de trabajo diferentes, y requiere intercambiar 3 GB de entrada y salida, a 100 MB / s tomará al menos 60 segundos, incluso si el patrón de E / S puede optimizarse perfectamente. En la práctica, el patrón de E / S estará lejos de ser óptimo.

Después de la dificultad que tuve con esto, volví a formatear mi espacio de intercambio a 2 GB (varias veces más pequeño que antes), por lo que el sistema no podría intercambiar tan profundamente. Puede hacerlo incluso sin perder el tiempo cambiando el tamaño de la partición, porque mkswaptoma un parámetro de tamaño opcional.

El balance aproximado es entre quedarse sin memoria y hacer que los procesos se bloqueen, y que el sistema se cuelgue durante tanto tiempo que te rindas y reinicies de todos modos. No sé si una partición de intercambio de 4 GB es demasiado grande; puede depender de lo que estés haciendo. Lo importante es tener cuidado cuando el disco comienza a batirse, verificar el uso de memoria y responder en consecuencia.

Verificar el uso de memoria de aplicaciones multiproceso es difícil. Para ver el uso de memoria por proceso sin contar dos veces la memoria compartida, puede usar sudo atop -R, presionar My m, y mirar en la columna PSIZE. También puedes usar smem. smem -t -P firefoxmostrará PSS de todos sus procesos de firefox, seguido de una línea con PSS total. Este es el enfoque correcto para medir el uso de memoria total de los navegadores basados ​​en Firefox o Chrome. (Aunque también hay funciones específicas del navegador para mostrar el uso de la memoria, que mostrarán pestañas individuales).

sourcejedi
fuente
1
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
Jeff Schaller
Puede valer la pena considerar el uso de ulimitintentar controlar el uso de los procesos (es complicado con una aplicación multiproceso, pero podría ser útil).
Toby Speight
2
@TobySpeight si desea limitar el uso de memoria de la aplicación, entonces necesita usar cgroups. ulimitRealmente no ayuda.
sourcejedi
Sí, esa es probablemente una mejor opción. Vale la pena mencionarlo en la respuesta, de todos modos.
Toby Speight
2
The important thing is to watch out for when the disk starts churning, check your memory usage, and respond accordingly.<- o, si usa una GUI, cree un crontab que ejecute un script simple (cada minuto más o menos) que verifique la cantidad de RAM libre que le queda, advirtiéndole de ello. Hice el mío para Linux Mint, y aprendí bastante de él. Es algo con lo que puedes probar y jugar.
Ismael Miguel
5

AFAIK, el bloatware no debería hacer que el sistema operativo no responda, por lo que no consideraría ni siquiera aceptaría que el bloatware es la causa principal del problema

No te va a gustar esto, pero creo que el bloatware es tu problema (aunque no estoy seguro de si es la memoria o el disco el problema). Desafortunadamente, el kernel de Linux es horrible para manejar situaciones de alta presión de memoria, y se sabe que básicamente requiere reiniciar una vez que se agota la memoria. Hay tres cosas que me llevan a creer que su problema es el agotamiento de los recursos:

  1. Su espacio en disco en root (/) y DATA está casi lleno. No estoy seguro de para qué usa DATA, pero he tenido problemas antes con cambiar el tamaño de mi partición raíz demasiado pequeña y mi sistema deja de funcionar.
  2. Tiene mucha presión de memoria, lo que significa que su RAM está casi llena. Cuando la RAM comience a llenarse, comenzará a tener fallas en la página. Las fallas de página ocurren cuando el kernel no puede asignar suficiente memoria para un proceso y, en cambio, debe usar algunos de los sistemas con un espacio de intercambio mucho más lento. Esto nos lleva a nuestra última observación:
  3. Su espacio de intercambio está casi lleno. Claramente, hay una alta presión de memoria en su sistema ya que tanto la RAM como el intercambio están casi llenos.

Básicamente, junte estos tres y su sistema no tiene suficientes recursos disponibles para hacer casi nada. En cuanto a que es lamentable lo mal que Linux maneja las situaciones de poca memoria (en comparación con, por ejemplo, el kernel NT en Windows), pero parece ser así. Puede encontrar más discusión en este hilo de Reddit y su lista de correo vinculada.

En cuanto a cómo solucionar su situación, diría que aumentar el tamaño de su intercambio es una buena idea, pero dado que tiene poco espacio en disco, eso será un problema. A menos que su servidor de Minecraft tenga un montón de personas, creo que sería seguro reducir su memoria a unos 1024 m (yo personalmente uso 1024 m con aproximadamente 10 personas y funciona bien). También usaría espita o papel para su servidor de Minecraft, ya que tienden a ser más eficaces.

¡Buena suerte!

Persecución
fuente
77
Claramente, el problema es la memoria, no el disco. Es cierto que Linux es malo bajo alta presión de memoria. Pero no es cierto que se requiera un reinicio. Si logra liberar algo de memoria, Linux tendrá la misma capacidad de respuesta que antes de que la presión de la memoria excediera la capacidad disponible.
Gilles 'SO- deja de ser malvado'
1
@Kais Dije "esto nos lleva a nuestra última observación" como un ejemplo ya que estaba hablando sobre el espacio de intercambio y continuaría hablando sobre eso en el punto 3. Sobre Minecraft, parecía que estaba ejecutando un servidor de Minecraft, y había asignado 3G de RAM a la misma. Solo decía que, a menos que tenga un montón de personas jugando al mismo tiempo, es posible que no necesite tanta RAM. Dije que "tienden a ser más eficaces" cuando se habla de papel y espita, que son servidores alternativos de Minecraft que ofrecen un mejor rendimiento en comparación con el MC de vainilla.
Chase
2
He oído que, en general, usar swap es una mala idea. ¿Al menos en el entorno del servidor, cuando no es aceptable congelar durante 12 minutos?
9ilsdx 9rvj 0lo
2
@Kais, en mi experiencia, Windows es aún peor con los programas sin GUI, pero suspenderá los programas sin GUI si la presión de memoria es alta, lo que resuelve el problema para el escritorio, bajo el supuesto de que las aplicaciones de escritorio no tienen fondo Tareas.
Simon Richter
2
Vanilla Minecraft tal vez; pero los modpacks grandes llegan fácilmente a 3 GiB antes de que un jugador incluso se una :) :)
Luaan
4

¿Cuál es el resultado de free -m? La cantidad de RAM que tiene no tiene sentido si no sabemos cuánto está usando. Eso y me interesa saber cuánto espacio de intercambio se está utilizando.

Sin embargo, creo que has respondido tu propia pregunta. Tener abiertas "muchas pestañas" abiertas en su navegador definitivamente puede ralentizar su sistema si nunca las cierra, ya que continuarán consumiendo memoria independientemente; cuando su sistema se congela, ¿cuántos tiene abiertos a la vez?

También tiene sentido si su sistema se congela de otras tareas que requieren mucha memoria, como "generar un gráfico muy grande a partir de un diagrama UML muy complejo". Eso ralentizará absolutamente su sistema a medida que genera el gráfico, por lo que no es una sorpresa.

Realmente parece que esta es la forma en que se supone que debe comportarse su sistema. O eso o me falta algo aquí.

Por cierto, las estadísticas de HDD no importan cuando se trata de que su sistema no responda, ya que la falta de memoria es casi siempre el culpable.

Zach Sanchez
fuente
1
"Eso ralentizará absolutamente su sistema": Sí, esto es de esperarse, pero no se espera causar una sesión X incontrolable (es decir, resultado del sistema congelado), donde no puedo ver el cursor del mouse moviéndose.
Kais
1
Eso realmente sería de esperar, el comportamiento que está describiendo es exactamente lo que sucede cuando uso demasiada RAM en mi sistema. Incluso he obstruido mi sistema hasta el punto de que no pude cambiar a un terminal basado en texto, y tengo el doble de RAM que tú. Si alguna vez se encuentra con ese tipo de situación en la que no puede usar su sesión X, debe cambiar al terminal basado en texto y eliminar los procesos ofensivos. Si eso falla, tendría que hacer un reinicio completo. Sobre lo mejor que puedo decirte.
Zach Sanchez
1
@Kais macOS también se vuelve lento en situaciones de poca memoria. Realmente no hay forma de que el sistema decida con sensatez qué memoria necesita mantener en la RAM, por lo que cambiar de una aplicación a otra se volvería loco, hasta el punto en que la interfaz de usuario deja de responder.
Kusalananda
55
ehh, no es que no haya formas mucho más efectivas de mantener receptiva la interfaz de usuario del "administrador de ventanas". La investigación de MS escribió todo un sistema operativo experimental en un diseño que prohibía la búsqueda de demanda. Prueba de concepto: ejecute el "administrador de ventanas" en Midori, emule las aplicaciones de Linux, incluido el intercambio. Ahí tienes, el "administrador de ventanas" seguirá respondiendo incluso si las aplicaciones se intercambian. Como mínimo, podría permitirle matar de manera confiable algunas aplicaciones para liberar memoria. Linux no es perfecto. El cambio de Gnome de X11 a Wayland incluso empeoró significativamente la capacidad de respuesta de wrt en sistemas sobrecargados.
sourcejedi
2
Las estadísticas de HDD pueden importar. Una posible causa de falta de respuesta es un disco que falla, lo que causa una gran acumulación de E / S. Pero no veo ninguna evidencia de que eso suceda en este caso.
200_success
4

Cuando leí el título, mi pensamiento inmediato fue "no hay suficiente RAM", porque yo mismo he experimentado exactamente este problema en Linux, más de 10 minutos de agitación de disco frenética después de abrir demasiadas pestañas del navegador. Estoy de acuerdo, es deprimente y necesita mejoras. Windows maneja esta situación mucho mejor.

Algunas sugerencias:

  • Agregue un applet de monitor de memoria a la bandeja del sistema para que pueda vigilarlo.
  • En las preferencias de Firefox, establezca el "límite de proceso de contenido" en "1". Como dice el texto debajo de la configuración: "Los procesos de contenido adicionales pueden mejorar el rendimiento cuando se usan varias pestañas, pero también usarán más memoria".
  • Elimine o reemplace los complementos del navegador que consumen mucha memoria. Mantenga su bloqueador de anuncios, ya que los anuncios consumen más memoria que cualquier bloqueador.
  • Investigue y posiblemente elimine cualquier otro programa que tenga mucha memoria.

Sin embargo, la única solución verdadera es comprar más RAM.

Una abundancia de RAM no solo evitará que ocurra esta catástrofe, sino que permitirá que el sistema acumule una gran memoria caché de archivos en la RAM, que su sistema actualmente no puede hacer porque se ejecuta muy cerca del límite. Una memoria caché de archivo grande quitará el trabajo del HDD y hará que casi todas las acciones en el sistema se sientan más rápidas en general. Vale la pena.

Boann
fuente
Gran respuesta, muchas gracias. Pero con respecto a "Los procesos de contenido adicionales pueden mejorar el rendimiento cuando se usan varias pestañas, pero también usarán más memoria". - Si entiendo correctamente, ¿Firefox puede abrir hasta 8 procesos por pestaña, por configuración predeterminada?
Kais
1
@Kais Creo que es 1 proceso por pestaña. En cualquier caso, si establece el límite en 1, será 1 total de proceso para todas las pestañas, lo que debería usar menos memoria.
Boann
Entendido, gracias de nuevo.
Kais
4

Su salida htop muestra que su necesidad de RAM es mayor que su capacidad (RAM total + SWAP). Entonces, la primera consideración obvia es reducir el uso de RAM o aumentar la disponibilidad de RAM.

Tenga en cuenta que hoy en día las versiones de Firefox son extremadamente recursos hambre, debido a la forma en que las ventanas / pestañas están proceso y el espacio de memoria dada. La idea era evitar que las pestañas se cayeran y poner de rodillas a todo el navegador. ¿Vale la pena el precio? Quién puede decir ... De todos modos, he tenido un problema similar debido a lo anterior, ya que mi placa base Pentium 4 solo admite 2 GB de RAM. Para evitar posibles bloqueos de memoria agotada, agregué ~ 800M de espacio de intercambio en un SSD de repuesto, obviamente con la intención de usarlo lo menos posible. Lo he logrado cambiando una configuración conocida como swappiness, que determina cuán ansioso está el kernel para intercambiar páginas de memoria. Algunos comandos útiles de la siguiente manera.

Verifique el intercambio actual: cat /proc/sys/vm/swappiness

Esto puede dar un resultado de alrededor de 60, que es bastante alto para obtener el máximo rendimiento en sistemas con una carga menor. Para usted, obviamente, esto es contraproducente, por lo que puede cambiar la configuración utilizando un comando como sysctl vm.swappiness=1cambiar la configuración mientras el sistema se está ejecutando.

Para guardar estos cambios, deberá buscar el archivo /etc/sysctl.conf. En ese archivo, cambie el valor o agregue la línea vm.swappiness=1.

Tenga en cuenta que esta no es una solución en su caso, pero debería hacer una solución útil.

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

fuente de la respuesta anterior, incluye más explicaciones. Encontré esa publicación muy útil en mi caso.

Donutz
fuente
Gracias por su respuesta. Esto parece ser una buena recomendación para la configuración de VM.
Kais
2

Una excelente discusión sobre cómo se causa, continúa y crece el problema. Me gusta adelantarme a problemas como el que experimenta al lanzar hardware en el diseño inicial de la computadora y / o actualizar una implementación existente. Puedes,

  • agregue RAM (32 GB funciona muy bien para muchas configuraciones)

  • reemplace su disco duro con un SSD

  • agregar un SSD (unidad de estado sólido) para unidad de intercambio

  • crear una partición de intercambio en RAM (con 32 o más GB de RAM)

  • obtener un disco duro más rápido

  • pasar a un sistema con un procesamiento más rápido y una arquitectura de bus más amplia / más rápida.

Algunas de estas actualizaciones / reemplazos de hardware pueden costar menos de $ 100US. Estos no son específicos de Linux, ni de sus implementaciones exactas de software, pero el hardware que está utilizando no parece adecuado para sus tareas.

Viejo tío ho
fuente
1
Respuesta muy útil, gracias por señalar las recomendaciones de reemplazo de hardware.
Kais
1
Espero que ayude. No sabe qué tipo de computadora o el equipo específico, por lo que estos son pasos genéricos, en orden de mejora más probable. Cualquiera o todos ayudarían a sus ralentizaciones específicas que probablemente se deban a la agitación de la memoria caché, el intercambio y para lecturas / escrituras de disco más rápidas y menos en general
Old Uncle Ho
66
La mayoría de esas son buenas sugerencias, pero el intercambio a RAM es básicamente inútil a menos que esté usando zram o zswap para el intercambio comprimido a RAM; valen la pena, pero cambiar a un disco RAM sin comprimir solo crea exactamente la presión de RAM que libera ( en realidad, un poco más debido a los gastos generales).
cas
No estoy seguro de por qué alguien cambiaría a RAM, excepto cuando se comprime, lo que parece una gran idea en las cargas de trabajo de alta RAM / baja CPU.
Peter - Restablece a Monica el
1
@bain: ¿cómo es cada vez mejor tener páginas intercambiadas a cabo frente a la RAM asignada todavía? Todavía usan la misma cantidad de páginas de RAM física a menos que uses compresión. Ahí es donde está el valor. La única diferencia es más contabilidad, pero quizás tablas de páginas de hardware más limpias. Para la memoria solo de inicio que procesa, básicamente, descuida desasignar, por ejemplo, funciones / datos que solo se tocan durante el inicio, cambiar a disco es mejor porque no consume espacio DRAM. Para los demonios de fondo que no se usan de forma interactiva, la latencia no es importante, por lo que nuevamente el intercambio de discos gana.
Peter Cordes
2

Por lo general, es "solo" X11 que se vuelve inutilizable. Para obtener una pulsación de tecla de su teclado en un programa y que muestre cualquier cosa en la pantalla, debe ejecutarse el código en varios procesos diferentes. (Servidor X para obtener la combinación de teclas del núcleo, xterm o equivalente para obtener el evento y decidir dibujar algo, luego envíe un mensaje al servidor X para dibujar un glifo de una fuente).

Simplemente moviendo el mouse sobre una ventana con un navegador web que muestra una página con un montón de basura JavaScript puede dar lugar a un montón de mensajes para un montón de procesos, todo lo cual hace que esos procesos se activen y toquen un montón de datos. Presumiblemente incluye un montón de mapas de bits sin comprimir "en caché". Por lo tanto, es muy probable que desaloje más cosas que pronto se necesitarán.

ctrl + alt + F2 para cambiar a otra consola virtual generalmente hace posible iniciar sesión y ejecutar comandos de shell con solo un par de segundos de latencia cuando algo está causando un intercambio violento. Es solo bash; el kernel de Linux no es intercambiable y tiene todos los
códigos VT y teclado <-> TTY.


Para evitar la desaceleración cuando no estás realmente golpeando, puede ser útil reducir el "intercambio". por ejemplo, configuré el /proc/sys/vm/swappinesssintonizable 6en mi escritorio con 16 GB de RAM y una partición de intercambio de 2 GB en un SSD NVMe. Puede leer más sobre el ajuste para la latencia interactiva (a diferencia del rendimiento del servidor); cualquier guía mencionará eso sintonizable.

Pero si tiene algún intercambio, Linux lo usará antes de invocar al asesino OOM. Mantenga su partición de intercambio pequeña , lo suficientemente grande como para que Linux descubra una basura realmente obsoleta que generalmente no se usa durante mucho tiempo. (por ejemplo, pérdidas de memoria)

No he tenido ningún problema con el intercambio completo. Las ofertas modernas de Linux tienen muy poco espacio de intercambio limitado. Chromium (que uso en lugar de Firefox) a veces se ralentiza con docenas de pestañas Stack Overflow abiertas, pero The Great Suspender es un buen complemento para descargar pestañas cuando no las estás usando. Creo que eso me ahorra mucha RAM, aunque solo descargará pestañas donde no hayas escrito nada en un cuadro de texto. También podría estar disponible para Firefox.


Como otros han sugerido, 16 GB de RAM es realmente bueno para uso interactivo con Linux. Los precios de DRAM son relativamente bajos actualmente ; Después de aumentar hace aproximadamente 1,5 años, en su mayoría han disminuido nuevamente.

Peter Cordes
fuente
Gran respuesta, muchas gracias. Pero con respecto a "un montón de basura de Javascript puede dar lugar a un montón de mensajes para un montón de procesos, todo lo cual hace que esos procesos se activen y toquen un montón de datos". Me pregunto cuáles son estos procesos, ¿son Firefox? procesos secundarios?
Kais
@Kais: Administrador de ventanas, navegador web, servidor X, posiblemente varios otros clientes X en un escritorio más complicado. Y cualquier otro proceso cuyas ventanas mueva el mouse (que es lo que estaba pensando cuando escribí esa oración). Por ejemplo, en KDE, la barra de tareas es un proceso separado ( plasma) del kwinadministrador de ventanas.
Peter Cordes
Yo uso LXDE, así que en mi caso solo el Openbox y el servidor XOrg son los procesos que se activan. Además, ¿qué tipo de mensajes se les pasan?
Kais
@Kais: mensajes de protocolo X11 sobre un socket de dominio unix. Intente ejecutar en xevalgún momento para ver qué tipo de mensajes puede obtener al mover el mouse. También intente strace xevver las llamadas del sistema que implican para el lado del cliente.
Peter Cordes
Ya veo, gracias. Al ejecutar el xevcomando, recibo mensajes solo al cambiar a diferentes ventanas y hacer clic en ellas, pero no es el caso cuando me muevo sobre el mouse.
Kais
-2

¿Qué puede hacer que Linux no responda durante minutos al navegar por ciertos sitios web?

No estás usando Linux correctamente. Lo que se vuelve especialmente notable en una máquina con recursos limitados. No necesita más RAM, ni un procesador más rápido.

Fondo:

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

Para "solucionar" su problema:

Deje en paz los programas que no son de usuario, pero comience a cambiar las prioridades (niveles agradables) de sus programas de usuario para que no le causen problemas. Edite lo que inicia sus programas para incluir niveles agradables, pasando generalmente de no ser un problema, al peor delincuente.

Ejemplos del 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}

Su WorstOffender seguirá sin responder durante minutos, eso es, literalmente, un problema para comprar una mejor caja, pero ahora no hará que todo su sistema operativo (Linux) y todo lo demás que esté ejecutando también deje de responder.

Miguel
fuente
2
He trabajado durante décadas con Linux, tanto con muchos servidores como en mi propia estación de trabajo (a menudo en configuraciones de VM muy limitadas), y no he tenido que solucionar un problema de rendimiento relacionado con RAM nice -n. "No necesitas más RAM", ciertamente necesita más RAM; o podría usar ulimitpara limitar a los peores infractores para que su RAM existente sea suficiente nuevamente. "No estás usando Linux correctamente". Está completamente apagado.
AnoE
Y he trabajado con las instalaciones de la GUI de Linux en hardware con recursos limitados durante los últimos 22 años y los trabajos "agradables" para resolver el mantenimiento de "Linux no responde por minutos".
Michael
No niego que funcione; Solo digo que presentarlo como la forma "correcta" de trabajar con Linux puede no ser lo mejor.
AnoE