У меня есть старый почтовый сервер Slackware 9.0 на виртуальной машине на Linode.com. На нем размещено около 130 ГБ почты в формате Maildir на разделенных, отдельных файловых системах Ext3 (самый большой из них - 92 ГБ). Я планирую обновление сервера (полностью новая установка с последней версией Slackware) в течение 2 недель или около того, но это нетривиально, поэтому я хочу решить текущую проблему до того, как ситуация ухудшится.
За последние несколько месяцев у различных коммунальных предприятий начались сбои в работе, и некоторые процессы время от времени прекращали работу. Основными приложениями, работающими на сервере, являются qpsmtpd, qmail, Dovecot, ClamAV и bogofilter, и сервер обычно имеет очень низкую нагрузку на систему, хотя около 300 активных пользователей IMAP с примерно 1 почтой в секунду входят или выходят из системы.
Виртуальная машина была перемещена на 8GB Linode около 3 недель назад, и проблема, похоже, усугубилась. У меня есть подозрение, что проблема связана с запуском 32-разрядной ОС с большим объемом памяти, чем может использовать ОС. У меня ограниченный опыт работы с ядром и тем, как оно обрабатывает память.
ClamAV перезапускается 2–3 раза в день, а qpsmptpd (написанный на Perl, но предварительно загруженный) каждые несколько часов.
Кроме того, запуск ls в Maildirs с большим количеством сообщений (файлов) segfaults, с примером журнала strace, который можно найти здесь:
Больше информации:
Ядро Linux = 3.9.3-x86
Память = 8 ГБ
$ free
total used free shared buffers cached
Mem: 8286016 3672400 4613616 0 266632 2442144
-/+ buffers/cache: 963624 7322392
Swap: 1048572 0 1048572
Я был бы очень признателен за некоторые советы и с удовольствием предоставлю более подробную информацию для диагностики.
Вот где это остановилось:
mremap(0xb7504000, 3075489792, 745472, MREMAP_MAYMOVE) = -1 EINVAL (Invalid argument)
Посмотрим, как работает mremap:
mremap(old_address, old_size, new_size, int flags);
И описание ошибки EINVAL:
EINVAL An invalid argument was given. Possible causes are:
old_address was not page aligned; a value other than
MREMAP_MAYMOVE or MREMAP_FIXED was specified in flags;
new_size was zero; new_size or new_address was invalid; or the
new address range specified by new_address and new_size
overlapped the old address range specified by old_address and
old_size; or MREMAP_FIXED was specified without also
specifying MREMAP_MAYMOVE.
Похоже на ошибку SW. Обходной путь - использовать 64-разрядную ОС для расширения адресации виртуальной памяти.
Какую версию clamav вы используете?