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 

それは、生成されたファイルがそう時折そこに問題があるとファイルを交換する/再キャッシュキャッシュされている珍しい設定です。

なぜopcacheがこれらのファイルを680.00bとして表示しているのか考えられる理由はありますか? opcache_resetまたはopcache_invalidateは役に立ちません。私はファイルを完全に置き換え、opcache_resetを使用して実際のファイルサイズを表示しなければならず、監視/トラブルシューティングが難しくなります。

ありがとうございます。

答えて

5

同じ消費を示す別のスクリプトについては、現在のプラットフォームで最高のパフォーマンスを発揮させるためにopcacheがメモリを割り当てる必要があります。例えば

(このコードのどれが本当ではない):

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

memsizeof 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) 
} 

を、あなたはコードがされていないことを疑う必要がありますこれらのファイルに類似の(単一の命令、単一命令)コードが含まれていない限り、正しくキャッシュされます。

関連する問題