Назад | Перейти на главную страницу

Проблемы с общей памятью APC

У меня есть nginx + php-fpm и APC, установленные на сервере freebsd, и я испытываю постоянные проблемы с php-fpm, каким-то образом связанным с APC. php-fpm зависает в состоянии 'lockf' (в top) и поэтому сайт не работает. я заметил это, опустив apc.shm_size значение по умолчанию 30 помогает php-fpm не зависать, но 30 МБ мне недостаточно, потому что я храню много переменных в APC. я заметил это повышение apc.shm_size на более высокие значения (например, 60) заставляет процессы php-fpm использовать намного больше памяти, практически всю физическую память сервера, что странно, потому что, как я понял, эти 60 МБ разделяются между всеми процессами php-fpm и не должны влиять на память использование каждого процесса php-fpm. я пытался изменить apc.shm_segments значение больше 1 и при перезапуске php-fpm возникла ошибка:

PHP Startup: apc.shm_segments setting ignored in MMAP mode in <b>Unknown</b> on line <b>0</b><br />
Unknown(0) : Warning - PHP Startup: apc.shm_segments setting ignored in MMAP mode

Итак, скажите, пожалуйста, как эти параметры влияют на APC и почему php-fpm умирает при использовании большого количества разделяемой памяти? что означает MMAP mode? Я думаю о переходе на xcache, работает ли он с php-fpm и достаточно ли стабилен для производства?

О mmap:

Настроить скрипт apc имеет директиву:

  --disable-apc-mmap
                          Disable mmap support and use IPC shm instead

Также существует 3 вида блокировки:

  --enable-apc-sem
                          Enable semaphore locks instead of fcntl
  --enable-apc-spinlocks
                          Enable spin locks  EXPERIMENTAL

+ По умолчанию fcntl. Можешь попробовать spinlocks и посмотрим, что произойдет

PS. Это тоже должно быть полезно: http://www.php.net/manual/en/apc.setup.php

Если вы не увеличили значение sysctl kern.ipc.shmmax вам нужно это сделать. По умолчанию это 32 МБ, по крайней мере, в моей FreeBSD 8.0, а также во многих дистрибутивах Linux.

Пытаться sysctl -w kern.ipc.shmmax=134217728 увеличить значение до 128 мегабайт. Тогда попробуйте увеличить apc.shm_size опять будет больше 30 Мб.

Если это помогает, укажите желаемое значение kern.ipc.shmmax в /etc/sysctl.conf чтобы изменение сохранялось между перезагрузками.

Как ставили память?

apc.shm_size=64 или apc.shm_size=64M, как и в руководство?

Последний решил мою аналогичную проблему.