p4s8x
@p4s8x

Скорость постановки в очередь exim через php mail(...)

Использую собственный скрипт для проведения массовых рассылок на php. Раньше рассылок выполнялось мало, но сейчас появилась необходимость ускорить значительно увеличить объемы.
Делал множество замеров — скорость выполнения функции mail(...) варьируется от 0.07 до 2,9 при средней = 0,87, т.е. чуть больше письма в секунду, а необходимо довести до чего-то вроде 20 писем / сек.

Размер писем средний = 62020 символов, но письма размером в 1 символ отправляются с такой же скоростью.

Сервер — VDS
2400 Mhz
2048 RAM (1900 free)

amd64
FreeBSD 8.2

Exim version 4.73
PHP 5.2.17 with Suhosin-Patch 0.9.7 (cli)

При выполнении скрипта
load averages: 0.98, 0.80, 0.72
СPU 97% IDLE.
HDD 20GB(12GB free)

Подскажите, как можно увеличить скорость постановки в очередь? Где стоит искать узкое место?
  • Вопрос задан
  • 4530 просмотров
Пригласить эксперта
Ответы на вопрос 5
@impass
Насколько мне известно, функция mail() использует вызов локального MTA (в Unix это обычно /usr/sbin/sendmail). Т.е. сколько вызовов mail() — столько раз запускается внешний интерфейс для отправки. Само собой, данный способ далёк от того, чтобы быть хоть сколько-нибудь быстрым.
Дабы не изобретать велосипед, стоит почитать хотя бы нижеследующий форумный топик
PHP Bulk Email — Best Practices?
Ответ написан
alexxxst
@alexxxst
Включите кэш записи для диска.
У меня это увеличило скорость в среднем до 30 в секунду.
Ответ написан
opium
@opium
Просто люблю качественно работать
Отправляйте напрямую exim, а не через mail.
Что в конфиге exim?
Например вот такие штуки есть?
На днях сделал рассылку на 8000 адресов. Все прошло на ура. Может кому понадобиться, использовал вот такие параметры в конфиге (можно добавить роутеры для mailman):
КОД: ВЫДЕЛИТЬ ВСЁ • РАЗВЕРНУТЬ
smtp_accept_max = 150
smtp_accept_max_per_connection = 100
smtp_connect_backlog = 30
smtp_accept_max_per_host = 50
smtp_accept_reserve = 30
smtp_reserve_hosts = +relay_from_hosts
split_spool_directory = true
remote_max_parallel = 50
Ответ написан
@MealstroM
Используейте пхп-шний мейлер уровня смтп
Ответ написан
Комментировать
Действительно, почему бы не использовать пхп-шный мейлер, который на протяжении всех отправок держит SMTP открытым и через него засылает.

Если ещё сделать так, чтобы очередь могла разбираться одновременно разными скриптами(процессами) без коллизий, то можно ещё параллельно отправлять.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы