Назад | Перейти на главную страницу

Ограничение памяти на PHP + Apache + Windows 32 бит?

Я рассматриваю возможность использования 32-разрядной версии Apache для Moodle установка на сервере Windows 2008 R2 64-bit / 16GB. Поскольку доступная память влияет на количество одновременно обслуживаемых пользователей, мне было интересно, как ограничение памяти в 2 ГБ для 32-разрядных процессов Windows влияет на Apache + PHP.

Является ли это коллективным ограничением для всего сервера или применяется отдельно для каждого дочернего процесса / потока Apache?

Если он отдельный, сколько из этих детей запускается в Windows? Один на запрос? По одному на ядро ​​процессора? Что-то посередине? Это как-то можно настроить?

Прежде всего, если вы задаете вопрос, возможно, вам стоит взглянуть на ограничения памяти для различных версий Windows. Создание нескольких процессов Apache не принесет вам особой пользы, если ОС ограничивает вас 2 или 4 ГБ ОЗУ. Также обратите внимание, что ограничение памяти для каждого процесса зависит от самого приложения.

Во-вторых, к каждому процессу применяется ограничение в 2 ГБ на процесс. Любому процессу может быть выделено до 2 ГБ памяти, независимо от того, является ли он дочерним процессом чего-то еще. Многопоточные процессы по-прежнему остаются процессами, так что это ограничение никуда не денется.

Наконец, похоже, вы не понимаете, как работают процессы Apache (или Windows?). Нет глобальной конфигурации для launch [x] processes of [y] application, или [x] processes of [y] application per [z] cores, и вы, конечно, не получите новый процесс Apache для каждого http запрос, так что эта часть вопроса в некоторой степени ... без ответа. Количество процессов, запускаемых приложением, определяется приложением (и, в некоторой степени, пользователем). Например, каждая вкладка в IE - это отдельный процесс, а каждая вкладка в Firefox - нет.

Я бы предположил, однако, что обход ограничений памяти путем запуска нескольких экземпляров одного и того же процесса, вероятно, не является хорошей идеей, и вы должны получить версию Windows, которая изначально поддерживает, позволяя вашему приложению иметь столько памяти, сколько ему действительно нужно (или может ручка). Подумайте, что произойдет, когда вам (или кому-то другому) придется устранить проблему и войти на веб-сервер, на котором запущено 32 экземпляра Apache, чтобы «обойти» ограничение в 2 ГБ на процесс и использовать максимально допустимое ограничение ОС в 64 ГБ. ОЗУ. Кого-то убьют.

Отказ от ответственности: я не администратор Windows. Я считаю, что наиболее распространенная настройка, подобная этой, применительно к Apache 2 - это использование Winnt Multi Processing Module (MPM) с настраиваемым размером пула потоков (по умолчанию 250 или около того). Это означает, что у вас будет один процесс с множеством потоков, поэтому на этот процесс будет распространяться ограничение 2G.

В Apache2 приятно то, что он поддерживает разные схемы MPM, так что вы можете выбрать наиболее подходящую. Здесь, вероятно (а может быть, даже должен быть - не уверен) выигравший MPM.

Надеюсь, это поможет. - Мэтт