Я видел много вопросов, связанных с памятью об Ubuntu, и, честно говоря, я действительно не могу понять, как все еще можно бороться с такими проблемами.
У меня 8 ГБ ОЗУ. Я экспериментировал с / без свопа без особых различий.
Проблема в том, что мне часто (до одного раза в день) приходится сильно перезагружать свой ноутбук, потому что он полностью завис (ожидание не помогает). Скорее всего, это связано с использованием оперативной памяти моих веб-браузеров. Судя по всему, на ноутбуке не запущен процесс с высокими требованиями.
Чтобы экспериментировать / воспроизводить:
Мои наблюдения таковы:
MemoryError
. Я не понимаю:
Я знаю, что для подкачки требуется процессор, поэтому он может зависнуть на некоторое время. Вот почему я отключил его, поэтому думал, что ядро быстро решит убить процесс.
Я не могу понять, как такое простое использование (с использованием браузеров) могло быть проблемой с недавней ОС, использующей 8 ГБ ОЗУ. Нужно ли настраивать мою систему, чтобы она была надежной?
Спасибо за любые советы / объяснения / уловки, которые помогут.
Я решил подобную проблему со сценарием наблюдателя памяти/CPU и просто имею его, уничтожают любые процессы, что это видит, что имеют больше, чем поршень x или y память для дольше, чем t секунды. Это не решает проблему резервирования ЦП/мадам для ОС, но это - обходное решение, пока Вы не находите лучший ответ (И когда Вы делаете, совместно используете его со мной, потому что я получил сюда поиск того же самого),
#!/bin/bash
# Kill POS if we're doing stupid shit.
HOG_COUNTER=0
while true; do
# This is pulling CPU, change the awk column from 9 to something
# that you want to check against.
HOG=$(top -b -n 1 | grep pos2 | awk '$9 > 90 {print $1}')
# If the hog variable is not empty, add some counter info - we don't
# want to catch periodic spikes, we want to catch consistent offenders.
if [ ! -z "$HOG" ]; then
counter_time=$(date)
HOG_COUNTER=$(expr ${HOG_COUNTER} + 1)
echo "$counter_time - Found a hog: $HOG - ${HOG_COUNTER} counters." >> high_mem_kill_log
else
HOG_COUNTER=0
fi
# If we have more than 2 counters (3 or more) then we kill the process
# that's doing it.
if [ $HOG_COUNTER -gt 2 ]; then
kill_time=$(date)
echo "$kill_time - Found a hog: $HOG. $HOG_COUNTER counters. Killing $HOG." >> high_mem_kill_log
kill $HOG
fi
sleep 30s
done