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