Apache-Talk mailing list archive (apache-talk@lists.lexa.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [apache-talk] php-cgi кеширован ие в памяти
Sergej Kandyla wrote:
Eugene Grosbein wrote:
Может зависеть от операционной системы. Операционки семейства BSD,
к примеру, вообще не "читают" бинарники с диска, они мапят файл бинарника
непосредственно в адресное пространство и запускают его оттуда.
Необходимые страницы кода (и только они) подкачиваются в физическую
память
при первом обращении к ним системным пейджером и при достаточном
количестве
памяти остаются в ней. При следующем (или даже одновременном) обращении
к коду эти страницы просто используются повторно, никакого повторного
чтения
с носителя не будет. Всё это происходит для апача совершенно прозрачно,
он выполняет системый вызов execve(), всё остальное оптимизирует ядро.
ОС FreeBSD, но думаю, что и для линукса механизмы в общем похожи.
Исходя из определения модели CGI - one process per request надо пологать
что основная нагрузка получается из за форканья(дублирования) кода
пхп-бинаря в памяти? (причем если пришло несколько одновременных
запросов, то система сделает столько же копий пхп в памяти? а потом это
все добро переместит в inactive(если позволяют ресурсы))
Стоит погуглить словосочитания copy on write
При форке память не копируется, по этому форк довольно безболезненная
быстрая операция.
посмотрите на размеры процессов апача, они в сумме наверняка больше чем
ваша память и своп вместе взятые =)
Есть ли разница для системы, из-под какого пользователя был считан
бианрь пхп в память?(т.е. для двух разных юзеров система считает
пхп-бинарь в память) Насколько я могу судить, то бинарь считывается с
соотвествующими правами и для другого юзера системе опять понадобиться
считать бинарь пхп в память.
и ещё какая !
но запускается это всё из под апачёвого пользователя.
В случае с суекзеком, пхп действительно запускается от разных
пользователей, при этом сама библиотека пхп чегото там.so находится в
библиотечном кэше, и основной код этого бинаря берётся из этого кэша.
а с диска оно читается как уже раскажзывали - mmap - тоесть при частом
использовании - из специальных буфферов между памятью и диском.
основная проблема в файлах .php - их пхп действительно читает, если они
не +x и в первой строке нет #!/usr/bin/php, в случае запуска их как
бинарей с интерпретатором, опять же происходит mmap.
Напоследок, если все происходит в памяти, то все это ложиться на
процессор, однако на практике имем большую нагрузку на винт от
считывания этих бинарей. Чем это можно обьяснить?
Тем, что это пхп обычно что то пишет на диск.
или читает с него свои данные.
сам php-cgi даёт очень маленький оверхет
Спасибо за Ваше время!
Пажаласта, у нас оно есть =)
--
Ivan B. Serezhkin
|