Назад | Перейти на главную страницу

Множественные ошибки сегментации на хосте Linux

У меня есть старый почтовый сервер 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, который можно найти здесь:

http://pastie.org/8127239

Больше информации:

Ядро 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 вы используете?