2016-11-15 4 views
0

В настоящее время у меня есть некоторые проблемы, недействительные некоторые неприятные записи opcache при использовании PHP7.0-FPM.Статус Opcache Размер памяти Выпуск

Некоторые файлы кэшируются с размером памяти 680,00b, когда я просматриваю файл opcache_get_status. Эти файлы обычно имеют размер около 50kb и, похоже, кэшируются правильно, но Opcache сообщает, что количество этих файлов составляет ровно 680,00b.

Opcache Настройка:

; configuration for php opcache module 
; priority=10 
zend_extension=opcache.so 
opcache.memory_consumption=16384 
opcache.max_accelerated_files=32531 
opcache.validate_timestamps=0 
opcache.revalidate_freq=600 
opcache.max_file_size=0 
opcache.fast_shutdown=1 

Это необычная настройка, где сгенерированные файлы кэшируются так случайном есть проблемы и файлы заменяется/recached.

Есть ли причина, по которой каждый может подумать, почему opcache показывает эти файлы как 680.00b? Операция opcache_reset или opcache_invalidate не помогает. Я должен полностью заменить файлы и использовать opcache_reset, чтобы они отображались с их истинным размером файла, и это затрудняет мониторинг/устранение неполадок.

Заранее спасибо.

ответ

5

Когда речь заходит о разных сценариях, показывающих одно и то же потребление: одна из возможных причин заключается в том, что в opcache необходимо выделить выделенную память для максимальной производительности на текущей платформе.

Например (ни один из этого кода не реально):

void *mem = zend_opcache_alloc(sizeof(void*)); 

mem будет sizeof void* + ZEND_MM_ALIGNMENT(sizeof void*, platform)

Так что есть какое-то обивка в конце области, чтобы заставить лучшее выравнивание, это означает, что вы могли бы выделить (например) 8 байтов или 64 байта и были бы возвращены 128-байтовый блок (ни один из этих чисел не верен).

Это может привести к тому, что разные сценарии имеют одинаковый размер по совпадению.

Когда речь заходит о том, почему некоторые скрипты используют очень небольшое количество памяти:

<?php 
$a = 1; 
?> 

дает следующую статистику:

["/usr/src/php-src/test.php"]=> 
array(6) { 
    ["full_path"]=> 
    string(25) "/usr/src/php-src/test.php" 
    ["hits"]=> 
    int(0) 
    ["memory_consumption"]=> 
    int(696) 
    ["last_used"]=> 
    string(24) "Wed Nov 16 05:47:26 2016" 
    ["last_used_timestamp"]=> 
    int(1479275246) 
    ["timestamp"]=> 
    int(1479275244) 
} 

Таким образом, вы должны подозревать, что код не является кэшируется правильно, если только эти файлы не содержат аналогичный (один оператор, одна инструкция).