Управление памятью в Linux и большие файлы

0

Я получаю объекты изображения с удаленного сервера, а затем пытаюсь загрузить их в Rackspace Cloud Files, используя их API. Удовлетворение а) как я могу сделать этот процесс более эффективным, и б) предполагая, что мне нужно будет приобрести больше памяти, для чего может понадобиться разумное количество оперативной памяти (текущий сервер разработки - всего 512 МБ).

Выполняя script, я:

  • Запрос моей локальной базы данных для набора идентификаторов (около 1 тысячи)
  • Для каждого идентификатора, запрашивающего удаленный сервер, который возвращает между 10-20 объектами изображения, каждое изображение составляет 25-30 тыс.
  • Создайте контейнер облачных файлов, основанный на id из моего db
  • Для каждого объекта изображения, возвращенного с удаленного сервера, создайте объект изображения в моем контейнере и напишите данные изображения этому объекту
  • Обновить строку в локальном db с datetime добавленных изображений

Это выполняется относительно быстро на небольшом наборе идентификаторов, однако 100 (поэтому 700-1k изображений) могут занимать 5-10 минут, и что-то большее, чем кажется, работает бесконечно. Попробовали следующее, с небольшим успехом:

  • используя php set_timeout, чтобы убить script через пару минут, полагая, что очистит память, выделенную для выполнения, позволяя мне забрать, где я остановился, и работать через набор - это меньшие части. Однако эта ошибка никогда не бросается
  • удалите ключ массива, содержащий объект изображения после его загрузки (а не только ссылку внутри цикла).

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

Извините за длительный пост - не совсем уверен, что (если это возможно) полезно. Это не моя область знаний, поэтому немного хвататься за соломинку. Заранее спасибо за вашу помощь.

  • 0
    Вы не можете обработать одно изображение за другим?
  • 0
    Похоже, вы случайно написали код как некий алгоритм N ^ 2 - опубликуйте код.
Теги:
file-upload
cloudfiles

1 ответ

0
Лучший ответ

MySQL - демон - он будет продолжать работать и сидеть в памяти, пока он не умрет, или вы его не убьете. TIME + - это время, которое он использовал с момента последнего перезапуска. Если он простаивает (% CPU = 0), тогда TIME + не будет увеличиваться, так как время процессора не потребляется.

Вы проверили, запущен ли API-интерфейс cloudfiles некорректными дескрипторами? Вы можете отключить объект изображения, который вы извлекли из своей службы (service- > you), но Cloudfiles API все равно должен отправить это изображение обратно из двери (you- > Rackspace), и это может быть утечка где-то.

  • 0
    Спасибо за ответ. Искал следующий шаг, и это определенно помогает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню