Постфиксная производительность

11

Запуск postfix в Ubuntu, отправка большого количества писем (~ 1 миллион сообщений) в день. нагрузки чрезвычайно высоки, но не сильно с точки зрения загрузки процессора и памяти. Кто-нибудь в похожей ситуации и знает, как устранить узкое место?

Вся почта на этом сервере является исходящей.

Я должен был предположить, что узким местом является диск.

Просто обновление, вот как выглядит iostat:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.12   99.88    0.00    0.00

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    12.38    0.00    2.48     0.00   118.81    48.00     0.00    0.00   0.00   0.00
sdb               1.49    22.28   72.28   42.57   629.70  1041.58    14.55   135.56  834.31   8.71 100.00

Соответствуют ли эти цифры производительности, которую можно ожидать от одного диска?

SDB посвящен постфиксу.

Я думаю, что это перетасовывание очереди, от входящих-> активный-> отложенный

Больше деталей из вопросов:

Сервер: Четырехъядерный процессор Xeon® E5405 @ 2.00GH с оперативной памятью 4 ГБ

Средняя загрузка: 464,88, 489,11, 483,91, 4 ядра. но использование памяти и процессор минимален

Постфиксы между 16 - 32

Брайан Дж.
источник
с нагрузкой 400+ я удивлен тем, что системы делают что-либо, если вы отправляете OUT 1 миллион сообщений в день через одну систему, я бы определенно предложил улучшить ваш дисковый ввод-вывод (Ramdisk, Raid) и, вероятно, перейти к более кластерному варианту, Я уверен, что 400 загружает движущуюся почту вашего сервера довольно медленно.
Grufftech
@Brian G: Вы можете пометить комментарий, но я не думаю, что вы можете удалить его. Я согласен с ним, хотя.
womble

Ответы:

9

Это может показаться немного сумасшедшим, но вы должны:

  1. Отключите ведение журнала до минимума, который вам нужен. Сделайте syslog только log mail.err или выше.
  2. Добавьте больше оперативной памяти. Да, Postfix не нуждается в этом, но дополнительная оперативная память означает дополнительный кеш страниц для ядра.
  3. Вы не упомянули, какая файловая система находится в / dev / sdb (что тоже имеет значение), но определенно переключитесь на нее noatime, что должно хотя бы немного снизить нагрузку.
  4. Посмотрите, насколько велик ваш / var / spool / postfix. Если он под парой концертов, подумайте о переносе его на виртуальный диск.
pjz
источник
Не мог бы сказать это лучше сам. Я также заметил, что sda и sdb без разделов могут вызывать некоторое замедление или, по крайней мере, неэффективное использование дисков в системе.
Grufftech
Неважно - я отсталый, похоже, это iostat -x, а не просто iostat. моя ошибка!
Grufftech
Не должно быть никаких причин пытаться уменьшить количество журналирования, если вы ведете логирование системного журнала асинхронно и (предпочтительно) журналы и спул на разных шпинделях. Удостоверьтесь, что вы не ведете подробных записей для нормальной работы.
Роб Чантер
4

Я должен не согласиться с теми, кто предложил использовать RAM-диск для "/ var / spool / postfix". Это означает, что вся ваша почтовая очередь будет храниться в оперативной памяти. Если ваш сервер выходит из строя или теряет питание, сообщения в очереди исчезают навсегда. Это очень плохо с точки зрения клиента / пользователя, потому что сообщение уже было успешно принято для доставки. Хуже того, ваш сервер не будет отправлять уведомление о том, что электронная почта отклонена или не может быть доставлена, потому что очередь будет пуста, когда сервер вернется.

Вместо этого я бы добавил столько быстрых дисков, сколько вы можете себе позволить; Я не могу точно оценить, сколько вам нужно с предоставленной информацией. Из вышеприведенного вывода «iostat» похоже, что вы делаете ~ 120 IOPS для 'sdb' (сумма r / s и w / s). Вы можете разумно оценить, что один диск SCSI или FC со скоростью 15 000 об / мин будет обрабатывать 150 IOPS. Я бы начал с 5 15000 об / мин дисков SCSI и приличного контроллера RAID. Установите его как RAID-10 на 4 накопителях с 1 горячим резервом. Я не уверен, что это полностью решит вашу проблему, но определенно не ухудшит ситуацию.


источник
2

Запустите postfix под каким-то профилировщиком (gprof?) Или посмотрите в логах. Postfix регистрирует много информации о времени, которая может сказать вам, где задержка. Общие места для поиска:

  1. Производительность диска. Возможно, настало время для RAID-10 для вашей очереди.
  2. Любой вид сетевого ввода-вывода в сообщениях. Черные списки DNS? SAV?
  3. Milters и другие фильтры, которые вы установили.
  4. Проверка подлинности и UID выполняется по сети или процессу (ldap, sql).
  5. не использовать прокси: для медленных карт (как выше)
Билл Вайс
источник
использовать что-то вроде, iostat -x -v 3чтобы проверить использование диска.
Мошен
с iostat -x, его определенно производительность диска, lol, 100% Util на диске.
Grufftech
Выйдите и купите 4 диска SAS 15k, если ваша машина их заберет, или 4 диска SATA Velociraptor, если нет SAS. RAID-10 их, монтируй как постфиксную очередь. Если это не сработает, посмотрите на твердотельные накопители Intel, но в этот момент ваш мир будет дорогостоящим занятием.
Билл Вайс
2

Миллион сообщений в день - около 11 в секунду, при условии, что пропускная способность постоянна. Postfix сам по себе должен обрабатывать как минимум на порядок больше, чем на серверном оборудовании начального уровня. Поэтому я подозреваю, что у вас есть больше, чем просто запуск постфикса, или очень неравномерно распределенные пики пропускной способности.

Ваша ситуация, безусловно, выглядит как сильно связанный с вводом / выводом сервер. Этого следует ожидать с MTA, который должен делать множество небольших записей, чтобы гарантировать, что он не потеряет почту.

Потратьте время на настройку ввода-вывода на обоих /var/spool/postfixи /var/log. Наилучшим практическим приемом для занятых постфиксных серверов является их разделение на разные шпиндели и обеспечение включения асинхронного ведения журнала. префикс имени файла журнала для вашего почтового журнала с дефисом в Linux.

mail.info                              -/var/log/mail.log

или похожие.

Если вы используете amavisd-new, убедитесь, что его рабочая область находится в файловой системе tmpfs. Мы обычно надеваем это /tmp/vscan/. Это безопасно, поскольку amavisd-new не возвращает ответ об окончании данных до тех пор, пока нисходящий (пост-фильтр) переход не примет сообщение.

Некоторые люди рекомендуют noatimeварианты монтирования для катушки с постфиксом. Это потенциально неразумно, поскольку postfix зависит от семантики файловой системы. Смотрите, например, http://archives.neohapsis.com/archives/postfix/2006-01/1916.html .

Роб Чантер
источник
1

Похоже, что ваша дисковая подсистема, по крайней мере, должна рассматриваться как часть проблемы. Из-за того, что postfix перемешивает файлы вокруг / var, я бы предложил поискать «tweak ext3 filesystem» (по крайней мере, установив noatime и writeback), чтобы увидеть, не можете ли вы повысить производительность на уровне файловой системы.

У меня есть два кластера серверов, которые удваивают нагрузку на DNS и исходящий SMTP для предназначенной для клиентов электронной почты и запускают 250 000 сообщений в день (2–10 тыс. / Час), при этом ничего не приближая к такому типу ввода-вывода.

Greeblesnort
источник
0

Похоже, горлышко бутылки производительности хранения для меня.

Iowait 99,88 говорит вам, что ваша система тратит много времени на ожидание вашего хранилища.

Я согласен с Биллом Вайсом. Вы должны взглянуть на настройки raid10 для очереди.

3dinfluence
источник
0

или начать с

vmstat 1

"iostat 1", предложенный moshen, тоже хорош

из твоей статистики явно быстрее дисковая подсистема будет неплохо. raid-10 на дисках 6-8 15k rpm, может быть, с некоторым кешем, парой гигабайт памяти на плате.

смонтировать каталог спула с параметрами noatime, nodiratime. подумайте о настройке или изменении вашей файловой системы для обработки большого количества маленьких [я предполагаю] файлов.

PQD
источник
0

Брайан

Вам действительно нужно получить более быстрый диск или, предпочтительно, перейти на рейд-решение. Что это за сервер?

Джеймс

Джеймс
источник
Четырехъядерный процессор Xeon® E5405 @ 2,00 ГГц 4 ГБ ОЗУ
Брайан Дж
0

Если вы используете amavis для фильтрации спама и вирусов, вам следует увеличить количество одновременных процессов amavis. В соответствии с вашими настройками вам может потребоваться увеличить как количество процессов smtp-amavis из postfix master.cf, так и соответствующий параметр в amavis.conf.

hayalci
источник
спасибо, но не работает амавис.
Брайан Дж
0

Сколько ядер в коробке и какова фактическая загрузка? Какова реальная скорость отправки сообщений?

Как и большинство, моя первая мысль - это диск, так что проверь это.

Однако причиной может быть использование сети, а также высокая нагрузка прерывания (плохая карта?), Поэтому проверьте это. Я обнаружил, что даже для скромного почтового сервера наличие быстрого кэширующего DNS-сервера (я неравнодушен к «несвязанному») в одном блоке помогает снизить задержки и нагрузку на сеть.

Джефф Фриц
источник
средняя нагрузка: 464,88, 489,11, 483,91, 4 ядра. но использование памяти и процессор минимален.
Брайан Дж
Уч. Сколько постфиксных проков у вас работает в любой момент времени? Возможно, уменьшение количества одновременно запущенных процессов немного уменьшит конфликты с дисками. Меньше процедур, но каждый может идти немного быстрее. Это или какой-то другой механизм регулирования Postfix, например, ограничение нагрузки до чего-то разумного.
Джефф Фриц
16-32 экземпляров постфикса.
Брайан Дж
3
Средняя нагрузка за 4хх не "чрезвычайно высока", это "мой сервер подключен" :)
Билл Вайс
0

когда вы выполняете 630 операций чтения и 1042 записи в секунду, я определенно предлагаю увеличить объем памяти в системе (чтобы лучше обрабатывать ОС и оперативную память), а затем сделать папку postfix виртуальным диском.

Также предложил бы поместить ваши почтовые журналы на их собственный раздел, если не на их собственный диск целиком.

grufftech
источник
0

Это не проблема ввода-вывода, это проблема конфигурации постфикса. Вы просите его сделать слишком много всего сразу и создаете узкое место для себя. Проверьте постфиксные настройки производительности риде и / или опубликовать main.cf , чтобы мы могли помочь.

toppledwagon
источник
0

Похоже, у вас есть хитрый диск. Ваш сервер выполняет только 72 запроса на чтение / сек и 42 записи / сек. Мой настольный жесткий диск Seagate 7200 об / мин может выполнять более 100 произвольных запросов чтения / записи в секунду и при этом справляться с этим.

Попробуйте установить катушку на sda и посмотрите, станет ли нагрузка лучше.

Но прежде, чем вы добавите больше денег на диск, сделайте следующее:

  1. Запустите qshape active, qshape deferred и qshape входящие и сообщите нам общее количество каждой команды.

    Необычно большое количество почты в отложенной очереди означает, что спаммер может использовать ваш почтовый сервер для передачи своего спама (например, отправка электронной почты на несуществующий домен, что заставит ваш постфикс повторять попытки снова и снова).

  2. Убедитесь, что ваш почтовый сервер не находится в черном списке ( http://www.mxtoolbox.com/blacklists.aspx )

  3. Проверьте время отклика DNS и запустите локальный кеш DNS.

    Почтовый сервер использует DNS довольно интенсивно. Do dig somedomain.com mx Run это через несколько различных хостов. Обычно время отклика должно быть менее 100 - 400 мс. Если вы получите более высокий отклик, ваш DNS может не работать хорошо. Попробуйте другой DNS (вы можете попробовать Google 8.8.8.8 или OpenDNS: 208.67.222.222)

  4. Проверьте свою сеть. (например, ifconfig) и посмотреть, сколько пакетов ошибок. Проверьте, насыщена ли ваша ссылка или имеет форму. Проверьте, не было ли большого количества тайм-аутов в почтовых журналах. Сделайте tcpdump и убедитесь, что пакеты не теряются и не передаются повторно.

  5. Можете ли вы сказать нам, реагирует ли консоль (например, когда вы набираете какую-то команду, как быстро система дает вам обратную связь)?

    Обычно проблема с сетью (например, DNS) приводит к стремительному росту нагрузки, но система все еще реагирует.

Рианто Вахьюди
источник