XCacheキャッシュの内容で詰まっている、または分析しているメモリは何ですか


この番号は気になりますか? 私も。

まず第一に、私の投稿はサーバー上で多くのサイトをホストしている人に向けられています。 他の人にとっては、キャッシュされたファイルのパスのフラグメントに沿ってグループ化をすばやく追加できるため、これも便利です。

キャッシュに割り当てられたRAMが多すぎる可能性があります。 重いがめったに訪れないサイトを無効にすることで、そのサイズを大幅に削減できます。 そのようなサイトの計算をお手伝いします。

PHPアクセラレータを使用しないアプリケーションやサーバーはこれ以上ないと思います。 2つの一般的なアクセラレータの1つはXCacheです。 おそらく誰かがこのアクセラレータを使用していますが、しばらくしてからミニマリストの管理パネルが含まれていることを知りません。

管理パネルは非常に便利な機能です。実行可能スクリプトのバイトコードを保存するために割り当てられたRAMの最適なサイズを選択できます。 また、保存されたデータを表示して削除することもできます。

キャッシュされたスクリプトのリストは、長いソーセージのように見えます。 管理パネルにはデータを並べ替えるための組み込みツールがありますが、このような長いリストを操作することはできません。


通常の管理パネルに統計を追加します

管理パネルはオープンソースのPHPで記述されているため、必要な機能を追加して変更します。


リストPHPページに追加します。
1.ホストごとのスクリプトの統計
2.スクリプトをホストごとにフィルタリングします(正確には、プレフィックスごとに)。

xcache.tpl.php行150

foreach (array('Cached' => $cachelist['cache_list'], 'Deleted' => $cachelist['deleted_list']) as $listname => $entries) { $a->reset(); 

加える
  if ($listname == 'Cached') { $hosts = array(); $filtertrash = array('', 'usr', 'home'); foreach ($entries as $i => $entry) { if (strpos($entry['name'], $_SERVER['DOCUMENT_ROOT']) === 0) { $host = $_SERVER['DOCUMENT_ROOT']; $prefix = $_SERVER['DOCUMENT_ROOT']; } else { $pos = 0; foreach (explode('/', $entry['name']) as $host) { if (!in_array($host, $filtertrash)) break; $pos += strlen($host) + 1; } $prefix = substr($entry['name'], 0, strpos($entry['name'], $host, $pos) + strlen($host)); } if (isset($hosts[$host])) { $hosts[$host]['files']++; $hosts[$host]['hits'] += $entry['hits']; $hosts[$host]['size'] += $entry['size']; } else { $hosts[$host] = array( 'prefix' => $prefix, 'files' => 1, 'hits' => $entry['hits'], 'size' => $entry['size'], ); } } ?> <table cellspacing="0" cellpadding="4" class="cycles entries"> <tr><th>Host</th><th>Files</th><th>Hits</th><th>Size</th><th>Ratio(size/hits)</th></tr> <?php uasort($hosts, create_function('$a,$b' , 'return $b["size"] - $a["size"];')); foreach ($hosts as $host => $hoststats) { ?><tr><td><a href="?type=0&prefix=<?=$hoststats['prefix']?>"><?=$host?></a></td><td><?=$hoststats['files']?></td><td><?=$hoststats['hits']?></td> <td><?= ($hoststats['size'] > 1048576 ? round($hoststats['size'] / 1048576).' M' : ($hoststats['size'] > 1024 ? round($hoststats['size'] / 1024).' k' : $hoststats['size']) ) ?></td> <td><?=round($hoststats['size']/$hoststats['hits'])?> </tr> <?php } ?> </table> <?php } 

ここでは、スクリプト名からホスト名を切り取るか、chrootホストにDOCUMENT_ROOTを使用します。
私のサイトのすべてのスクリプトは/ usr / home / HOST /にあります
各ホストについて、統計を考慮します。

次の画面は、この方法でサイクルの開始を変更します。 並べ替えられた行に注意してください。
  foreach ($entries as $i => $entry) { $name = htmlspecialchars($entry['name']); if (!empty($_GET['prefix']) && strpos($name, $_GET['prefix']) !== 0) { continue; } echo " <tr ", $a->next(), ">"; 

これは、$ _GET ['prefix']で渡されるプレフィックスによるテーブルフィルターです。

結果

ホスト統計を更新して楽しむ


最後の列で最も興味深いのは、要求のサイズと数に基づいて、占有メモリの効率を基本的に計算したことです。
ほとんどの場合、はるかに広い範囲の値が表示されます。 私のテーブルはすでに仕事が終わった後です。その結果、私はかなりのトラフィックのない厚いサイトを捨てました。

不要なキャッシュを無効にする方法は?

キャッシュを無効にすると、スクリプトが開始されるたびにバイトコードが生成されます。 それでも、アクセラレータなしで動作した場合よりも高速に実行されます。

キャッシュを無効にするには、標準のINI変数を設定する必要があります
 xcache.cacher = Off 

個々のホストとファイルについては、次のオプションを使用する必要があります
1. php.iniで各ホストのセクションを入力します
 [HOST=<host>] xcache.cacher = Off 

2. FCGI / FPM / 5.3 +を使用している場合は、 .user.iniファイルをスクリプトフォルダーに配置します。
 xcache.cacher = Off 

このフォルダーにあるすべてのスクリプトおよび以下のすべてのレベルでキャッシュが無効になります

3. Apacheがある場合
 <IfModule mod_php5.c> php_value xcache.cacher Off </IfModule> 


おわりに

私の簡単な指示がRAMを解放するのに役立つことを願っています。 今それをどこで使うか? まあ、多くの工作員がいないので、どこかに成長します。

Source: https://habr.com/ru/post/J187118/


All Articles