PHP7.0を本番適用してみた

 先日、職場のサービスに新サーバを導入するんで、良い機会なのでPHP7を導入してみた。

 今回のベースサーバはさくらの専用サーバのエンタープライズシリーズの富士通RX2530M1。
CPU:Xeon E5-2650v3 2.3GHz 10C/20T x 2
MEM:32GB
HDD:Intel DC3500 SATA SSD 240GB RAID1

 殆ど基本構成で、CPUが合計20コア40スレッドになったのと、ドライブをSSD構成に切り替えた以外はメモリもミニマム構成。
 ソフトウェア構成はCentOS6.7にApache2.2とremiからPHP7を入れた状態。 従来バージョンと異なるところと言えばZend OPcacheモジュールを追加したくらい。

 まず、mysql関数が動かないのは事前情報通り。 もう大昔のライブラリだしな・・・ 一応、php70-php-pecl-mysqlパッケージを入れると一応使える。
 split関数が死亡。 入れてから気づいた。 案外使ってるところがあって、書き直すのが面倒だったので暫定でsplit関数を作ってごまかし・・・(エスケープ処理を噛ませてpreg_splitをコールするのをオートロード)
 未到達コードの評価が変わっていた。 switch分の外にコピペミスのbreakがあって、従来は未到達だったので正常時には問題なかったんだけど、今回、未到達でも構文エラーが表示された。 元々のこっちのバグが見つかっただけだが、メジャーバージョンアップだけ合って結構扱いが変わってるんだな。
 クラスの同名関数でのコンストラクタ定義がDeprecateになってた。 test::__construct()が推奨になってて、test::test()なコンストラクタはE_DEPRECATE。

 まぁ、特に大きな問題は無く移行成功。
 PHP7は速くなったとの触れ込みだったが実際に速さに唖然としました。
 従来、12C/24Tサーバ2台のバランシングで各ロードアベレージが20位だったところ、こちら1台で同じ負荷をロードアベレージ4位で捌いている・・・
旧構成のサーバはE5-2430v2 2.5GHz 6C/12Tx2でメモリとストレージは同一構成を2台でバランシングだったから、こちら1台のパフォーマンスの高さがハンパない。 キャッシュ容量が15MBと25MBの違いはあるから、処理が15MBで収まらず25MBで収まるぐらいでハードウェア依存の速度向上と言う可能性もあるけど、しかしこのスピード感はやっぱりPHP7+OPCacheの恩恵が大きそうだな。
 

 さくらのVPSで動かしているサービスもPHP5.4>PHP7に変更したら、監視のロードアベレージグラフが劇的に低下していて、従来1.0位あったロードアベレージが0.2付近に落ち込んだし、かなりの効果がありそうだ。

 remiリポジトリからのPHP7.0導入メモ
 remiではPHP7はパッケージ名がphp70で始まるパッケージになっているので、従来のPHPパッケージを入れたまま導入可能。
 コマンドラインではphp70コマンドで呼び出し。
 導入されるディレクトリは、/opt/remi/php70以下になっていて、設定ファイル類も/etc/opt/remi/php70以下にphp.iniとかがあるので、PHP70用の設定はこっちを編集。
 従来の/etc/php.iniはEPELのphp5.4でそのまま使われる。
 Apacheへのモジュール組み込みは、/etc/httpd/conf.d/の下にphp70-php.confとかが出来ている。 remiの5.6があるとphp56-php.confがあるし、EPELのPHPがあればphp.confもあって、最初に読み込んだconfのバージョンがロードされちゃうから、PHP7をメインにする場合はphp.confとかphp56-php.confとかを削除。
 PHP7用の各種モジュールもphp70~ってパッケージなっているから、こちらで必要モジュールを組み込む。

 PHPアプリの負荷の高さにお悩みの方はバージョンアップしてみるのが良さそうです。

(669)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP]   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です