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 кеш ирование в памяти
On Tue, Oct 23, 2007 at 03:15:51PM +0300, Sergej Kandyla wrote:
> >Может зависеть от операционной системы. Операционки семейства BSD,
> >к примеру, вообще не "читают" бинарники с диска, они мапят файл бинарника
> >непосредственно в адресное пространство и запускают его оттуда.
> >Необходимые страницы кода (и только они) подкачиваются в физическую память
> >при первом обращении к ним системным пейджером и при достаточном количестве
> >памяти остаются в ней. При следующем (или даже одновременном) обращении
> >к коду эти страницы просто используются повторно, никакого повторного
> >чтения
> >с носителя не будет. Всё это происходит для апача совершенно прозрачно,
> >он выполняет системый вызов execve(), всё остальное оптимизирует ядро.
> ОС FreeBSD, но думаю, что и для линукса механизмы в общем похожи.
В FreeBSD происходит именно так, как написано.
> Исходя из определения модели CGI - one process per request надо пологать
> что основная нагрузка получается из за форканья(дублирования) кода
> пхп-бинаря в памяти? (причем если пришло несколько одновременных
> запросов, то система сделает столько же копий пхп в памяти? а потом это
> все добро переместит в inactive(если позволяют ресурсы))
Еще раз, если в первый раз не дошло :-) Никакого дублирования
кода бинарника не будет. Читается он ровно один раз и в памяти
существует в единственном экземпляре и возможно, даже не целиком,
а только те его части, код из которых действительно выполнялся.
> Есть ли разница для системы, из-под какого пользователя был считан
> бианрь пхп в память?(т.е. для двух разных юзеров система считает
> пхп-бинарь в память) Насколько я могу судить, то бинарь считывается с
> соотвествующими правами и для другого юзера системе опять понадобиться
> считать бинарь пхп в память.
Файл на диске один - какой смысл-то его читать несколько раз,
пусть даже и для разных UID? Не будет ядро этого делать.
> Напоследок, если все происходит в памяти, то все это ложиться на
> процессор, однако на практике имем большую нагрузку на винт от
> считывания этих бинарей. Чем это можно обьяснить?
Нагрузка вовсе не от этого. Включив телепатический модуль,
предположу, что используется не просто PHP, а какой-нибудь
кривущий движок на нем, использующий файлы сессий в одном каталоге,
нарожавший их там пару десятков тысяч и при каждом старте
вместо того, чтобы обрабатывать запрос, роющийся среди них в поисках
устаревших. Был свидетелем, как такой "PHP-технологией" уложили на колени
весьма и весьма шустрое железо.
|