При попытке резервного копирования довольно большой папки (450 ГБ) на диск емкостью 2 ТБ, который находится на этом сервере, исключительно в качестве места назначения резервного копирования rdiff-backup
(версия 1.2.8 - последняя отмечена стабильный) вызвал панику ядра.
Система:
Linux giorgio 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux
Диски: 2 диска по 1 ТБ в режиме программного зеркала RAID, 1 диск по 2 ТБ только для резервного копирования.
У меня есть подозрение: память на сервере 2G RAM + 2G swap = 4G. Есть файлы размером до 16Гб. Возможно ли, что rdiff-backup
в какой-то момент загружает весь файл в память?
В любом случае паника ядра не должна была произойти (поскольку процесс rdiff был убит? Значит, память должна была снова стать доступной?), Поэтому я предполагаю, что мой вопрос состоит из двух частей: одна: о моих подозрениях, вторая: о паника ядра.
Между прочим, паника началась недавно, довольно много резервных копий уже было успешным - полных и инкрементных - и те файлы большого размера уже были там. Полагаю, виновато новое ядро Debian, а не rdiff-backup?
Раздел журнала во время паники http://pastebin.com/e9a5fQdh
Последнее на экране:
РЕДАКТИРОВАТЬ / Обновить: я просто попытался создать файл подкачки 20 ГБ (с dd из / dev / zero), и сервер снова отключился, никакой реакции на ping
.
Из журналов: похоже, что ядро убило некоторые процессы, включая тот, который, как я подозреваю, вызвал все это (rdiff-backup) - но говорит, что "заканчиваются убиваемые процессы". Кажется, убийство процессов не освободило память?
Он не убивал rdiff-backup, он должен был иметь oom_score_adj
составляет -1000.
Это вызвано ошибкой в sshd. Ошибка исправлена, но не будет доступна до следующего выпуска openssh 6.5.
sshd не может установить oom_score_adj новых оболочек, которые он создает, обратно в 0, если вы перезагрузите его, в результате чего все дочерние процессы, которые вы создаете через SSH (так что ваша оболочка bash и любые дочерние процессы, которые создают) имеют -1000 oom_score_adj
и впоследствии может забрать всю память, не убивая их.
Самый быстрый способ исправить это (при условии, что 7567 - это pid sshd, как в вашем случае): -
echo 0 >/proc/7567/oom_adj_score
Не перезагружайте sshd, перезапустите его, пока исправление не будет исправлено. (openssh 6.5 должен иметь это)
Об ошибке сообщается и исправляется здесь. https://bugzilla.mindrot.org/show_bug.cgi?id=2156