При использовании Worker MPM в Apache вы можете изменять количество дочерних процессов и количество серверных потоков на каждый дочерний процесс.
Каковы преимущества и недостатки каждого? При каких обстоятельствах вы бы увеличили одно или другое?
До сих пор это были мои главные соображения при определении потоков и процессов:
Потоки будут использовать гораздо меньше резидентной памяти, чем процессы. Да, с динамически подключаемыми библиотеками много памяти совместно используется между процессом управления Apache и его дочерними процессами, однако каждый новый процесс должен будет создавать экземпляры всех включенных вами модулей.
Это легко проверить, сравнив использование памяти каждым процессом, где у вас есть, например, либо 5 процессов и 1 поток каждый, либо 5 процессов и 25 потоков каждый. В моем случае каждый дочерний процесс занимает около 7 МБ вне зависимости от количества потоков.
+ Для потоков
Запуск нового процесса занимает больше времени с точки зрения времени и циклов процессора, чем поток. Это можно проверить, проверив среднее количество страниц, обслуживаемых через 'ab'.
+ Для потоков
A Процессы Все потоки зависят от процесса. Самая большая проблема здесь в том, что если что-то случится с процессом, это повлияет на все связанные с ним потоки. Если вы работаете с одним процессом с кучей потоков, тогда, когда процесс умирает, потоки тоже. Таким образом, большее количество процессов приведет к лучшему разделению и, следовательно, большей отказоустойчивости, если хотите.
+ Для процессов
Что касается (3), для таких модулей, как PHP, их память загружается процессом и распределяется между всеми потоками. Это означает, что если у вас есть php с memory_limit, установленным на 100 МБ с 25 потоками ниже, то при максимальной загрузке технически каждый поток сможет выделить максимум 4 МБ каждый (конечно, этого не произойдет, некоторые будут работать, некоторые будут голодать).
Так что, в конце концов, это действительно зависит от вашего варианта использования ... При этом вы захотите максимизировать количество используемых потоков, чтобы уменьшить использование памяти и повысить скорость отклика. Однако вам придется сбалансировать это с надлежащим количеством процессов для лучшей отказоустойчивости.
Конечно, я здесь не эксперт, так как я только недавно столкнулся с этим, поэтому я с нетерпением жду, какие еще ответы могут появиться здесь!