Настройка APC в Ubuntu 10.4.Проблема с apc.shm_size, apc.shm_segments и Apache - PullRequest
3 голосов
/ 16 июля 2011

Я только что установил APC для кэширования своего PHP-кода на моем Ubuntu VPS-сервере.Использование

sudo apt-get install php-apc
sudo /etc/init.d/apache2 restart

Это работало нормально.Тем не менее, я сталкиваюсь с некоторыми проблемами при увеличении объема оперативной памяти, выделенной для APC.Если я запускаю apc.php, он дает мне эту информацию о разделяемой памяти.

Shared Memory   1 Segment(s) with 30.0 MBytes (mmap memory, pthread mutex locking) 

Даже если я настроил

apc.shm_segments    3

Не задано значение по умолчанию

apc.shm_size    30

Кроме того, у меня проблема в том, что, как только я установил apc.shm_size в apc.ini или php.ini, apache зависает при перезагрузке / изящном режиме и не появляется.

Мои вопросы: 1. Если память, выделенная для APC, равна apc.shm_size * apc.shm_segments, почему я могу видеть только 90M?2. У кого-нибудь была проблема с зависанием Apache на настройке apc.shm_size?Как бы это исправить?

Большое спасибо!

Ответы [ 2 ]

5 голосов
/ 19 июля 2011

Похоже, я нашел проблему

sudo apt-get install php-apc
sudo /etc/init.d/apache2 restart

Установлена ​​старая версия APC на моей машине. В этой версии apc.shm_size=30M должен быть сконфигурирован без М в объеме памяти. Таким образом, новые версии APC используют apc.shm_size=30M старую версию apc.shm_size=30. После внесения изменений Apache перезапустился без сбоев.

4 голосов
/ 16 июля 2011

Вы должны проверить максимальный размер ядра для разделяемой памяти. В дистрибутиве, подобном Debian, он довольно низок (а Ubuntu подобен Debian). Изменение через sysctl.conf может вам помочь. Получить текущее значение с помощью:

sysctl -a  | grep shmmax

Это значение в байтах.

Это может объяснить сбой apache, когда вы устанавливаете слишком большое число (но вы должны иметь что-то об этом в error.log).

Похоже, для этого ответа , что apc.shm_segments не всегда используется APC. Мы можем увидеть некоторые объяснения здесь: http://www.php.net/manual/fr/apc.configuration.php#94529:

Если вы настроили APC для использования отображенных в память файлов (с параметром --enable-mmap), параметр shm_segments игнорируется, если вы не укажете маску файла с помощью параметра mmap_file_mask. Это можно исправить, задав значение apc.mmap_file_mask конфигурации (см. Ссылку).

Но, как сказано в этом комментарии, использование нескольких общих сегментов, безусловно, хуже, чем использование большого. есть как минимум два больших приложения, которые интенсивно используют большую разделяемую память и для этого всегда требуется изменение настроек ядра, это Varnish и PostgreSQL . Оба сделали выбор в пользу большого общего сегмента вместо нескольких.

...