Что может заставить Linux не отвечать на запросы при просмотре определенных веб-сайтов в течение нескольких минут?

28

Я использую Linux 4.15, и это случается со мной много раз, когда я просматриваю Google, Facebook или любой другой веб-сайт, требующий ресурсов. Вся ОС перестает отвечать на запросы, блокируется и становится бесполезной. Единственное, что я вижу, это работает - это диск (основной системный раздел, отформатированный как ext4), который широко используется (регулирование ввода / вывода).

Я вынужден ждать минуту или больше, чтобы избавиться от раздувания, иногда он остается без ответа в течение двенадцати минут, и, следовательно, я расстраиваюсь. Тот факт, что ОС не справляется с многозадачностью, отражает абсолютно странное и недопустимое поведение.

Это происходит не только с Firefox, но и с любым приложением-интерпретатором javascript, включая Microsoft VSCode или angular-cli ( ng serveкоманда), а также с любым другим ресурсоемким потоком выполнения - например, в случае Plantuml при генерации очень большого графа из очень сложная UML-диаграмма.

Сегодня операционная система становится полностью неуправляемой после запуска программного обеспечения для восстановления данных для внешнего жесткого диска (через раздел ext4), который в последнее время был отсоединен от плохого USB-порта небольшим движением.

Я не могу сказать причину такого глючного поведения

У меня есть много вкладок, открытых в браузере, и 94% использования OS-раздела согласно dfвыводу:

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

В качестве аппаратного обеспечения я использую:

  1. Intel Core i3 v2348M в соответствии с 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 ГБ ОЗУ. (Смотрите htopвывод ниже).

  3. 99,83 МГц частоты шины материнской платы
  4. Внутренний жесткий диск на 500 ГБ - это отчет SMART от операционной системы:

    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.
    

Это результаты использования ресурсов по 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

Это также результаты статистики виртуальных машин, сгенерированные командой vmstat 5.

AFAIK, раздувание не должно приводить к тому, что ОС перестает отвечать на запросы, поэтому я бы не стал считать или даже признавать, что раздувание является основной причиной проблемы - поскольку задача ОС состоит в изоляции процессов и обеспечении многозадачности.

Я не знаю, является ли эта проблема специфичной для ОС, аппаратной части или конфигурации.

Любые идеи?

Kais
источник
4
Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат . Пожалуйста, не забудьте обновить Вопрос по мере необходимости для любых разъяснений, которые являются результатом комментариев / чата. Спасибо!
Джефф Шаллер
3
Я подозреваю, что ваша система сильно менялась; Вы можете запустить, vmstat 5пока ваша система работает? Можно запустить vmstat заранее и опубликовать строки, которые печатаются во время зависаний. Я ищу специально для siи soстолбцов, которые показывают , насколько эта система фактически замена. Кроме того, вы можете опубликовать вывод top, отсортированный по использованию памяти (shift-M)? (или любой другой режим эквивалентен HTOP есть)
marcelm
1
Когда файловая система почти заполнена, она может стать очень медленной. Я не уверен, вероятно ли это в случае с ext4.
Никто
1
@Kais Попробуйте оба и посмотрите, что работает? Мой своп заполняет максимум до половины того, что я приготовил, и это не вызывает никаких зависаний. Я думаю, то, будет ли кто-то испытывать замедление или нет от использования свопа, также зависит от моделей использования, поэтому наш опыт может отличаться.
JoL
2
Попробуйте отключить подкачку полностью - это подтвердит или устранит перегрузку диска как источник проблемы. Смысл обмена заключается в размещении неиспользуемых страниц на диске, но если большинство страниц действительно используются, то обмен не поможет. Если ваша типичная рабочая нагрузка требует 10 ГБ резидентных страниц, то 8 ГБ будет работать. Ответом на исчерпание ресурсов является либо уменьшение рабочей нагрузки, либо увеличение ресурса (в этом случае попробуйте chrome или добавьте больше физической памяти).
Bain

Ответы:

27

Что может сделать Linux таким неотзывчивым?

Чрезмерная загрузка доступной оперативной памяти, которая вызывает большой объем перестановки, определенно может сделать это. Помните, что для ввода-вывода с произвольным доступом на механическом жестком диске требуется перемещение головки чтения / записи, которая может выполнять только около 100 операций поиска в секунду.

Обычно Linux полностью обедает, если вы перегружаете ОЗУ «слишком сильно». У меня также есть вращающийся диск и 8 ГБ оперативной памяти. У меня были проблемы с парой программ с утечками памяти. Т.е. их использование памяти растет со временем и никогда не сокращается, поэтому единственный способ контролировать это - остановить программное обеспечение, а затем перезапустить его. Основываясь на опыте, который я получил во время этого, я не очень удивился, услышав задержки свыше десяти минут, если вы генерируете 3 ГБ + подкачки.

Вы не обязательно увидите это во всех случаях, когда у вас есть более 3 ГБ подкачки. Теория гласит, что ключевой концепт - бьющий . С другой стороны, если вы пытаетесь переключаться между двумя различными рабочими наборами, и для этого требуется подкачка 3 ГБ входами и выходами, при скорости 100 МБ / с это займет не менее 60 секунд, даже если схема ввода-вывода может быть идеально оптимизирована. На практике схема ввода / вывода будет далека от оптимальной.

После трудностей, с которыми я столкнулся, я переформатировал пространство подкачки до 2 ГБ (в несколько раз меньше, чем раньше), чтобы система не смогла выполнить такой глубокий обмен. Вы можете сделать это даже без изменения размера раздела, потому что mkswapпринимает необязательный параметр размера.

Грубый баланс находится между нехваткой памяти и уничтожением процессов, а также тем, что система зависает так долго, что вы все равно сдаетесь и перезагружаетесь. Я не знаю, является ли раздел подкачки 4GB слишком большим; это может зависеть от того, что вы делаете. Важно следить за тем, когда диск начинает перетекать, проверять использование памяти и реагировать соответствующим образом.

Проверить использование памяти многопроцессорными приложениями сложно. Чтобы увидеть использование памяти для каждого процесса без двойного учета общей памяти, вы можете использовать sudo atop -R, нажать Mи mи посмотреть в столбце PSIZE. Вы также можете использовать smem. smem -t -P firefoxпокажет PSS всех ваших процессов Firefox, после чего следует строка с общим PSS. Это правильный подход для измерения общего использования памяти браузерами на базе Firefox или Chrome. (Хотя есть также специфичные для браузера функции для отображения использования памяти, которые будут отображать отдельные вкладки).

sourcejedi
источник
1
Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат .
Джефф Шаллер
Возможно, стоит подумать об использовании, ulimitчтобы попытаться контролировать использование процессов (это сложно с многопроцессорным приложением, но может быть полезно).
Тоби Спейт
2
@TobySpeight, если вы хотите ограничить использование памяти приложения, вам нужно использовать cgroups. ulimitдействительно не помогает
sourcejedi
Да, это, вероятно, лучший выбор. Во всяком случае, это действительно стоит упомянуть в ответе.
Тоби Спейт
2
The important thing is to watch out for when the disk starts churning, check your memory usage, and respond accordingly.<- или, если вы используете графический интерфейс, создайте crontab, который запускает простой скрипт (каждую минуту или около того), который проверяет, сколько свободной оперативной памяти у вас осталось, предупреждая вас об этом. Я сделал свой собственный для Linux Mint, и я многому научился у него. Это то, что вы можете попробовать поиграть.
Исмаэль Мигель
5

AFAIK, раздутые программы не должны приводить к тому, что ОС перестает отвечать на запросы, поэтому я бы не стал считать или даже признавать, что взломщик является основной причиной проблемы.

Вам это не понравится, но я думаю, что проблема заключается в раздувании ПО (хотя я не уверен, что проблема в памяти или диске). К сожалению, ядро ​​Linux прекрасно справляется с ситуациями, когда требуется много памяти, и, как известно, в основном требует перезагрузки после исчерпания памяти. Есть три вещи, которые заставляют меня поверить, что ваша проблема заключается в исчерпании ресурсов:

  1. Ваше дисковое пространство на root (/) и DATA почти заполнено. Я не уверен, для чего вы используете DATA, но раньше у меня возникали проблемы с изменением размера моего корневого раздела, и моя система перестала работать.
  2. У вас высокое давление памяти, а это означает, что ваша память почти заполнена. Когда ОЗУ начнет заполняться, вы начнете получать ошибки страницы. Сбои страниц происходят, когда ядро ​​не может выделить достаточно памяти для процесса и вместо этого должно использовать некоторые из систем с более медленным пространством подкачки. Это приводит нас к нашему последнему наблюдению:
  3. Ваше пространство подкачки почти заполнено. Очевидно, что в вашей системе слишком много нагрузки на память, так как RAM и swap почти заполнены.

По сути, соберите эти три вместе, и у вашей системы недостаточно ресурсов, чтобы что-то сделать. Что касается того, к сожалению, насколько плохо Linux справляется с ситуациями с нехваткой памяти (по сравнению, скажем, с ядром NT в Windows), но, похоже, так оно и есть. Вы можете найти больше обсуждений в этой ветке Reddit и связанной с ней рассылке.

Что касается того, как исправить вашу ситуацию, я бы сказал, что увеличение размера подкачки - это хорошая идея, но, поскольку у вас недостаточно места на диске, это будет проблемой. Если на вашем сервере Minecraft не будет тонны людей, я думаю, что было бы безопасно уменьшить объем памяти до 1024 м (лично я использую 1024 м с 10 людьми, и он отлично работает). Я также использовал бы spigot или бумагу для вашего сервера Minecraft, так как они, как правило, более производительны.

Удачи!

гнаться
источник
7
Это проблема памяти, а не диска. Это правда, что Linux плохо работает под большим давлением памяти. Но это не правда, что требуется перезагрузка. Если вам удастся освободить часть памяти, Linux станет такой же отзывчивой, какой была до того, как давление памяти превысило доступную емкость.
Жиль "ТАК - перестань быть злым"
1
@ Kais Я сказал, что «это приводит нас к нашему последнему наблюдению», поскольку я говорил о пространстве подкачки и продолжу говорить об этом в пункте 3. Что касается Minecraft, похоже, что вы работаете с сервером Minecraft, и выделил 3G оперативки к нему. Я просто говорил, что если на вас одновременно не играет тонна людей, вам может не потребоваться столько оперативной памяти. Я сказал, что «они, как правило, более производительны», когда речь идет о бумаге и втулках, которые являются альтернативными серверами Minecraft и имеют лучшую производительность по сравнению с vanilla MC.
Погоня
2
Я слышал, что вообще использовать своп вообще плохая идея? Как минимум в серверной среде, когда заморозка на 12 минут не приемлема?
9ilsdx 9rvj 0lo
2
@ Kais, по моему опыту, Windows еще хуже с программами без GUI, но она будет приостанавливать не-передние программы GUI, если давление памяти высокое, что решает проблему для рабочего стола, в предположении, что приложения для настольных компьютеров не имеют фона задачи.
Саймон Рихтер
2
Может быть, Vanilla Minecraft; но большие модпаки легко добираются до 3 ГиБ до того, как игрок даже присоединится :)
Луаан
4

Какой выход free -m? Объем вашей оперативной памяти не имеет смысла, если мы не знаем, сколько вы используете. Это и мне интересно узнать, сколько пространства подкачки используется.

Я думаю, что вы ответили на свой вопрос. Если открыть в браузере «много вкладок», это определенно может замедлить работу вашей системы, если вы никогда не закроете их, поскольку они будут продолжать потреблять память независимо; когда ваша система зависает, сколько вы открываете за раз?

Также имеет смысл, если ваша система зависает от других задач, требующих большого объема памяти, таких как «создание очень большого графика из очень сложной диаграммы UML». Это абсолютно замедлит вашу систему, поскольку она генерирует график, так что это вряд ли удивительно.

Похоже, именно так должна вести себя ваша система. Либо это, либо я что-то здесь упускаю.

Кстати, статистика жесткого диска не имеет значения, когда ваша система перестает отвечать на запросы, так как нехватка памяти почти всегда является причиной.

Зак Санчес
источник
1
«Это абсолютно замедлит работу вашей системы» - да, это ожидаемо, но не ожидается неконтролируемый сеанс X (т. Е. Результат зависания системы), где я не вижу движения курсора мыши.
Кайс
1
Это на самом деле ожидалось, описанное вами поведение - именно то, что происходит, когда я использую слишком много оперативной памяти в моей системе. У меня даже система забилась до такой степени, что я не мог переключиться на текстовый терминал, и у меня вдвое больше оперативной памяти, чем у вас. Если вы когда-либо сталкивались с ситуацией такого типа, когда вы не можете использовать свой сеанс X, вы должны переключиться на текстовый терминал и уничтожить процессы, нарушающие работу. Если это не удастся, вам придется сделать полную перезагрузку. Самое лучшее, что я могу вам сказать.
Зак Санчес
1
@Kais macOS также становится вялым в ситуациях с нехваткой памяти. У системы действительно нет возможности разумно решить, какая память ей абсолютно необходимо хранить в оперативной памяти, поэтому переключение между приложениями будет происходить как сумасшедший, вплоть до того момента, когда пользовательский интерфейс перестанет отвечать на запросы.
Кусалананда
5
да, дело не в том, что нет более эффективных способов обеспечить адаптацию пользовательского интерфейса «оконного менеджера». MS Research написала целую экспериментальную ОС по дизайну, которая запрещала пейджинг по запросу Подтверждение концепции: Запустите «оконный менеджер» в Midori, эмулируйте приложения Linux, включая swap. Итак, «оконный менеджер» останется отзывчивым, даже если приложения меняются местами. Как минимум, это может позволить вам надежно убить некоторые приложения для освобождения памяти. Linux не идеален. Переход Gnome с X11 на Wayland даже значительно ухудшил скорость отклика перегруженных систем.
Sourcejedi
2
Статистика HDD может иметь значение. Одной из возможных причин отсутствия ответа является сбой диска, который приводит к огромному отставанию ввода-вывода. Но я не вижу никаких доказательств того, что происходит в этом случае.
200_успех
4

Когда я прочитал заголовок, моей первой мыслью было «недостаточно ОЗУ», потому что я сам испытал именно эту проблему в Linux, 10+ минут безумного перебивания диска после открытия слишком большого количества вкладок браузера. Я согласен, это мрачно и нуждается в улучшении. Windows справляется с этой ситуацией намного лучше.

Некоторые предложения:

  • Добавьте апплет монитора памяти в системный трей, чтобы вы могли следить за ним.
  • В настройках Firefox установите «предел процесса обработки контента» на «1». Как показано в тексте под настройкой: «Дополнительные процессы содержимого могут повысить производительность при использовании нескольких вкладок, но также будут использовать больше памяти».
  • Удалите или замените все загруженные надстройки браузера. Сохраняйте свою блокировку рекламы, поскольку реклама потребляет больше памяти, чем любая блокирующая.
  • Исследуйте и, возможно, удалите любые другие программы, требующие памяти.

Однако единственное верное решение - купить больше оперативной памяти.

Мало того, что изобилие ОЗУ предотвратит возникновение этой катастрофы, но и позволит системе создать большой кэш файлов в ОЗУ, чего ваша система в настоящее время не может сделать, поскольку она работает так близко к пределу. Большой файловый кеш отнимет работу с жесткого диска и заставит почти все действия в системе работать быстрее. Это стоит того.

Boann
источник
Отличный ответ, большое спасибо. Но что касается «Дополнительные процессы содержимого могут улучшить производительность при использовании нескольких вкладок, но также будут использовать больше памяти». - Если я правильно понимаю, может ли Firefox открывать до 8 процессов на одной вкладке в соответствии с настройками по умолчанию?
Кайс
1
@ Kais Я думаю, что это 1 процесс на вкладку. В любом случае, если вы установите ограничение 1, это будет 1 общее количество процессов для всех вкладок, которые должны использовать меньше памяти.
Boann
Понял, еще раз спасибо.
Кайс
4

Вывод htop показывает, что ваша потребность в оперативной памяти выше, чем ее емкость (общий объем оперативной памяти + SWAP). Поэтому первое, что нужно сделать, - это уменьшить использование ОЗУ или увеличить его доступность.

Обратите внимание, что современные версии Firefox чрезвычайно ресурсоемки из-за способа, которым окна / вкладки предоставляют процесс и пространство памяти. Идея состояла в том, чтобы избежать сбоя вкладок, ставящих весь браузер на колени. Оно того стоит? Кто может сказать ... В любом случае, у меня была похожая проблема из-за вышеизложенного, поскольку моя материнская плата Pentium 4 поддерживает только 2 ГБ ОЗУ. Чтобы избежать возможных сбоев из-за нехватки памяти, я добавил ~ 800M пространства подкачки на запасном SSD, очевидно, с намерением использовать его как можно меньше. Я добился этого, изменив настройку, известную как swappiness, которая определяет, насколько сильно ядро ​​хочет выгружать страницы памяти. Некоторые полезные команды следующие.

Проверьте текущую перестановку: cat /proc/sys/vm/swappiness

Это может дать вам результат около 60, что достаточно для максимальной производительности в системах с меньшей нагрузкой. Для вас, очевидно, это работает неэффективно, поэтому вы можете изменить настройку с помощью такой команды, как sysctl vm.swappiness=1изменение настройки во время работы системы.

Чтобы сохранить эти изменения, вам нужно поискать файл /etc/sysctl.conf. В этом файле измените значение или добавьте строку vm.swappiness=1.

Имейте в виду, это не решение в вашем случае, но должно сделать обходной путь.

кредиты /ubuntu/103915/how-do-i-configure-swappiness

Источник ответа выше, включает дальнейшие пояснения. Я нашел этот пост очень полезным в моем случае.

Мистер донутц
источник
Спасибо за ваш ответ. Это звучит как хорошая рекомендация для конфигурации ВМ.
Кайс
2

Некоторое превосходное обсуждение того, как проблема вызывается, продолжается и растет. Мне нравится опережать проблемы, с которыми вы сталкиваетесь, бросая оборудование на первоначальный дизайн компьютера и / или обновляя существующую реализацию. Ты можешь,

  • добавить оперативную память (32 ГБ отлично работает для многих установок)

  • замените жесткий диск на SSD

  • добавить SSD (твердотельный накопитель) для подкачки

  • создать раздел подкачки в ОЗУ (с 32 или более ГБ ОЗУ)

  • получить более быстрый HDD

  • перейти к системе с более быстрой обработкой и более широкой / быстрой архитектурой шины.

Некоторые из этих аппаратных обновлений / замен могут стоить менее 100 долларов США. Они не относятся ни к Linux, ни к конкретным программным реализациям, но используемое вами оборудование не соответствует вашим задачам.

Старый дядя Хо
источник
1
Очень полезный ответ, спасибо за указание на рекомендации по замене оборудования.
Кайс
1
Надеюсь, это поможет. Не знаете, какой тип компьютера или конкретного оборудования, так что это общие шаги в порядке наиболее вероятного улучшения. Любое или все поможет вам замедлить работу вашего компьютера, что, вероятно, связано с перегрузкой кеша, подкачкой, а также для более быстрого и меньшего числа операций чтения / записи на диск
Старый дядя Хо
6
Большинство из них являются хорошими предложениями, но переключение на ОЗУ в принципе бесполезно, если вы не используете zram или zswap для сжатия сжатых данных в ОЗУ - они того стоят, но переключение на несжатый виртуальный диск просто создает столько же нагрузки на ОЗУ, сколько и освобождает ( на самом деле, очень немного больше из-за накладных расходов).
Cas
Я не уверен, почему кто-то может переключиться на RAM, кроме как при сжатии, которое кажется отличной идеей для рабочих нагрузок с высокой оперативной памятью / низкой загрузкой процессора.
Питер - Восстановить Монику
1
@bain: как это когда - либо лучше иметь страниц выгружена на RAM против прогноза по- прежнему отображается? Они по-прежнему используют столько же страниц физической памяти, если вы не используете сжатие. Вот где ценность. Единственная разница - больше бухгалтерии, но, возможно, более чистые аппаратные таблицы страниц. Для памяти, запускаемой только при запуске, которая в основном игнорирует отображение, например, функции / данные, которые затрагиваются только во время запуска, лучше подкачка на диск, потому что она не использует пространство DRAM. Для фоновых демонов, которые не используются в интерактивном режиме, задержка не важна, поэтому снова происходит замена диска.
Питер Кордес
2

Обычно это «просто» X11, который становится непригодным для использования. Чтобы получить нажатие клавиши с клавиатуры на программу и показать что-либо на экране, необходимо запустить код в нескольких различных процессах. (X-сервер, чтобы получить нажатие клавиши от ядра, xterm или его эквивалент, получает событие и решает что-то нарисовать, затем отправляет сообщение на X-сервер, чтобы нарисовать глиф из шрифта.)

Если просто навести указатель мыши на окно с веб-браузером, показывающим страницу с кучей дерьма Javascript, можно получить кучу сообщений для кучки процессов, и все они заставят эти процессы проснуться и прикоснуться к куче данных. Предположительно, включая кучу «кэшированных» несжатых растровых изображений. Так что это, скорее всего, выселит больше вещей, которые скоро понадобятся.

Ctrl + Alt + F2 для переключения на другую виртуальную консоль обычно позволяет войти в систему и запускать команды оболочки с задержкой всего в пару секунд, когда что-то вызывает перестановку свопинга. Это просто bash; ядро Linux не может быть заменено, и в нем есть весь
код VT и клавиатура <-> TTY.


Чтобы избежать замедления, когда вы на самом деле не бьетесь, может помочь уменьшение «перестановки». Например, я установил /proc/sys/vm/swappinessпеременную 6на свой рабочий стол с 16 ГБ ОЗУ и разделом подкачки 2 ГБ на твердотельный накопитель NVMe. Вы можете прочитать больше о настройке интерактивной задержки (в отличие от пропускной способности сервера); любой гид упомянет, что настраивается.

Но если у вас вообще есть своп, Linux будет использовать его до вызова OOM killer. Сохраняйте размер раздела подкачки небольшим , достаточно большим, чтобы Linux выкладывал на него действительно устаревшее дерьмо, которое обычно долго не используется. (например, утечки памяти!)

У меня не было проблем с переполнением свопа. Современный Linux прекрасно справляется с ограниченным пространством подкачки. Хром (который я использую вместо Firefox) иногда замедляется, когда открыты десятки вкладок переполнения стека, но The Great Suspender - отличное дополнение для выгрузки вкладок, когда вы их не используете. Я думаю, что это экономит значительную оперативную память для меня, хотя он будет выгружать только те вкладки, где вы ничего не набрали в текстовом поле. Это также может быть доступно для Firefox.


Как и предполагали другие, 16 ГБ ОЗУ действительно хороши для интерактивного использования с Linux. Цены на DRAM в настоящее время относительно низкие ; после всплеска 1,5 года назад, они в основном снова снизились.

Питер Кордес
источник
Отличный ответ, спасибо большое. Но в отношении «куча дерьма в Javascript может привести к куче сообщений для нескольких процессов, которые заставляют эти процессы просыпаться и трогать кучу данных» - мне интересно, что это за процессы, они Firefox дочерние процессы?
Кайс
@Kais: оконный менеджер, веб-браузер, X-сервер, возможно, другие X-клиенты на более сложном рабочем столе. И любые другие процессы, за окнами которых колеблется ваша мышь (именно об этом я и думал, когда писал это предложение). например, в KDE панель задач - это отдельный процесс ( plasma) из kwinоконного менеджера.
Питер Кордес
Я использую LXDE, так что в моем случае только Openbox и сервер XOrg являются процессами, которые пробуждаются? Кроме того, какие сообщения передаются им?
Кайс
@Kais: сообщения протокола X11 через сокет домена unix. Попробуйте запустить xevкогда-нибудь, чтобы увидеть, какие сообщения вы можете получить от перемещения мыши. Также попробуйте strace xevувидеть системные вызовы, которые связаны со стороны клиента.
Питер Кордес
Ясно спасибо. Когда я запускаю xevкоманду, я получаю сообщения, только переключаясь в разные окна и нажимая на них, но это не тот случай, когда я просто перемещаюсь по мышке.
Кайс
-2

Что может заставить Linux не отвечать на запросы при просмотре определенных веб-сайтов в течение нескольких минут?

Вы не используете Linux правильно. Что становится особенно заметно на ресурсных машинах. Вам не нужно больше оперативной памяти или более быстрый процессор.

Задний план:

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

Чтобы «исправить» вашу проблему:

Оставьте непользовательские программы в покое, но начните изменять приоритеты (хорошие уровни) ваших пользовательских программ, чтобы они не вызывали у вас проблем. Отредактируйте то, что запускает ваши программы, чтобы включить хорошие уровни, переходя от обычно не проблема, к худшему нарушителю.

Примеры из реального мира:

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}

Ваш WorstOffender по-прежнему перестает отвечать на запросы в течение нескольких минут, что буквально является проблемой «лучше купить коробку», но теперь это не приведет к тому, что вся ваша ОС (Linux) и все остальное, что у вас работает, также перестанут отвечать на запросы.

Майкл
источник
2
Я десятилетиями работал с Linux как с большим количеством серверов, так и с собственной рабочей станцией (часто с очень ограниченными настройками виртуальных машин), и мне ни разу не приходилось исправлять проблему производительности, связанную с ОЗУ nice -n. «Вам не нужно больше оперативной памяти» - ему, безусловно, нужно больше оперативной памяти; или может использовать, ulimitчтобы жестко ограничить худших нарушителей, чтобы его существующая оперативная память снова была достаточной. «Вы не используете Linux правильно». полностью выключен.
Anoe
И я работал с установками Linux GUI на оборудовании с ограниченными ресурсами в течение последних 22 лет, и «хорошо» работает над решением «держать Linux без ответа на минуты».
Майкл,
Я не отрицаю, что это работает; Я просто говорю , что поставив его вперед , как на «правильный» способ работы с Linux не может быть лучше всего.
AnoE