OPcacheを利用してPHPを高速にしよう

投稿者 : OSCA

[PR] "出川哲朗の充電させてもらえませんか?"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

概要

 PHPの処理を高速にする方法の一つにバイトコード(オペコード)をキャッシュする、いわゆる PHPアクセラレータを利用する方法があります。 そのPHPアクセラレータ機能を提供するのが OPcache です。 ここでは OPcache を導入して PHP の処理を高速化する方法について解説します。

アクセラレータとは?

 プログラム言語には、プログラムをコンパイルをしないと動かせない Java などの言語があります。 一方 PHP や Perl などのスクリプト言語は、プログラムを書いたテキストファイルをサーバーにアップロードすればすぐにプログラムが動くという利点があります。 しかしながら、スクリプト言語は毎回呼び出される度にプログラムの解析・解釈が行われています。 コンパイル型の言語に比べてスクリプト言語は、「呼び出し毎にプログラムを解析する」点にオーバーヘッドがあると言えます。

 スクリプト言語においても、ソースコードが変更されていないのであればコンピュータが解釈をし直す必要がないのではないかと考えられます。 よって、コンピュータが解析済みの「バイトコード」をキャッシュして再利用すればよく、そういう機能をアクセラレータとよびます。 PHPのアクセラレータ機能を利用することでPHPを解釈する段取りをスキップすることができ、処理が高速になると言うわけです。

OPcache とは?

 PHP では OPcache というアクセラレータ機能を提供しています。 OPCache は PHP 5.5.0 で標準機能として取り込まれました。 PHP 5.2.0 〜 PHP 5.4.0 までは PECL の拡張機能という扱いでした。

OPcache のインストール

 OPcache の導入方法はご利用の環境によって異なりますので、まずはどのように PHP を導入したのかを確認してください。

 CentOS などを利用していて yum を利用して PHP を導入する(している)場合は、php-opcache というパッケージ名を検索してインストールすれば良いでしょう。 Remi リポジトリの PHP を導入している場合は、php71-php-opcache などのようなパッケージ名になっています。

# # 標準の yum リポジトリの PHP を導入した場合の例
# yum search php-opcache
# yum install php-opcache

# # Remiリポジトリから PHP 7.1 を導入した場合の例
# yum search php71-php-opcache
# yum install php71-php-opcache

OPcache の設定

 インストールが終わったら、次は設定です。 設定ファイルもインストール方法によってファイルが異なります。 筆者の身の回りの環境では、次の場所にあります。

パス説明
/etc/php.d/10-opcache.iniCentOS 標準の yum リポジトリから PHP をインストールした場合
/etc/opt/remi/php71/php.d/10-opcache.iniRemi リポジトリから PHP 7.1 を yum インストールした場合

 全ての設定項目は公式ページが詳しいですが、ここでは最低限の設定項目を紹介します。

; OPCache を有効にする (0:無効, 1:有効)
opcache.enable=1

; OPCache で利用する共有メモリサイズ (MB)
opcache.memory_consumption=128

; OPcacheのハッシュテーブル(キャッシュするスクリプト)の最大数。 設定できる値は 200 〜 100000 までの値。
opcache.max_accelerated_files=4000

 設定が完了したらWEBサーバーを再起動して設定を反映させましょう。

おわりに

 本稿ではPHPアクセラレーターである OPcache を利用してPHPを高速化する方法について解説しました。 PHPでのシステム構築ではぜひ気にしてみてください。

PHP環境構築トップページへ戻る

PHPのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca