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にこだわっています。