web-dev-qa-db-ja.com

APC(PHPキャッシュ)稼働時間0分、キャッシュなし

私の目標は、drupal 6本番サイトのオペコードキャッシュにAPCを実装することです。これまで、include_onceを含む他のphpファイルを含める場合と含めない場合のいくつかのphpファイルでAPCをテストしました。

また、shm_size、apc.include_once_override、apc.statのapc.ini値を微調整しようとしました。毎回Apacheを再起動しました。

その結果、apc.phpは値の変更を表示しません。 (もちろん、変更されたapc.ini値は表示されます)

Apc.phpテストページを更新するたびに、開始時刻が現在の時刻としてリセットされ、稼働時間が0分になります。

apc.php -testpageは以下を示しています:

General Cache InformationAPC Version    3.1.9
PHP Version 5.2.10
APC Host    xxxx.xx.xx
Server Software Apache/2.2.3 (CentOS)
Shared Memory   1 Segment(s) with 128.0 MBytes
(mmap memory, pthread mutex Locks locking)
Start Time  2011/07/26 11:53:56
Uptime  0 minutes
File Upload Support 1


Cached Files    0 ( 0.0 Bytes)
Hits    1
Misses  1
Request Rate (hits, misses) 2.00 cache requests/second
Hit Rate    1.00 cache requests/second
Miss Rate   1.00 cache requests/second
Insert Rate 0.00 cache requests/second
Cache full count    0

Cached Variables    0 ( 0.0 Bytes)
Hits    0
Misses  0
Request Rate (hits, misses) 0.00 cache requests/second
Hit Rate    0.00 cache requests/second
Miss Rate   0.00 cache requests/second
Insert Rate 0.00 cache requests/second
Cache full count    0


apc.cache_by_default    1
apc.canonicalize    1
apc.coredump_unmap  0
apc.enable_cli  0
apc.enabled 1
apc.file_md5    0
apc.file_update_protection  2
apc.filters 
apc.gc_ttl  3600
apc.include_once_override   0
apc.lazy_classes    0
apc.lazy_functions  0
apc.max_file_size   16
apc.mmap_file_mask  /tmp/apcphp5.095eRm
apc.num_files_hint  1024
apc.preload_path    
apc.report_autofilter   0
apc.rfc1867 0
apc.rfc1867_freq    0
apc.rfc1867_name    APC_UPLOAD_PROGRESS
apc.rfc1867_prefix  upload_
apc.rfc1867_ttl 3600
apc.serializer  default
apc.shm_segments    1
apc.shm_size    128M
apc.slam_defense    0
apc.stat    0
apc.stat_ctime  0
apc.ttl 7200
apc.use_request_time    1
apc.user_entries_hint   4096
apc.user_ttl    7200
apc.write_lock  1

Host Status Diagrams:
 Free: 128.0 MBytes (100.0%)     Hits: 1 (50.0%)
 Used: 20.3 KBytes (0.0%)    Misses: 1 (50.0%)

Detailed Memory Usage and Fragmentation:
Fragmentation: 0%

phpinfoは示しています:

Server API  CGI/FastCGI

APC:
Version     3.1.9
APC Debugging   Enabled
MMAP Support    Enabled
MMAP File Mask  /tmp/apcphp5.JkKDk7
Locking type    pthread mutex Locks
Serialization Support   php
Revision    $Revision: 308812 $
Build Date  Jul 21 2011 14:31:12

次の手順に従って、suexec設定でキャッシュが妨げられるかどうかを確認しました。 http://www.litespeedtech.com/support/forum/showthread.php?t=4189

[root@Host /]# ps -ef|grep lsphp
root     20402 17833  0 11:21 pts/0    00:00:00 grep lsphp

[root@Host /]# ps -waux
root     17833  0.0  0.1   5004  1484 pts/0    S    10:39   0:00 bash

..ホストで実行されているlsphpがないことを示します

また、次の記事とコメントを読んで、私の場合、ユーザーApacheがhttpdプロセスの所有者であるため問題はsuexecではないと結論付けています http://www.brandonturner.net/blog/2009/07/fastcgi_with_php_opcode_cache /

また、suexecコマンドは、root @ Hostとしてログに記録され、起動されたときに認識されません。

また、ホスト上で実行されているcPanelがないことをほぼ確信しており、そこで設定すると、実行中のキャッシュプロセスが一定の間隔でリセットされるかどうかを確認できます。

これは私に次に向かうべき場所のいくつかの手がかりを残します。 Apacheをapc.phpファイルといくつかのテストphpファイルの所有者として(chownとchgrpで)設定しようとすると、500サーバーエラーが発生しました。

ファイルのパーミッションがapcの実行を妨げるかどうかを確認する方法はありますか?私はどんな提案や助けにも非常に感謝しています。

3
Jussi

構成では、 apc.max_file_size16bytesに設定されていることが示されています。したがって、16バイトを超えるファイルはキャッシュされません(すべてがキャッシュされます!)。これをデフォルトの1Mにリセットします。

3
Michael Hampton

そのホストでSELinuxが有効になっていますか? getenforceで確認してください。 Enforcingを返す場合は、有効になっています。

有効になっていて不要な場合は、一時的に(つまり、次の再起動まで)setenforce 0で無効にしてみてください。これで問題が解決し、SELinuxを永続的に無効にする必要がある場合は、/etc/selinux/configファイルを変更して、そこで無効に設定します。あるいは、SELinuxをより寛容になるように変更することもできますが、それは別のトピックであり、これが本当にSELinuxのせいである場合は、それに戻ります。 :-)

EDIT: OK、SELinuxが無効になりました。

/ tmpの下に/tmp/apcphp5.JkKDk7スタイリッシュなファイルが表示されていますか?

0

同様の問題を探している人がこれを見つけた場合は、apc.enable_opcode_cache = 1を確認する必要があります。

「開発ブランチ(3.1.5dev)で、オペコードキャッシュ(apc.enable_opcode_cache = 0)を無効にするオプションが導入されました。これにより、ユーザーデータに対して厳密にZendOPcacheとAPCを使用できます。」 -レミブログ

0
Jay

私も同じ問題を抱えていました。それはtmpの問題でした。 mmap_file_maskを/ dev/zeroに設定すると、キャッシュされます。同じユーザー名でdrupal.orgに投稿された詳細。

Tmpにパーミッションを設定しても、正しいパーミッションでマウントされていない場合は役に立ちません。

0
John_B