Использование памяти Apache2 при загрузке больших файлов
Я использую apache2.2.12 вместе с PHP 5.2.10. PHP настроен для запуска в качестве отдельного процесса через fcgid. Проблема в том, что когда пользователи загружают файл, размер процесса apache увеличивается почти на столько же. Поэтому, если кто-то попытается загрузить файл размером 200 МБ, один из дочерних процессов увеличится до текущего размера +200 МБ. Если 2 пользователя одновременно начинают загрузку, мой сервер падает.
Сейчас размер виртуальной памяти увеличивается, но, поскольку я использую VPS на основе OpenVZ, это то, что имеет значение.
Мои вопросы:
- Это нормальное поведение Apache или я могу что-то сделать, чтобы это исправить?
- Если нет, есть ли более эффективный способ памяти для загрузки больших файлов. Исходя из текущего поведения, мне понадобится 1 ГБ свободной оперативной памяти для каждого ребенка Apache, принимающего загрузку.
Спасибо!
Abhaya
-
1 ответ
Интересная проблема, и это, кажется, ограничение php. Смотрите следующее:
- http://aaronwinborn.com/blogs/aaron/how-handle-large-file-uploads
- http://www.radinks.com/upload/config.php
Они оба в конце, кажется, говорят: "Используйте Java или Perl" или что-то еще. Возможно, кто-то на stackoverflow имеет ответ. Для таких больших загрузок, sftp может быть лучшим решением в зависимости от того, насколько это удобно для пользователя.
Если вы хотите использовать не-php, JUpload выглядит хорошим вариантом, поскольку он может разбить файл на куски и выгрузить каждый кусок на диск. Если это должен быть php, похоже, что вы сможете развернуть что-то нестандартное с помощью программирования сокетов в соответствии с этой статьей stackoverflow.
При таком размере вы, возможно, захотите что-то с возможностью возобновления и прогресса в любом случае.