Мы пытаемся оптимизировать Dell PowerEdge 1850, Dual 3GHz procs, 3072MB RAM, работать с Postfix 2.8.4 и подписывать почту с помощью OpenDKIM 2.4.1.
iostat -x вывод:
avg-cpu: %user %nice %system %iowait %steal %idle
0.59 0.04 0.20 0.24 0.00 98.94
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 11.57 0.01 4.97 0.27 132.35 26.63 0.03 6.09 2.03 1.01
sda1 0.00 0.00 0.00 0.00 0.00 0.00 13.40 0.00 16.26 15.73 0.00
sda2 0.00 11.57 0.01 4.97 0.27 132.35 26.63 0.03 6.09 2.03 1.01
dm-0 0.00 0.00 0.01 16.54 0.27 132.35 8.01 0.11 6.55 0.61 1.01
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 3.42 0.44 0.00
Верхний выход:
top - 22:10:04 up 86 days, 1:46, 5 users, load average: 2.99, 2.94, 2.82
Tasks: 227 total, 8 running, 218 sleeping, 0 stopped, 1 zombie
Cpu(s): 66.1%us, 1.3%sy, 0.0%ni, 32.3%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 3115136k total, 2819188k used, 295948k free, 248620k buffers
Swap: 5177336k total, 0k used, 5177336k free, 1695580k cached
Мы используем SwiftMailer для доставки почты в Postfix через SMTP. Если мы попытаемся запустить более 3 параллельных экземпляров PHP-скрипта, который отправляется через SwiftMailer, средняя нагрузка возрастет до 3+, а скорость доставки сильно снизится. На отправку 500 тыс. Сообщений у нас уходит почти целый день. Удаленные почтовые серверы с радостью принимают нашу почту, и все, что откладывается, передаются резервному ретранслятору.
Во время отправки наша qshape показывает быстрое опустошение очереди:
T 5 10 20 40 80 160 320 640 1280 1280+
TOTAL 10 10 0 0 0 0 0 0 0 0 0
gmail.com 2 2 0 0 0 0 0 0 0 0 0
yahoo.com 2 2 0 0 0 0 0 0 0 0 0
aol.com 1 1 0 0 0 0 0 0 0 0 0
aim.com 1 1 0 0 0 0 0 0 0 0 0
evhs.net 1 1 0 0 0 0 0 0 0 0 0
myactv.net 1 1 0 0 0 0 0 0 0 0 0
hotmail.com 1 1 0 0 0 0 0 0 0 0 0
googlemail.com 1 1 0 0 0 0 0 0 0 0 0
И поскольку мы используем резервный ретранслятор, отложенная очередь на нашем основном SMTP-сервере пуста.
Мы используем сервер имен с локальным рекурсивным кешированием (Unbound) и следовали всем советам по настройке в README Postfix Tuning. Но мы все еще ломаем голову над тем, где искать узкое место, почему на отправку 500К сообщений уходит весь день. Я читал другие статьи по оптимизации Postfix (в том числе одну на ServerFault), но виноватым там всегда был ввод-вывод. Но наш вывод iostat выглядит так, как будто диски вообще не заняты.
С чего еще нам начать искать?
Без подписи и сканирования исходящего спама Postfix может легко обрабатывать 360 000 писем в час.
Проблема здесь в загрузке ЦП на 66,1%. Поскольку вы не предоставляете информации о процессах, потребляющих эту нагрузку, я предполагаю, что они не имеют отношения к Postfix. Это либо процесс подписи DKIM, либо процессы PHP.
Вам необходимо настроить процессы, которые отвечают за загрузку, а не процесс, который отвечает за доставку почты.
Вы пользуетесь программным рейдом? Недавно у меня была проблема, и рейд (рейд 5) был проблемой. Либо используйте рейд 10, либо вообще не используйте рейд.
Что касается постфикса, попробуйте посмотреть default_process_limit. Возможно, используйте значение 50. Кроме того, установите локально кэширующий сервер имен (например, dnsmasq), это может помочь с DNS.
HTH
«Если мы попытаемся запустить более 3 параллельных экземпляров PHP-скрипта, который отправляется через SwiftMailer, средняя нагрузка возрастет до 3+, а скорость доставки сильно упадет».
Возможно, вам захочется поближе взглянуть на требования / нагрузку обработки памяти и / или процессора.