Как вы справляетесь с неотзывчивыми скриптами браузера?

Как вы справляетесь с неотзывчивыми скриптами браузера?

Когда мой компьютер зависает, обычно очень легко решить проблему, зайдя в терминал и запустив top, чтобы выяснить, что съедает память, и убить этот процесс. Иногда это может быть сложно, когда он сильно завис, мне приходится нажимать CTRL+ ALT+ F1, чтобы попасть в терминал. Также удобно иметь настройку сочетания клавиш для запуска xkill, чтобы я мог убивать приложения с графическим интерфейсом, которые, как я знаю, его зависают.

С чем я не понял, как бороться, даже после многих лет с этой проблемой, так это с этими неотзывчивыми скриптами браузера. Иногда мой компьютер зависает так сильно, что я не могу двигать указателем мыши, и в конце концов он размораживается, и я вижу, что в одном из браузеров (раньше всегда был Firefox, в последнее время Chrome) появляется всплывающее окно, сообщающее, что скрипт javascript не отвечает. Он дает мне возможность завершить его, но нажатие кнопки завершения, похоже, никогда не решает проблему.

Как вы справляетесь с этой проблемой? А как вы вообще справляетесь с проблемами перегрузки памяти? Раньше я просто нажимал CTRL+ ALT+ T, запускал top и смотрел, какая программа использует больше всего памяти, а затем убивал ее, но это много шагов, и когда ваш компьютер завис, один шаг может занять много времени. Поэтому я ищу лучшие способы, например, настроить killswitch, чтобы сделать это за один шаг, или настроить демона, который будет убивать любые программы, которые собираются заморозить машину.

И какой лучший способ узнать, какая программа вызывает проблему? top не всегда легко увидеть, потому что иногда top не показывает программ, потребляющих слишком много ресурсов процессора, но если я прокрутю вниз, то увижу, что запущено около 50 экземпляров этой программы, так что было бы намного лучше, если бы я мог видеть общее использование процессора программой. Firefox и Chrome — два основных виновника, иногда sublime-text-3 (может быть, это из-за слишком большого количества открытых вкладок?).

Итак, я нашел эту команду:

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head

Что дает нам следующий список на данный момент:

  PID  PPID CMD                         %MEM %CPU
 6896   968 /opt/google/chrome/chrome - 13.1  2.7
27334  4769 /usr/lib/firefox/firefox     6.6 13.0
 5607  4769 /usr/bin/compiz              4.7 44.7
26381 26363 /usr/lib/libreoffice/progra  2.7  0.0
  953  4769 /opt/google/chrome/chrome h  2.0  3.0
 2777  2457 /usr/lib/xorg/Xorg -core :0  1.8 29.5
 6980  4769 /usr/lib/x86_64-linux-gnu/z  1.6  0.0
 8180  8167 mono /usr/lib/AirVPN/AirVPN  1.6  2.1
 1096   968 /opt/google/chrome/chrome -  1.4  0.1

Мой компьютер сейчас не завис, так что все в порядке, но сам Firefox зависает, когда я пытаюсь его использовать. Я обычно держу открытыми множество вкладок, поэтому я вижу так много экземпляров Chrome и Firefox, когда запускаю Top?

Я вижу, что htop дает гораздо больше опций, чем top, так что, вероятно, это лучший инструмент для диагностики проблемы. Есть несколько вещей, которые я не понимаю во всем этом, во-первых, что важнее %CPU или %MEM, когда дело касается регулярного зависания вашего компьютера. htop позволяет вам сортировать по любому из них, вот что он показывает мне, когда я сортирую по использованию памяти:введите описание изображения здесь

и вот что я получаю, когда сортирую по загрузке ЦП:введите описание изображения здесь

Итак, как я увидел, запустив ps, firefox и chrome занимают большую часть памяти, а compiz занимает большую часть процессора. Есть ли другие важные факторы, на которые следует обратить внимание, когда дело доходит до размораживания вашей системы? Например, влияет ли длительность выполнения процесса, я вижу, что compiz работает дольше, чем что-либо еще:введите описание изображения здесь

Что касается аварийного выключателя, я нашел вот такой, написанный кем-то другим:

while [ 1 ]; do 
    echo
    echo checking for run-away process ...

    CPU_USAGE=$(uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g")
    CPU_USAGE_THRESHOLD=300
    PROCESS=$(ps aux r)
    TOPPROCESS=$(ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | grep -v PID | head -n 1)

    if [ $CPU_USAGE -gt $CPU_USAGE_THRESHOLD ]; then
        kill -9 $(ps -eo pid --sort=-%mem | grep -v PID | head -n 1)

        echo "High memory usage process killed $TOPPROCESS\n"
        echo "Load average was at $CPU_USAGE\n"
    else
        echo 'CPU Load Back to Normal'
        exit 0
    fi
done

Но я не уверен на 100%, как это работает или что это делает. Когда я запускаю:

uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g"

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

Это не идентификаторы процессов, которые я вижу ни в одном из приложений, отображаемых htop, использующих память.

Запустив uptime отдельно, я получаю следующее:

17:49:53 up 1 day, 11:09,  2 users,  load average: 3.16, 2.45, 2.03

Итак, моя система работает уже 17,49 часов. Я не знаю, что означает средняя загрузка в терминах моего компьютера. Недавно мне этот компьютер дал брат, так как у него в офисе был неиспользованный компьютер, когда я проверяю характеристики:

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 26
Model name:            Intel(R) Core(TM) i7 CPU         940  @ 2.93GHz
Stepping:              4
CPU MHz:               1867.000
CPU max MHz:           2934.0000
CPU min MHz:           1600.0000
BogoMIPS:              5852.21
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-7

Я в шоке, это зверь, 8 процессоров. И оперативка:

free -lm
              total        used        free      shared  buff/cache   available
Mem:          12005        7154         311         531        4539        3996
Low:          12005       11694         311
High:             0           0           0
Swap:         30516        1002       29513

12 Гб, боже мой, я понятия не имел. У моего старого ноутбука было 2 Гб. Так что загадка, почему он сейчас так зависает.

Итак, мне интересно:

1.) Каков наилучший способ выяснить причину замедления и зависания вашей системы?

2.) Как справиться с этой конкретной ситуацией с неотвечающим скриптом, не убивая сам браузер? Я использую плагины вроде NoScript, но часто мне нужно включить javascript. Также некоторые плагины тоже используют скрипты. Почему их уничтожение никогда ничего не решает? Может быть, потому что их невозможно уничтожить таким образом? Можно ли написать скрипт, который будет искать в ваших браузерах и находить вкладку, на которой запущена страница с неотвечающим скриптом, а затем закрывать и перезапускать вкладку? Или, что еще лучше, просто уничтожать сам скрипт таким образом, чтобы компьютер снова мог нормально работать? Я не знаю, почему неотвечающий скрипт замораживает всю мою систему, я предполагаю, что браузер съедает слишком много памяти, когда пытается запустить аварийный скрипт.

2.) Какой лучший способ разморозить систему, особенно в худших случаях, когда вы не можете двигать указатель мыши? Будет ли комбинация клавиш, подключенная к killswitch, подходящим вариантом?

3.) Для создания kill switch, как бы вы это сделали? Что должен делать скрипт? Должен ли он выяснить, какая программа использует больше всего памяти и/или ЦП, и завершить ее. Я бы предпочел более сложный подход, потому что в определенных случаях приложение, которое использует больше всего памяти или ЦП, может быть чем-то, что мне нужно держать открытым, например, если я работаю в Firefox, и завершение его работы может привести к потере данных, которые я пишу. Я могу предоставить скрипту список приложений, которые менее важны, чтобы он мог пройти по этому списку и оценить, потребляют ли они достаточно памяти, чтобы их стоило завершить.

4.) Поможет ли увеличение размера раздела SWAP?

решение1

Ваше узкое место — это то, что отображается в диспетчере задач, например htop. В этом случае это, похоже, ОЗУ, переполненная вкладками Chrome. К счастью,Chrome поставляется с собственным менеджером задачкоторый позволяет вам увидеть и закрыть вкладку, которая занимает много оперативной памяти:

Диспетчер задач Google Chrome

Расширения Chrome, такие какВеликий ПодтяжкаиЛенивые вкладкитакже помогает экономить оперативную память.

Если Chrome не является виновником и вам нужна быстро реагирующая система, см.:Спешите! Ubuntu быстро исчерпывает оперативную память, и мой компьютер движется к полному зависанию! Какая команда меня спасет?

Связанный контент