Форум → Программирование → PHP для идиотов → Кроновый скрипт и "лишние" форки
Кроновый скрипт и "лишние" форки
-
По крону стартует скрипт рассылающий письма пользователям (около 7К) отправка писем в скрипту внутри цикла функцией mail. Где-то на второй третьей сотне скрипт выпадает с криком "Can`t fork: allocate memory" и так много раз. У меня две гипотезы:
1. Либо скрипт форкает столько сендмайлов одновременно что серваку становится плохо
2. Либо не освобождается память от запущенных сендмейлов.
Либо 1 и 2 одновременно…
В связи с этим возникает вопрос как можно по-умному ограничить число запущенных одновременно сендмайлов исходя из доступной в данный момент памяти, вместо того чтобы определять это количество на глаз…?
-
30 марта 2009 г. 7:15, спустя 8 минут 35 секунд
отправляй порциями, а не все сразувсе умрут, а я изумруд -
30 марта 2009 г. 7:17, спустя 1 минуту 43 секунды
порциями, или посмотреть что реально глючит, а именно я думаю что у пхп память течет. ВЕДЬ! кеннот алокейт - все таки к доступной ТВОЕМУ СКРИПТУ памяти относится, а не к системной. за системную не переживай, линух справится с ее управлением см, поверь ;)Сапожник без сапог -
30 марта 2009 г. 7:20, спустя 3 минуты 17 секунд
отправляй порциями, а не все сразу
А как угадать размер порции? З раза отработало с порцией в 200 писем а на 4-й заткнулось на 199-м письме… И как посчитать сколько ждать после порции?
А насчет памяти пхп - увеличение доступной памяти скрипту видимых изменений не дало… -
-
30 марта 2009 г. 7:33, спустя 4 минуты 46 секунд
В связи с этим возникает вопрос как можно по-умному ограничить число запущенных одновременно сендмайлов исходя из доступной в данный момент памяти, вместо того чтобы определять это количество на глаз…?
ну шли по 50-100
Тоесть только "на глаз"? -
30 марта 2009 г. 7:35, спустя 2 минуты 1 секунду
а как ты ждешь?
sleep? :)
или по крону след. запуск?все умрут, а я изумруд -
30 марта 2009 г. 7:37, спустя 1 минуту 18 секунд
а как ты ждешь?
sleep? :)
или по крону след. запуск?
По sleep Мне же надо за один проход скрипта разослаться всем… -
30 марта 2009 г. 8:52, спустя 1 час 15 минут 58 секунд
разбивай на несколько заходов
а как ты ждешь?
sleep? :)
или по крону след. запуск?
По sleep Мне же надо за один проход скрипта разослаться всем…все умрут, а я изумруд -
30 марта 2009 г. 9:34, спустя 41 минуту 12 секунд
разбивай на несколько заходов
А смысл? Чтобы каждую часть отдельным скриптом со своей памятью? Я же писал что увеличение памяти для скрипта не дает толку никакого…. -
30 марта 2009 г. 9:59, спустя 24 минуты 57 секунд
Cheese, ну как вариант:
1. Запуск скрипта на отдачу 100 писем. В конце скрипта редирект на этот же скрипт с параметром отправленных писем (например, mylnitsa.php?send_ok=100).
2. При запуске проверять есть ли данный параметр, и если есть, то отправку делать из списка, начиная с 101-ого адреса. Если параметра нет (вначале его нет), то с начала.
В таком случае не будет превышен лимит времени на выполнение скрипта, ну и память по идее должна после окончания выполнения скрипта (после редиректа) очиститься.
Пожалуйста, авторизуйтесь, чтобы написать комментарий!