Любая документация о том, как Apache обрабатывает загрузку файлов? - PullRequest
3 голосов
/ 28 марта 2011

Я часами гуглял, а также искал сайт Apache, и я не могу найти никакой документации о том, как Apache обрабатывает загрузку файлов - особенно больших. Я прочитал анекдотический отчет , что PHP не участвует, пока загрузка не будет завершена, что я и ожидал. Но что касается того, что делает Apache во время загрузки, я ничего не могу найти.

Причина, по которой мне не терпится документирование, заключается в том, что Apache хранит закачки полностью в памяти, а не передает их на диск. httpd будет использовать каждый байт доступной памяти на сервере, который я использую, пока не произойдет сбой. Как правило, объем потребляемой физической памяти в 3 раза превышает размер загружаемого файла и увеличивается примерно до 5 МБ / с (что далеко от скорости загрузки).

Я протестировал этот же запрос на другом стеке LAMP, который я использую, и использование памяти Apache совершенно не меняется в течение загрузки.

Может кто-нибудь объяснить мне, как Apache может так по-разному обрабатывать одну и ту же загрузку на двух разных серверах? Любая мысль с благодарностью.

Ответы [ 3 ]

3 голосов
/ 28 марта 2011

Технически, PHP - это , обрабатывающий загрузку от имени Apache и буферизующий файл в оперативной памяти до его завершения.Однако ваш сценарий не получит контроль, пока загрузка не будет завершена (или не прервана).Apache сам по себе не будет буферизоваться на диск, если это не нужно.Думайте об этом как о невидимом вызове функции handle_upload (), который прозрачно вставляется как самая первая вещь в вашем скрипте.

В те времена, когда "все это скрипт cgi", когда языковые интерпретаторы, такие как PHP, не быливстроенные в процесс веб-сервера, данные POST отправлялись в сценарий CGI через стандартный ввод. Файл передавался через Apache непосредственно в процесс CGI и мог считываться побайтово по мере поступления.

2 голосов
/ 10 мая 2011

Ответ неудовлетворительный. Я не нашел никакой документации.

Я продолжал ковыряться в темноте, в конце концов, наткнувшись на обновление mod_fcgid (с 2.2 до 2.3.6), которое добилось цели. Возможно, была ошибка в 2.2.

Использование памяти в 2.3.6 все еще возрастает, но гораздо менее значительно. Всего несколько мегабайт для файла ~ 100 МБ. (Тем не менее, когда загрузка заканчивается и файл перемещается, использование памяти мгновенно возрастает ~ 100-200 МБ, но затем кажется, что оно немедленно освобождается.)

0 голосов
/ 28 марта 2011

Это может помочь вам, потому что на сервере WAMP есть Apache.

http://www.wampserver.com/phorum/read.php?2,39439

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...