PHP: очень высокое использование памяти на производственном сервере, в то время как использование памяти на локальном компьютере низкое - PullRequest
4 голосов
/ 25 августа 2011

Я создал скрипт PHP, который собирает некоторые данные с веб-сайта, ищет соответствующую информацию и сохраняет ее в базе данных. Сценарий прекрасно работает на локальной машине, но когда я запускаю его на работающем сервере с помощью задания cron, он останавливается после выполнения 10 вставок в базу данных, говоря

"Неустранимая ошибка: допустимый объем памяти 67108864 байтов исчерпан (попытка выделить 35 байтов) в / home / content / 36/78632936 / html / scripts / simple_html_dom.php в строке 809
"

Я проверил тот же самый скрипт на своем локальном компьютере, используя get_memory_peak_usage (), и максимальное использование составляет около 8 МБ.

Я озадачен, почему использование памяти на живом компьютере впечатляюще высоко .. Любая помощь будет принята с благодарностью.

Проблеск моего кода:

DB_table1: содержит список из 60000 строк данных

Основной код начинается с вызова DB1 и получения данных, а затем использует каждую строку данных для формирования URL. Каждый из этих URL будет очищен с помощью функции simple_html_dom (), и скрипт будет искать определенную информацию на каждой странице и сохранять эти данные в другой таблице DB_table2.

Пожалуйста, дайте мне знать, если вам нужно знать что-то еще. Спасибо:)

Ответы [ 2 ]

0 голосов
/ 25 августа 2011

Не забудьте использовать unset() после того, как время / foreach для очистки больше не требуется (БД) результатов.

0 голосов
/ 25 августа 2011

Обновление:
Глядя на php change log , есть много проблем с памятью, которые решаются. Если вы используете часть PHP с утечкой в ​​5.2, возможно, это может быть причиной. Если вы хотите знать наверняка, попробуйте обернуть интенсивную память частью вашего кода с различиями в memory_get_usage и посмотрите, есть ли какие-либо расхождения между использованием памяти.


Вопрос / Ответ:

afuzzyllama: Ваша производственная среда такая же, как и локальная? Возможно, ваша производственная база данных имеет намного больше данных, чем ваша песочница.

user743914: К сожалению, я не заметил разницы ранее, мой рабочий сервер работает под управлением php версии 5.2, а мой локальный хост установлен на 5.3.1 ... Рабочий БД содержит тот же объем данных, что и локальный хост ...


Простое решение:
Какой максимальный лимит памяти позволяет ваш сервер?

Поиск 'memory_limit' на этой странице [php.net].

Как вы видите в документации, в зависимости от вашей версии PHP, ваш лимит может составлять до 8 МБ. Я предполагаю, что ваш лимит сейчас равен ~ 64M, так как ваш скрипт не работает на ~ 67mb

Если вам нужно временно увеличить его, вы можете использовать ini_set () или установить его в своем файле php.ini и перезагрузить сервер.

...