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