Я получаю объекты изображения с удаленного сервера, а затем пытаюсь загрузить их в облачные файлы Rackspace с помощью их API. Удовлетворение а) как я могу сделать этот процесс более эффективным, и б) предполагая, что мне нужно будет приобрести больше памяти, для чего может понадобиться разумное количество ОЗУ (текущий сервер разработки - всего 512 МБ).Управление памятью и большими файлами Linux
При выполнении сценария я:
- Запрос моих локальной базы данных для набора идентификаторов (около 1 тысячи)
- Для каждого идентификатора, запрашивая удаленный сервер, который возвращает между 10-20 объекты изображения, каждое изображение 25-30k
- Создание контейнера облачных файлов на основе идентификатора из моего db
- Для каждого объекта изображения, возвращенного с удаленного сервера, создайте объект изображения в моем контейнере и запишите данные изображения к этому объекту
- Обновление строки в локальной БД с DateTime добавленных изображений
Это выполняется относительно быстро на небольшой набор идентификаторов, однако 100 (так 700-1k изображения) может принимать 5-10мин, и ничего больше, чем кажется бежать бесконечно. Пытались следующие, с небольшим успехом:
- используя set_timeout PHP, чтобы убить скрипт через пару минут, решив, что бы очистить память выделяется на исполнение, что позволяет мне подобрать, где я остановился, и работать через набор меньше штук. Однако эта ошибка никогда не выбрасывается
- unset ключ массива, содержащий объект изображения после его загрузки (не just the reference inside the loop).
PHP memory_limit установлен в 128 МБ, а команда «tops» показывает, что пользовательские «www-data» потребляют 16% ресурсов памяти. Однако не что больше не отображается в списке пользователей, но я продолжаю видеть это:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2400 mysql 20 0 161m 8220 2808 S 0 1.6 11:12.69 mysqld
... но TIME + никогда не меняется. Я вижу, что есть еще одна задача работает, но эти значения не меняются:
Mem: 508272k total, 250616k used, 257656k free, 4340k buffers
Извинения для длинного поста - не совсем уверен, что (если какой-либо из этого) является полезным. Это не моя область знаний, поэтому немного хвататься за соломинку. Заранее спасибо за вашу помощь.
Не можете ли вы обработать одно изображение за другим? – rik
Похоже, вы случайно написали код как своего рода алгоритм N^2 - разместите код. – caf