Да я понимаю, что я не руками через telnet буду отправлять.
Мне нужен перехватчик всех писем, отправленных из php для конкретного сайта.
Дело в том, что письма в «сыром» формате, которые php формирует для sendmail весьма трудно парсить.
Ну уж из php письма отправлять мы умеем. Вы меня не так поняли.
Нужно чтобы все письма, отправляемые с сайта, шли через другой сервер, БЕЗ изменения исходников сайта. Мест, где уже используются функции для отправки почты — десятки и найти их нереально. Но у них есть центральная точка соединения — программа /usr/sbin/sendmail. Вот её нужно заменить на что-то, чтобы она отправляла через другой smtp. А текущий smtp удалять и ставить другой нельзя (его юзают другие сайты и куча сервисов).
Этот способ мне не подходит. Дело в том, что на сервере и так стоит уже Postfix и он занят обслуживанием кучи доменов. Просто нужно сделать, чтобы конкретный сайт отправлял через совершенно другой smtp, а старые продолжали бы отправлять через программу sendmail на localhost.
Обращаю внимание, что sendmail — здесь не «почтовый сервер sendmail», а заглушка от postfix, которая имитирует поведение sendmail (идёт в комплекте).
ну да. я ведь и описал вероятную причину изначально в вопросе :) на php бы я и сам поправил, ибо есть опыт генерации pdf.
просто мои знания java стремятся к нулю, а гугл по данной библиотеке выдает скупые крупицы информации.
был бы рад, если бы кто-нибудь из java-программистов помог модифицировать библиотеку и скомпилировать эту штуку.
Спасибо за наводку на xhprof. XH Gui невероятно удобная вещь. С помощью него и нашли проблему: создавалось слишком много экземпляров одного и того же класса.
Да у меня полно старых не нужных компов, которые можно притащить домой. Но все они большие и громоздкие (мамки Full ATX), а квартирка у меня маленькая очень.
Спасибо. Мне интересна именно скорость на торентах — чтобы 12 мегабайт в секунду качал (100 мбит). Тогда я смогу BD-образ за час выкачать.
А у Вашего роутера, вроде как, нет возможности ставить dd-wrt/tomato. А у меня весьма изощренный конфиг iptables в dd-wrt + еще фичи вроде WOL.
Мы берем юзеров, у которых есть тэги (подписка на новость данного типа) и отправляем им письма. Бывает что таких пользователей около 250 тысяч. Выборка самих юзеров (их id == email) по тэгу осуществляется менее чем за секунду.
Потом уже формируется персоанализированный текст новости (с именем человека, сылками на отписку и т.п.). На этом этапе и затык с селектами в цикле. В момент селекта и создания письма, письмо вставляется в таблицу b_events для дальнейшей обработки другим обработчиком — то есть, это делается 250k раз по очереди, а не сразу. Момент записи в таблицу не тормозит.
В начале выполнения скрипта первые юзеры обрабатываются примерно 0.008379 секунд за штуку. В конце — около полусекунды.
В процессе отладки мы отключали вообще эти xml-rpc и сводили все запросы к 1 самому примитивному на 1 юзера.
Но производительность даже в таком случае падала примерно ровно также.
Наверняка что-то там не чистится в области памяти PHP.
Дальнейшим поиском утечек и разработкой архитектуры многопоточной отправки писем займемся на следующей неделе. :)
Бинго! Похоже, как раз дело в Garbage Collection. Почитал — он и правда не высвобождает память при unset() в PHP 5.1.
Кстати, мы подумываем сделать псевдомногопоточность: скармливать через STDIN другому скрипту e-mail'ы для обработки порциями по 8 штук (на каждый email будет запускаться 1 копия обработчика) — т.е. равное числу ядер на сервере. Дожидаться выполнения скриптов и запускать следующие 8.
Там такая система: есть ТЭГИ, на которые подписаны юзеры. У каждой новости свой тэг. На этапе создания рассылки выгружаются из базы юзеры, у которых есть подписка на этот ТЭГ.
Что-то не так с выделением оперативки — нам тоже так кажется.
Но пока мы не настроили профайлер. :)