Где APC хранит свой код операции и кэш пользовательских переменных? - PullRequest
9 голосов
/ 13 июля 2009

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

Так ли это, и означает ли это, что память, используемая APC, реплицируется в каждом процессе Apache, занимая потенциально намного больше памяти, чем то, что было изначально ему назначено?

Если это так, будет ли лучше использовать memcache, даже если он не используется на нескольких серверах с балансировкой нагрузки?

Ответы [ 2 ]

12 голосов
/ 13 июля 2009

APC использует разделяемую память для хранения своего кэша кода операции. В случае mod_php эта память распределяется между всеми процессами Apache. Таким образом, кэш-память объемом 30 МБ занимает всего 30 МБ, даже если есть 5 процессов Apache.

Однако при использовании mod_php каждый процесс Apache тратит много ресурсов, поскольку каждый процесс содержит интерпретатор PHP. Таким образом, когда Apache обслуживает статический контент (html, css, js, файлы изображений и т. Д.), Он использует процесс с загруженным полным интерпретатором PHP. Чтобы обойти это, некоторые люди используют FastCGI через mod_fastcgi или mod_fcgi. Использование кэша кода операции с FastCGI становится немного сложнее.

В настоящее время нет способа использовать memcache в качестве кэша кода операции. Даже если бы оно было, оно, вероятно, было бы медленнее, чем хотелось бы.

0 голосов
/ 13 июля 2009

Помимо того, что APC является кешем кода операции, он также предоставляет общую память. Это убедительно свидетельствует о том, что у него есть собственная система внутренней разделяемой памяти, аналогичная memcached.

...