Я пытаюсь отследить использование памяти скриптом, который обрабатывает URL.Основная идея заключается в проверке наличия разумного буфера перед добавлением еще одного URL-адреса в multi-обработчик cURL.Я использую концепцию Rolling CURL, которая обрабатывает данные URL во время работы мульти обработчика.Это означает, что я могу поддерживать N соединений активными, добавляя новый URL из пула каждый раз, когда существующий URL обрабатывается и удаляется.
Я использовал memory_get_usage()
с некоторыми положительными результатами.Помогло добавление флага real_usage
(не совсем понятно различие между памятью 'system' и памятью 'emalloc', но система показывает большее число).memory_get_usage()
увеличивается по мере добавления URL, а затем по мере истощения набора URL.Тем не менее, я только что превысил предел в 32M с моей последней проверкой памяти ~ 18M.
Я опрашиваю использование памяти каждый раз, когда cURL multi сигналы возвращают запрос.Поскольку несколько запросов могут возвращаться одновременно, есть вероятность, что несколько URL-адресов вернули данные в одно и то же время и фактически превысили объем используемой памяти на 14M.Однако, если memory_get_usage()
является точным, я думаю, это именно то, что происходит.
[ Обновление : Должно было быть выполнено больше тестов, прежде чем спрашивать, я думаю, увеличился лимит памяти php (но оставил «безопасный»в скрипте))) и использование памяти, о котором сообщалось, подскочило ниже установленного мной предела 25M до 32M.Затем, как и ожидалось, медленно уменьшались как URL-адреса, где не добавляются.Но я оставлю вопрос: это правильный способ сделать это?]
Могу ли я доверять memory_get_usage()
таким образом?Существуют ли более эффективные альтернативные методы получения памяти (я видел, как некоторые скрипты анализируют вывод команд оболочки)?