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