Страница 1 из 1

некорректная сборка apcu?

Добавлено: 22 июл 2021, 10:09
zebroid
Обнаружил довольно странный глюк в работе модуля apcu ( https://www.php.net/manual/ru/book.apcu.php )

APCu - это хранилище "ключ-значение" в памяти для PHP. Ключи являются строками (string), а значения могут быть любыми переменными PHP. APCu поддерживает только кеширование переменных в пользовательском пространстве.

Суть в том, что при значении настройки "Количество процессов FastCGI PHP" (вкладка настроек "Разное") больше 1 такое ощущение что кэш не делится между всеми процессами php-cgi.exe, а создаётся отдельно для каждого процесса. Соответственно, закэшированные в одном процессе переменные недоступны (или имеют свои значения) при доступе из другого процесса. Немного неожиданное поведение :)

Бегло погуглил, и проблема скорее всего в том, что модуль apcu собран без поддержки MMAP (того самого механизма Windows, позволяющего делить общий участок памяти между отдельными процессами).
Убедиться в этом можно просто посмотрев вывод phpinfo(), секция настроек модуля acpu
MMAP Support Disabled
Без поддержки mmap модуль apcu по идее должен делить память через shm, но я хз работает ли shm вообще в Windows (похоже, что не работает)

Просьба при релизе очередной версии собрать apcu с опцией --enable-apcu-mmap, и скорее всего это должно решить проблему. У себя пока решил просто установкой настройки "Количество процессов FastCGI PHP" в 1, и при этом пограничном условии кэш работает как ему и полагается :)

Re: некорректная сборка apcu?

Добавлено: 22 июл 2021, 14:13
SagePointer
zebroid писал(а): 22 июл 2021, 10:09 Просьба при релизе очередной версии собрать apcu с опцией --enable-apcu-mmap, и скорее всего это должно решить проблему.
Ну, только если вы самостоятельно реализуете mmap через Windows API и предложите пуллреквест авторам apcu. В данный момент - не поддерживается, только на POSIX-совместимых платформах.

Re: некорректная сборка apcu?

Добавлено: 22 июл 2021, 21:49
zebroid
Хм... И действительно. Глянул на исходный код, и получается что стандартный shm под видной сделан через CreateFileMapping и т.д., и по идее должен работать ( https://github.com/php/php-src/blob/mas ... rm_win32.c )
Почему же у меня на машине создаётся как минимум два независимых пула памяти, которые используются случайным образом? Загадка. Ну ладно, в любом случае уменьшение количества процессов php-cgi.exe до одного решают проблему, а больше процессов для разработки и не нужно.

Re: некорректная сборка apcu?

Добавлено: 22 июл 2021, 23:12
SagePointer
zebroid писал(а): 22 июл 2021, 21:49 Почему же у меня на машине создаётся как минимум два независимых пула памяти, которые используются случайным образом? Загадка.
Там же захардкожено в apc_shm.c:
key_t key = IPC_PRIVATE;	/* shm key */
Что равно нулю, и при каждом запуске создаётся новый анонимный сегмент.