2016-11-15 6 views
0

현재 PHP7.0-FPM 사용 중 일부 문제가있는 opcache 항목을 무효화하는 데 문제가 있습니다.Opcache 상태 메모리 크기 문제

일부 파일은 opcache_get_status에서 볼 때 메모리 크기가 680.00b로 캐시됩니다. 이 파일은 대개 약 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) 
} 

을, 당신은 코드가되지 않는다고 생각한다 이 파일에 유사한 (단일 명령문, 단일 명령) 코드가 포함되어 있지 않으면 올바르게 캐시됩니다.