Почему вся моя система Ubuntu зависает на глючном JavaScript-коде в Firefox? - PullRequest
1 голос
/ 18 июня 2019

У меня странные проблемы в Ubuntu 18.04 и 19.04 (новая установка тоже), Firefox 64 - 66.0.3 (новая).Я пишу код JavaScript и проверяю его в своем браузере.Иногда я делаю ошибки вроде этого:

for(var i = 0; i < 100;){
   something_else();
}

, то есть бесконечные циклы.В прошлый раз это был new Regex(...).test() с неправильным регулярным выражением, которое, очевидно, вызвало бесконечный цикл ... Я должен быть осторожен, это правильно, но проблема в следующем:

Не только мой Firefox говорит что-то вроде:страница не в порядке, закройте это?но сама система не говорит что-то вроде «Этот Firefox не в порядке, убить его?»

Я получаю полную зависание системы без каких-либо шансов на восстановление.Все, что я могу сделать, это Alt + SysRq + REIUSB.Таким образом, отладка моего кода становится проблемой в 1978 году с несколькими перезагрузками, где неудача при сохранении кода означает его потерю.Для меня это звучит безумно.

Я несколько раз переустанавливал Ubuntu, переключался между 18.04 и 19.04, обновлял программное обеспечение, но все безрезультатно.Процессор кажется достаточно крутым, экран не мигает, других аппаратных проблем нет.

UPD: я также запустил sudo stress --cpu 4, чтобы проверить, что происходит при 100% загрузке.Система не зависает.

Итак, вопрос.Что я делаю неправильно?Почему моя ОС или Firefox не перехватывает эти зависания?

1 Ответ

1 голос
/ 18 июня 2019

Как и следовало ожидать, Firefox должен предложить вам остановить сценарий, когда он находится в бесконечном цикле, держась подальше от пользовательского интерфейса, и должна быть возможность убить процесс Firefox в любом случае. Если сценарий также использует увеличивающийся объем памяти, это может быть гораздо более серьезной проблемой. По моему опыту, Linux не очень хорошо справляется с условиями OOM, и особенно не в старых версиях ядра - например, в Ubuntu все еще может быть включен.

Полезным инструментом является SysRq + F (убедитесь, что он включен, проверив sysctl kernel.sysrq; значение 1 или установленный бит 6 - x & 64 ≠ 0 - означает, что это так), который запускает OOM killer вручную.

...