Я получаю объекты изображений с удаленного сервера, а затем пытаюсь загрузить их в облачные файлы Rackspace с помощью их API. Интересно, а) как я могу сделать этот процесс более эффективным, и б) если предположить, что мне потребуется приобрести больше памяти, какой разумный объем ОЗУ может быть для выполнения этой задачи (текущий сервер разработки занимает всего 512 МБ).
При выполнении сценария я:
- Запрос в мою локальную базу данных для набора идентификаторов (около 1 тысячи)
- Для каждого идентификатора, запрашивающего удаленный сервер, который возвращает от 10 до 20 объектов изображения, каждое изображение составляет 25-30 К
- Создать контейнер Cloud Files на основе идентификатора из моей базы данных
- Для каждого объекта изображения, возвращаемого с удаленного сервера, создайте объект изображения в моем контейнере и запишите данные изображения в этот объект
- Обновить строку в локальной базе данных с датой и временем добавления изображений
Это выполняется сравнительно быстро на небольшом наборе идентификаторов, однако 100 (таким образом, 700-1k изображений) могут занять 5-10 минут, и все, что кажется, работает бесконечно долго. Пробовал следующее с небольшим успехом:
- использование php set_timeout для уничтожения скрипта через пару минут, предполагая, что это очистит память, выделенную для выполнения, что позволит мне выбрать, где я остановился, и поработать над набором - это мелкие кусочки. Однако эта ошибка никогда не выдается
- сбросить ключ массива, содержащий объект изображения после его загрузки (не , а просто ссылка внутри цикла ).
PHP memory_limit установлен на 128 МБ, и при выполнении команды «tops» я вижу, что пользовательские «www-данные» занимают 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
... но ВРЕМЯ + никогда не меняется. Я вижу, что все еще выполняется 1 задача, но эти значения никогда не меняются:
Mem: 508272k total, 250616k used, 257656k free, 4340k buffers
Извиняюсь за длинный пост - не совсем уверен, что (если таковое имеется) полезно. Это не моя область знаний, поэтому немного цепляюсь за соломинку. Заранее спасибо за помощь.