勉強したことのメモ

webプログラマが勉強したことのメモ。

PHP7.4でAPCuとOPcacheをインストールする方法

   

先日本ブログのサーバをCentOS6系から7系に移行し、その際にMySQLのバージョンも上がった為、クエリキャッシュが使えなくなった。その分の高速化やサーバ負荷軽減を他の部分で補おうと思い調べてみたところ、PHP7系ではAPCuとOPcacheというものがあるらしい。以下に導入方法をメモ。

 

インストール

SSH接続し、以下でインストールする。

#APCuとOPcacheをインストール
yum -y install --enablerepo=remi,remi-php74 php-opcache php-pecl-apcu

#正常にインストールされているか確認
rpm -qa | grep php

#以下がリスト内にあればOK
php-opcache-7.4.19-1.el7.remi.x86_64
php-pecl-apcu-5.1.20-1.el7.remi.7.4.x86_64

 

OPcacheの設定

#設定ファイルを開く
vi /etc/php.d/10-opcache.ini

#変更前
;opcache.memory_consumption=128

#変更後
opcache.memory_consumption=64

opcache.memory_consumptionはOPcacheに使用されるメモリのサイズ(MB単位)になる。当方の環境がメモリ1GBのサーバの為、128MBだと若干使いすぎな気がしたので64MBにした。

 

リファレンス

各種設定は以下リファレンスを参考にする。

APCu

https://www.php.net/manual/ja/apcu.configuration.php

OPcache

https://www.php.net/manual/ja/opcache.configuration.php

尚、APCuは大半の環境ではデフォルトの設定で問題無いとのこと。

 

ブラウザ上でキャッシュ状況のチェック

APCu / OPcache共に管理画面のようなものを導入すればブラウザ上でキャッシュ状況のチェックを行える。以下が対応方法。

APCu

以下をダウンロード後、展開し適当なディレクトリにアップロードする。

https://github.com/krakjoe/apcu/archive/master.zip

ブラウザから「https://ドメイン/ディレクトリ/apc.php」でアクセスできる。尚、39行目辺りの以下部分を変更することでBasic認証がかかる模様。

defaults('ADMIN_USERNAME','xxxxx'); 			// Admin Username
defaults('ADMIN_PASSWORD','xxxxx');  	// Admin Password - CHANGE THIS TO ENABLE!!!

ただ、既にBasic認証をかけているディレクトリにアップロードしており、上記変更を行うと正常に動作しなくなった。その為、既にBasic認証をかけている場合は上記変更を行わないこと。

OPcache

以下をダウンロード後、展開し適当なディレクトリにアップロードする。

https://gist.github.com/ck-on/4959032

ブラウザから「https://ドメイン/ディレクトリ/ocp.php」でアクセスできる。

 

所感

管理画面を見てみるとOPcacheは問題なく動いているようだけど、APCuの方は全く動いていないように見受けられた。調べてみるとAPCuは導入しただけでは意味が無く、「APCuを使いますよ」という以下のようなプログラムを書かないといけないらしい。

<?php
ini_set( 'display_errors', 1 );

$key = 'hoge';

$data = [
    'test',
    'hoge' => [
        'fuga',
        'foo' => 'bar'
    ]
];

apcu_store($key, $data);

print_r(apcu_cache_info());

apcu_fetch($key);

key / value形式でメモリにデータを保存するmemcachedのようなものっぽい。

 

参考サイト

https://sys-guard.com/post-13742/

 - PHP

  関連記事

PHPからMySQLデータを取得した際に一括で配列に入れる方法

MySQLからデータを取得して、PHP側で配列に入れる際に今まで一個ずつ書いてい ...

PukiWikiでバックアップのスケジュール化

PukiWikiでバックアップを取りたかった。調べたらディレクトリごと保存すれば ...

PHPでソーシャル(SNS)ログインする方法

「facebook / twitter / Googleアカウントでログインする ...

PHPで指定日から曜日を割り出す

曜日ってどうやって割り出すの? となったのでメモ。 ■リファレンス http:/ ...

PHPでeval時のエラー

eval()'d code on line みたいなエラーが出てた。 よそのシス ...

PHPでデータをファイルキャッシュさせる(Cache_Lite)

最近携わった案件でPHPでファイルキャッシュをしているシステムがあった。今までフ ...

MySQLでのエラーについて

エラーログをとるようになってから色々エラーを 見る機会が出来てきたのでメモ。 プ ...

PHPで複数の送信先に一括でメールを送る方法

PHPで複数の送信先に一括でメールを送信したかった。配列とかで指定するのかと思っ ...

地理院のジオコーディングAPIをPHPから使用する

以前に地理院のジオコーディングAPIをjavascriptからajaxでリクエス ...

PHPで他サーバにファイルをアップロードする

formで送信した内容をチェックした上で、他サーバにファイルをアップロードしたか ...