Использование памяти Apache2 при загрузке больших файлов

Я использую apache2.2.12 вместе с PHP 5.2.10. PHP настроен для запуска в качестве отдельного процесса через fcgid. Проблема в том, что когда пользователи загружают файл, размер процесса apache увеличивается почти на столько же. Поэтому, если кто-то попытается загрузить файл размером 200 МБ, один из дочерних процессов увеличится до текущего размера +200 МБ. Если 2 пользователя одновременно начинают загрузку, мой сервер падает.

Сейчас размер виртуальной памяти увеличивается, но, поскольку я использую VPS на основе OpenVZ, это то, что имеет значение.

Мои вопросы:

  • Это нормальное поведение Apache или я могу что-то сделать, чтобы это исправить?
  • Если нет, есть ли более эффективный способ памяти для загрузки больших файлов. Исходя из текущего поведения, мне понадобится 1 ГБ свободной оперативной памяти для каждого ребенка Apache, принимающего загрузку.

Спасибо!

Abhaya

-

1 ответ

Интересная проблема, и это, кажется, ограничение php. Смотрите следующее:

Они оба в конце, кажется, говорят: "Используйте Java или Perl" или что-то еще. Возможно, кто-то на stackoverflow имеет ответ. Для таких больших загрузок, sftp может быть лучшим решением в зависимости от того, насколько это удобно для пользователя.

Если вы хотите использовать не-php, JUpload выглядит хорошим вариантом, поскольку он может разбить файл на куски и выгрузить каждый кусок на диск. Если это должен быть php, похоже, что вы сможете развернуть что-то нестандартное с помощью программирования сокетов в соответствии с этой статьей stackoverflow.

При таком размере вы, возможно, захотите что-то с возможностью возобновления и прогресса в любом случае.

Другие вопросы по тегам