<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/apcu.setup.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'apcu.configuration.php',
    1 => '実行時設定',
    2 => '実行時設定',
  ),
  'up' => 
  array (
    0 => 'apcu.setup.php',
    1 => 'インストール/設定',
  ),
  'prev' => 
  array (
    0 => 'apcu.installation.php',
    1 => 'インストール手順',
  ),
  'next' => 
  array (
    0 => 'apcu.constants.php',
    1 => '定義済み定数',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'reference/apcu/ini.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="apcu.configuration" class="section">
 <h2 class="title">実行時設定</h2>
 <p class="simpara">
<var class="filename">php.ini</var> の設定により動作が変化します。
</p>
 <p class="simpara">
  大半のインストール環境では、APCu はデフォルトの設定で問題ありません。
  しかし、本格的なユーザーは以下のパラメータのチューニングを考慮すべきです。
 </p>
 <p class="simpara">
  APCuを設定するには、ひとつ決断が必要です。
  どれくらいのメモリをAPCuに割り当てるのかということです。
  この値を制御するのは <code class="literal">apc.shm_size</code> です。
  以下のこれに関するセクションを注意深く読んで下さい。
 </p>
 <p class="simpara">
  サーバーがいったん起動したら、
  拡張モジュールにバンドルされている <code class="literal">apc.php</code>
  スクリプトをドキュメントルートのどこかにコピーし、ブラウザから見てみましょう。
  apcu の内部動作を詳細に分析した情報が見られるからです。
  gd が有効になっている場合、面白いグラフも見られるでしょう。
  </p>
  <p class="simpara">
   apcu が動作している場合、(左側の) <code class="literal">Cache full count</code>
   の数が、キャッシュの容量が一杯になり、
   メモリを開放するためにエントリを強制的に掃除しなければならなかった回数を示しています。
   強制的に掃除している間、<code class="literal">apc.ttl</code> が指定されている場合、
   APCu はまず期限切れのエントリを削除しようとします。
   つまり、TTL が期限切れになったか、
   TTL が設定されずに <code class="literal">apc.ttl</code> 秒間アクセスがないエントリです。
   <code class="literal">apc.ttl</code> が指定されていないか、
   期限切れのエントリを削除しても十分な容量を確保できない場合、
   APCu はキャッシュ全体を削除してしまいます。
  </p>
  <p class="simpara">
   強制的に掃除しなければならなかった回数は、
   上手に設定されているキャッシュであれば最小にすべきです。
   キャッシュが頻繁に一杯になり、強制的に開放される場合、
   スクリプトのパフォーマンスに悪影響が出てしまいます。
   この数値を最小にする一番簡単な方法は、APCu により多くのメモリを割り当てることです。
 </p>
 <p class="simpara">
  APCu が mmap (メモリマッピング) のサポートを有効にしてコンパイルされている場合、
  APCu はメモリセグメントをひとつしか使いません。
  一方で、SHM (SysV共有メモリ) を有効にしてビルドした場合は、複数のメモリセグメントを使います。
  SHM は <code class="literal">/proc/sys/kernel/shmmax</code> で最大値を持っていますが、MMAP にはそれがありません。
  一般的には、MMAP のサポートを有効にすることをおすすめします。
  なぜなら、MMAPはWebサーバーが再起動したときのメモリの再要求の速度が速く、
  全体として起動時のメモリ割り当ての負荷が減るからです。
 </p>
 <p class="para">
  <table class="doctable table">
   <caption><strong>APCu の設定オプション</strong></caption>
   
    <thead>
     <tr>
      <th>名前</th>
      <th>デフォルト</th>
      <th>変更可能</th>
      <th>変更履歴</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td><a href="apcu.configuration.php#ini.apcu.enabled" class="link">apc.enabled</a></td>
      <td>1</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="apcu.configuration.php#ini.apcu.shm-segments" class="link">apc.shm_segments</a></td>
      <td>1</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="apcu.configuration.php#ini.apcu.shm-size" class="link">apc.shm_size</a></td>
      <td>&quot;32M&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="apcu.configuration.php#ini.apcu.entries-hint" class="link">apc.entries_hint</a></td>
      <td>512 * apc.shm_size</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td>APcu 5.1.25 より前のバージョンでは、この値のデフォルト値は 4096 でした。</td>
     </tr>

     <tr>
      <td><a href="apcu.configuration.php#ini.apcu.ttl" class="link">apc.ttl</a></td>
      <td>0</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="apcu.configuration.php#ini.apcu.gc-ttl" class="link">apc.gc_ttl</a></td>
      <td>3600</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="apcu.configuration.php#ini.apcu.mmap-file-mask" class="link">apc.mmap_file_mask</a></td>
      <td>NULL</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="apcu.configuration.php#ini.apcu.slam-defense" class="link">apc.slam_defense</a></td>
      <td>0</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="apcu.configuration.php#ini.apcu.enable-cli" class="link">apc.enable_cli</a></td>
      <td>0</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="apcu.configuration.php#ini.apcu.use-request-time" class="link">apc.use_request_time</a></td>
      <td>0</td>
      <td><strong><code><a href="info.constants.php#constant.ini-all">INI_ALL</a></code></strong></td>
      <td>APCu 5.1.19 より前のバージョンでは、デフォルト値は <code class="literal">1</code> でした。</td>
     </tr>

     <tr>
      <td><a href="apcu.configuration.php#ini.apcu.serializer" class="link">apc.serializer</a></td>
      <td>&quot;php&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td>APCu 5.1.15 より前のバージョンでは、デフォルト値は <code class="literal">&quot;default&quot;</code> でした。</td>
     </tr>

     <tr>
      <td><a href="apcu.configuration.php#ini.apcu.coredump-unmap" class="link">apc.coredump_unmap</a></td>
      <td>0</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="apcu.configuration.php#ini.apcu.preload-path" class="link">apc.preload_path</a></td>
      <td>NULL</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

    </tbody>
   
  </table>

  INI_* モードの詳細および定義については
<a href="configuration.changes.modes.php" class="xref">どこで設定を行うのか</a> を参照してください。
 </p>

 <p class="para">以下に設定ディレクティブに関する
簡単な説明を示します。</p>

 <dl>
  
   <dt id="ini.apcu.enabled">
    <code class="parameter">apc.enabled</code>
    <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>
   </dt>
   <dd>
    <span class="simpara">
     APC を無効にする場合、<code class="literal">apc.enabled</code> を0に設定できます。
     これはAPCがPHPに静的にコンパイルされている場合に役に立ちます。
     なぜなら、これ以外にAPCを無効にする方法がないからです。
     (DSO としてコンパイルされている場合、
     <code class="literal">php.ini</code> の <code class="literal">extension</code> の行をコメントアウトすれば済みます)
    </span>
   </dd>
  
  
   <dt id="ini.apcu.shm-segments">
    <code class="parameter">apc.shm_segments</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     コンパイラキャッシュに割り当てる共有メモリセグメントの数。
     APC の共有メモリが不足したが、<code class="literal">apc.shm_size</code>
     にシステムが許可できるできるだけ高い値を設定している場合、
     この値を増やすことでAPCがメモリ不足になることを避けられるかもしれません。
    </span>
   </dd>
  
  
   <dt id="ini.apcu.shm-size">
    <code class="parameter">apc.shm_size</code>
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   </dt>
   <dd>
    <span class="simpara">
     個別の共有メモリセグメントのサイズ。
     <a href="faq.using.php#faq.using.shorthandbytes" class="link">このFAQ</a> で説明している短縮記法を使います。
     デフォルトでは、システムによって(ほとんどのBSD系)は、
     共有メモリセグメントのサイズの限界値がとても小さい場合があります。
    </span>
   </dd>
  
  
   <dt id="ini.apcu.entries-hint">
    <code class="parameter">apc.entries_hint</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     異なる値を保存する数のおおよその&quot;ヒント&quot;。
     わからない場合はゼロを設定して下さい。
    </span>
   </dd>
  
  
   <dt id="ini.apcu.ttl">
    <code class="parameter">apc.ttl</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     ここで指定された秒数アクセスされていない場合、
     TTL を明示的に指定しないキャッシュエントリが期限切れとみなされます。
     こうすることで、キャッシュを挿入している間や、すべてのキャッシュを削除する前に、
     そうした期限切れのエントリを都合よく削除できます。
     こうした削除は場当たり的に行われるため、
     <code class="literal">apc.ttl</code> 秒より古いデータであっても
     まだ読み取れてしまうことがあり得るので注意してください。
     この設定は、TTLが明示的に指定されたキャッシュエントリに対しては意味がありません。
    </span>
   </dd>
  
  
   <dt id="ini.apcu.gc-ttl">
    <code class="parameter">apc.gc_ttl</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     削除されたり、無効になったキャッシュエントリがガベージコレクションのリストに残っても良い秒数。
     エントリは、リファレンスカウントがゼロになった時、またはこの設定の秒数を越えた場合に、削除候補になります。
     <code class="literal">0</code> を設定すると、時間ベースの削除機能は無効になり、リファレンスカウントがゼロになったときにのみ削除されます。
    </span>
   </dd>
  
  
   <dt id="ini.apcu.mmap-file-mask">
    <code class="parameter">apc.mmap_file_mask</code>
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   </dt>
   <dd>
    <span class="simpara">
     <code class="literal">--enable-mmap</code> を使ってPHPをコンパイルした場合に、
     mmapされたメモリ領域をファイルベースか共有メモリベースにするかを決めるために、
     mmapモジュールに渡すmktempスタイルのファイルマスク。
     ファイルベースのmmapの場合、
     <code class="literal">/tmp/apc.XXXXXX</code> のように設定します
     (<code class="literal">X</code> はちょうど6つにして下さい)。
     POSIXスタイルの shm_open/mmap を使う場合、
     <code class="literal">.shm</code> をマスクのどこかに含めて下さい。
     e.g. <code class="literal">/apc.shm.XXXXXX</code>。
     匿名のmmapされたメモリを使うために
     kernel の <code class="literal">/dev/zero</code> インターフェイスを使う場合、
     この値に <code class="literal">/dev/zero</code> も設定できます。
    </span>
   </dd>
  
  
   <dt id="ini.apcu.slam-defense">
    <code class="parameter">apc.slam_defense</code>
    <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>
   </dt>
   <dd>
    <span class="simpara">
     とても負荷が高いサーバーでは、いつサーバーを起動したり、
     変更したりしても、同じファイルを同時にキャッシュしようとする
     多くのプロセスの競合が発生します。
     <code class="literal">apc.slam_defense</code> の値を <code class="literal">1</code>
     に設定すると、確率的な仕組みを使うことで、
     複数のプロセスが同時に同じファイルをキャッシュするのを防ぐのを助けます。
     同じキーが短期間に異なるプロセスからキャッシュされようとすると、
     現在のプロセスがキャッシュをスラム化させるのを防ぐため、
     キャッシュをスキップします。
    </span>
   </dd>
  
  
   <dt id="ini.apcu.enable-cli">
    <code class="parameter">apc.enable_cli</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     この設定はほとんどの場合、テストかデバッグに使います。
     これを設定すると、CLI版PHPでAPCが有効になります。
     通常の状態では、CLI リクエストのたびにAPCキャッシュを生成し、
     収集し、破棄するのは望ましくありません。しかし、テストシナリオによっては、
     CLI版のPHPでAPCを簡単に有効に出来た方が便利な場合があります。
    </span>
   </dd>
  
  
   <dt id="ini.apcu.serializer">
    <code class="parameter">apc.serializer</code>
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   </dt>
   <dd>
    <span class="simpara">
     APCにサードパーティーのシリアライザを使わせる場合に使います。
    </span>
   </dd>
  
  
   <dt id="ini.apcu.coredump-unmap">
    <code class="parameter">apc.coredump_unmap</code>
    <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>
   </dt>
   <dd>
    <span class="simpara">
     SIGSEGV のようなシグナルのシグナルハンドラをAPCで有効にします。
     ハンドラでは、シグナルを受け取ったときにコアファイルに書き込みます。
     これらのシグナルを受け取った場合、
     APC はコアファイルから除外するために共有メモリセグメントをアンマップしようとします。
     この設定は致命的なシグナルを受け取ったり、
     APCの共有メモリセグメントの数を大きく設定している場合に、
     システムの安定性を向上させる可能性があります。
    </span>
    <div class="warning"><strong class="warning">警告</strong>
     <p class="simpara">
      この機能は潜在的に危険です。
      致命的なシグナルハンドラで共有メモリセグメントをアンマップすると、
      致命的なエラーが発生したときの動作が未定義になる可能性があるからです。
     </p>
    </div>
    <blockquote class="note"><p><strong class="note">注意</strong>: 
     <span class="simpara">
      kernel によっては、コアダンプファイルを生成するときに
      様々なタイプの共有メモリを無視する機能を提供するものがあります。
      こうしたkernelの実装は、
      Apache scoreboard のような重要な共有メモリセグメントも無視するかもしれません。
     </span>
    </p></blockquote>
   </dd>
  
  
   <dt id="ini.apcu.preload-path">
    <code class="parameter">apc.preload_path</code>
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   </dt>
   <dd>
    <span class="simpara">
     オプション。キャッシュデータを起動時に読み込むディレクトリのパスを設定します。
    </span>
   </dd>
  

  
   <dt id="ini.apcu.use-request-time">
    <code class="parameter">apc.use_request_time</code>
    <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>
   </dt>
   <dd>
    <span class="simpara">
     <abbr>TTL</abbr> に <abbr title="Server Application Programming Interface">SAPI</abbr> リクエストの開始時刻を使います。
    </span>
   </dd>
  
 </dl>
</div><?php manual_footer($setup); ?>