Недостаток ОЗУ в Debian / Ubuntu приводит к полному зависанию с перегрузкой

6

У меня были серьезные проблемы с производительностью, как в Ubuntu 11.10, так и в Debian Wheezy:

Если один процесс использует много оперативной памяти (скажем, 3700 МБ из 3900 МБ), система быстро становится непригодной для использования с постоянной перегрузкой диска. Это доходит до того, что оконный менеджер не отвечает, и уничтожение нарушающего процесса занимает несколько минут. (На самом деле добраться до терминала, выдать pkill, подождать немного дольше, пока сигнал действительно не пройдет)

Эта проблема возникает, даже если раздел подкачки полностью отключен.

При исследовании iotop похоже, что большая часть активности на диске - чтение с диска, переход к таким процессам, как Google Chrome и средство визуализации X Window. Однако это только ограниченная информация, поскольку iotop больше не обновляется, пока система находится в режиме полной загрузки.


Мой вопрос:

1) что вызывает массивное чтение диска? 2) как я могу предотвратить невозможность использования системы?

YenTheFirst
источник
Не отключайте своп. Это заставит систему хранить все грязные страницы в памяти, создавая проблему много хуже. Расскажите нам больше о вашей внешней проблеме. Почему процесс использует так много памяти? Это потому что оно сломано? Это вредоносно?
David Schwartz
1
Я столкнулся с проблемой несколькими разными способами. иногда открытие слишком большого количества вкладок chrome вызовет его, иногда попытка кешировать 1M + структуры данных в скрипте python приведет к этому. Запуск make с -j, равным 6 или 7, на что-то вроде Boost libs довольно надёжно пожирает память, а затем заставляет меня биться.
YenTheFirst

Ответы:

4

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

К сожалению, единственное полное решение этой проблемы - добавить больше оперативной памяти. Модули памяти относительно недороги; если вы постоянно достигаете пределов доступной физической памяти, вам следует добавить память на ваш компьютер.

Редактировать: Поскольку в вашей системе недостаточно физической памяти, программы должны чаще читать с жесткого диска, поскольку свободное место в ОЗУ обычно используется для хранения файлов, к которым часто или недавно обращались, чтобы уменьшить чтение с диска. При недостатке свободной оперативной памяти можно кэшировать меньше файлов, что снижает производительность. Это особенно актуально для таких приложений, как Chrome, которые требуют значительных ресурсов памяти и операций ввода-вывода. Еще раз, добавление ОЗУ увеличит производительность. Для получения дополнительной информации о кэшировании см. Статья в википедии ,

bwDraco
источник
1
Проблема возникает, даже если я полностью отключить раздел подкачки. Кроме того, я не думаю, что просто больше ОЗУ поможет, так как проблема обычно возникает с вырожденными программами (некоторые из которых написаны мной), использующими произвольные объемы памяти.
YenTheFirst
Некоторые системные процессы могут блокировать обычные операции ввода-вывода в таких приложениях, как Chrome. В этом случае кажется, что OOM Killer пытается уничтожить процессы, используя ненормальное количество памяти.
bwDraco
2
Извините, я не совсем понимаю этот комментарий. Ввод / вывод не блокируется - Chrome, X и другие случайные процессы много читают на диске. Убийца нехватки памяти не убивает ни одного процесса, так как память на самом деле не полный Просто почти полный. Если бы ООМ по крайней мере убил бы оскорбительный процесс, это было бы не так плохо.
YenTheFirst
1
Этот ответ наиболее четко описывает, что происходит, поэтому я принимаю это. Есть идеи по 2)? Простое добавление ОЗУ не всегда возможно (особенно если вы исчерпали объем ОЗУ на ноутбуке). В жизни случаются ситуации с нехваткой памяти. Как сделать так, чтобы Linux не работал в таких ситуациях? то есть, если у меня есть только 200 МБ, я не уход Что касается рендеринга Chrome, я просто хочу переключиться на терминал и убить некоторые процессы.
YenTheFirst
1
Вы можете использовать флэш-накопитель USB и выделить его для подкачки. Купите высокоскоростную флешку (не менее 4 ГБ), создайте на ней раздел подкачки и активируйте его. Это похоже на использование Windows ReadyBoost в системе Windows Vista или Windows 7.
bwDraco
2

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

#!/bin/bash
ulimit -v 1048576
/usr/bin/greedyapp

Ваше приложение сможет получить только 1 ГБ виртуальной памяти до того, как возникнут ошибки нехватки памяти. Я пробовал это с браузерами, и это эффективно защитит вашу оперативную память, не убивая браузер сразу, когда достигнет своего предела. Но приложение может вести себя странно (например, перестать отвечать на вводимые пользователем данные), поэтому вы можете сначала попробовать его с очень строгим ограничением, чтобы увидеть, что оно делает в нехватке памяти. Тем не менее, намного лучше, чем эти HD-треши.

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

dmcontador
источник
1

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

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

Gerald
источник