web-dev-qa-db-ja.com

apc.mmap_file_maskは実際に何をしますか?

共有環境でAPCを使用したいのですが、主な問題はもちろんオペコードの共有です。

これを克服するために、ユーザーごとに異なるapc.mmap_file_maskを使用することを考えました(ユーザーはphp-fpmを介してchrootされます)。そのため、APCによって作成された「ファイル」は共有されませんが、個人的なものになります。ユーザーに。

もちろん、私はサーバー上の理由で間違っていることに気づきました...そして最大のものは「apc.mmap_file_maskは本当に何をするのですか?」についてです:私はそれがポインタのようなものだと思っていましたAPCが使用するメモリ領域ですが、よくわかりません。
そしてもちろん、私が使用したパス(/tmp/apc.XXXXXX)にはファイルがありません。マシンの/ tmpにファイルがなく、chrootされた環境(/ home/vhosts)にファイルがありません。/0001/tmp)。
では、apc.mmap_file_maskは実際に何をしているのでしょうか。

私の実際の構成は次のとおりです。

apc.mmap_file_mask = /tmp/apc.XXXXXX
apc.num_files_hint = 2048
apc.max_file_size = 10M
apc.ttl = 7200

Phpinfo()で何が起こるかをすでに確認しましたが、値は変換されません。それでも/tmp/apc.XXXXXX(ただし、apc.phpはキャッシュがヒットしたと言っており、タイミング値が優れています...したがって機能しています)。

3

アクティブなWebサーバーでAPC.phpを試しましたか?これを説明できるMMAPではなくSHMを使用している場合。ファイルマスクを使用すると、仕様に従ってランダムな数字でapファイルを特定の場所に保存できます。こちらのブログ投稿に従って/ dev/zeroに送信することもできます http://www.nigeldunn.com/2011/05/02/unable-to-allocate-memory-pool/

さまざまなメモリ/ファイルの場所の説明は次のとおりです https://stackoverflow.com/questions/904581/shmem-vs-tmpfs-vs-mmap

私の答えは完全にはわかりませんが、SHMを使用している可能性があり、mmapマスクのパラメーターが適用されない場合があります。

aPC.phpをロードした後、これも試してください

ls /dev/shm
3
Abhishek Dujari

誰かに役立つ場合は、ファイルはほとんどすぐに削除されます。そのため、lsを介してファイルを表示することはできません(ちょうどいい秒でlsを実行しない限り)。 apc.mmap_file_maskで指定されたディレクトリでAPCによってファイルが作成および削除されるのを確認したい場合は、inotify-toolsを使用してそのディレクトリのファイルシステムアクティビティを監視できます。

インストールしてapc.mmap_file_maskディレクトリに移動し、次のコマンドを実行するだけです。他のプロセスが他の目的でそのディレクトリを使用する場合(/ tmpの場合など)、出力をgrepにパイプして、「apc」などのmmap_file_mask設定に一致するファイル名の一部を探すことができます。

/usr/bin/inotifywait -mr -e attrib,create,delete,modify,move --format '|%w/%f| %e %T' --timefmt '%Y-%m-%d-%H-%M-%S' .

#example output:

Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
|.//apc.wi3mjq| CREATE 2014-07-09-20-59-01
|.//apc.wi3mjq| MODIFY 2014-07-09-20-59-01
|.//apc.wi3mjq| DELETE 2014-07-09-20-59-01
|.//apc.EQs3Up| CREATE 2014-07-09-20-59-01
|.//apc.EQs3Up| MODIFY 2014-07-09-20-59-01
|.//apc.EQs3Up| DELETE 2014-07-09-20-59-01
|.//apc.IpNU5o| CREATE 2014-07-09-20-59-01
|.//apc.IpNU5o| MODIFY 2014-07-09-20-59-01
|.//apc.QnNU5o| CREATE 2014-07-09-20-59-01
|.//apc.QnNU5o| MODIFY 2014-07-09-20-59-01
|.//apc.QnNU5o| DELETE 2014-07-09-20-59-01

ちなみに、このトリックは、MySQLのtmpdirで一時テーブルアクティビティを確認する場合にも機能します。

2
sa289