4

PHP の APC を使用して、大量の情報 (apc_fetch()など) を格納しています。この情報は、場合によっては分析して別の場所にダンプする必要があります。

話は進みます、私は毎秒数百ヒットを取得しています。これらのヒットは、さまざまなカウンターを増加させます(apc_inc()、および友達と)。1 時間ごとに、蓄積したすべての値を反復処理し、他の処理を行ってからディスクに保存したいと考えています。

これは、各リクエストでランダムまたは時間ベースの切り替えとして実行できますが、操作が長くなる可能性があり (数分ではないにしても、20 ~ 30 秒かかる場合があります)、リクエストをそれほど長くハングさせたくありません。

私は、単純な PHP cronjob がそのタスクを実行できると考えました。ただし、キャッシュ情報を読み返すことさえできません。

<?php
  print_r(apc_cache_info());
?>

次のように、一見異なる APC メモリ セグメントが生成されます。

[num_entries] => 1

(単一のエントリは、それ自体のオペコード キャッシュのようです)

nginx/php5-fpm を搭載した私の Web サーバーでは、次の結果が得られます。

[num_entries] => 3175

したがって、それらは明らかに同じメモリ チャンクを共有していません。CLI スクリプトで同じメモリ チャンクにアクセスするにはどうすればよいか (推奨)、それが不可能な場合、たとえば 1 時間ごとにランダムな HTTP リクエストで長時間実行されるシーケンスを実行するための最も安全な方法は何でしょうか?

後者の場合、register_shutdown_function()すぐset_time_limit(0)に使用ignore_user_abort(true)してトリックを実行して、実行が完了し、ブラウザが「ハング」しないようにしますか?

はい、この問題が発生しないredis、memcacheなどを認識していますが、どちらもAPCと同じ速度を示すことができないため、今のところAPCにこだわっています。

4

1 に答える 1