Скажем, у вас есть 512 RAM + 1GB Swap memory. Теоретически, ваш ЦП имеет доступ к 1,5 ГБ виртуальной памяти.
Теперь, в течение некоторого времени все работает нормально в пределах 1,5 ГБ общей памяти. Но внезапно (или постепенно) ваша система начала потреблять все больше и больше памяти, и она достигла примерно 95% от общего объема используемой памяти.
Теперь скажите, что любой процесс запросил у ядра большой кусок памяти. Ядро проверит доступную память и обнаружит, что нет способа выделить вашему процессу больше памяти. Поэтому он попытается освободить память, вызывающую / вызывающую OOMKiller ( http://linux-mm.org/OOM ).
У OOMKiller есть собственный алгоритм оценки ранга для каждого процесса. Как правило, какой процесс использует больше памяти, он становится жертвой смерти.
Обычно в каталоге / var / log. Либо /var/log/kern.log, либо / var / log / dmesg
Надеюсь, это поможет вам.
В начале Вы захотите обновить списки пакета. Вы могли просто использовать apt-get update
, но так как Вы только хотите официальные источники, это брало бы излишне долго. Для ускорения вещей немного используйте следующее:
apt-get update -o Dir::Etc::sourcelist='sources.list' \
-o Dir::Etc::sourceparts='-' -o APT::Get::List-Cleanup='0'
Теперь, когда Ваши списки пакета актуальны, необходимо получить URL отдельных пакетов. Следующий код одолжен от способно-быстрый , Вы, возможно, должны были бы скорректировать его к своим потребностям.
DLLIST="/tmp/packages.list"
# Add header to overwrite file:
echo "# package download list: $(date)" > "$DLLIST"
# We use --print-uris to get the uris of the packages instead of downloading them
for urimd5 in $(apt-get -y --print-uris upgrade |
egrep "^'(http(s|)|(s|)ftp)://[^']+'.+ MD5Sum:\S+\s*$" |
sed "s/^'\(.\+\)'.*MD5Sum:\(\S\+\)\s*$/\1::MD5Sum:\2/"); do
uri="${urimd5%::MD5Sum:*}"
checksum="${urimd5#*::MD5Sum:}"
# Here we are checking if the package comes from the official sources,
# only then it's written to the list:
if [[ $uri == *ubuntu.com* ]]; then
echo "$(get_mirrors "$uri")" >> "$DLLIST"
echo " checksum=md5=$checksum" >> "$DLLIST"
# Here you can specify where the files go.
# Change path to the location where you want the packages to be downloaded.
echo " out=/path/$(basename $uri)" >> "$DLLIST"
fi
done
Теперь у Вас есть список URL в файлы пакета, которые Вы хотите загрузить в /tmp/packages.list
. Для загрузки пакетов мы используем aria2c
, который можно установить из репозиториев по умолчанию путем выполнения sudo apt-get install aria2
. Здесь мы идем:
aria2c -i $DLLIST
Просто соединенное вышеупомянутое в Вашем сценарии. Это должно будет быть выполнено как корень, конечно.