Apache 2.2 mpm_worker: больше потоков или больше процессов?

17

При использовании Worker MPM в Apache вы можете изменять количество дочерних процессов и число потоков сервера на дочерний процесс.

Каковы преимущества и недостатки каждого? При каких обстоятельствах вы бы увеличили одно или другое?

ш-бета
источник

Ответы:

25

До сих пор это были мои главные соображения при определении потоков против процессов:

  1. Потоки будут использовать гораздо меньше резидентной памяти, чем процессы. Да, с динамически связанными библиотеками большая часть памяти распределяется между процессом управления Apache и его дочерними процессами, однако каждый новый процесс должен будет создавать экземпляры всех модулей, которые вы включили.

    Это легко проверить, сравнивая использование памяти каждым процессом, где у вас есть, например, либо 5 процессов и 1 поток каждый, либо 5 процессов и 25 потоков каждый. В моем случае, каждый дочерний процесс занимает около 7 МБ независимо от количества потоков.

    + Для потоков

  2. Инициирование с точки зрения времени и циклов процессора для загрузки нового процесса занимает больше времени, чем для потока. Это можно проверить, проверив среднее количество страниц, обслуживаемых через «ab».

    + Для потоков

  3. A Потоки процессов все зависят от процесса. Самое большое беспокойство здесь заключается в том, что если что-то случится с процессом, это повлияет на все потоки, связанные с ним. Если вы работаете с одним процессом с кучей потоков, то когда процесс умирает, потоки тоже. Таким образом, большее количество процессов приведет к лучшему разделению и, следовательно, к большей отказоустойчивости, если хотите.

    + Для процессов

  4. Что касается (3), то для таких модулей, как PHP, их память загружается процессом и распределяется между всеми потоками. Это означает, что если у вас php с параметром memory_limit, установленным на 100 Мбит / с с 25 потоками ниже, то при максимальной загрузке технически каждый поток сможет выделить максимум 4 МБ каждый (конечно, этого не произойдет, некоторые будут перегружены, некоторые - голодать).

Таким образом, в конце концов, это действительно зависит от вашего варианта использования. При этом вы захотите максимизировать количество используемых потоков, чтобы уменьшить использование памяти и повысить скорость отклика. Тем не менее, вам придется сбалансировать это с соответствующим количеством процессов для лучшей отказоустойчивости.

Конечно, я здесь не эксперт, поскольку только недавно мне пришлось заняться этим, поэтому я с нетерпением жду возможности увидеть другие ответы здесь!

jonathanserafini
источник
1
+1 за хорошую общую информацию. Я хотел бы видеть больше глубины / конкретной детали, если это возможно, хотя.
sh-beta