しばらく前に気付きながら、時間もなかったので試せていなかった、php7 on ec2環境。
確認しないままだと今後のサーバ構築で検討できないなぁ、、軽く試してみました。
一応確認
# yum list | grep php php7-pear.noarch 1:1.10.1-1.24.amzn1 amzn-updates php70.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-bcmath.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-cli.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-common.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-dba.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-dbg.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-devel.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-embedded.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-enchant.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-fpm.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-gd.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-gmp.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-imap.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-intl.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-json.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-ldap.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-mbstring.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-mcrypt.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-mysqlnd.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-odbc.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-opcache.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-pdo.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-pdo-dblib.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-pecl-apcu.x86_64 5.1.5-2.2.amzn1 amzn-main php70-pecl-apcu-devel.x86_64 5.1.5-2.2.amzn1 amzn-main php70-pecl-igbinary.x86_64 1.2.2-0.1.20151217git2b7c703.5.amzn1 php70-pecl-igbinary-devel.x86_64 1.2.2-0.1.20151217git2b7c703.5.amzn1 php70-pecl-imagick.x86_64 3.4.2-1.4.amzn1 amzn-main php70-pecl-imagick-devel.x86_64 3.4.2-1.4.amzn1 amzn-main php70-pecl-memcache.x86_64 3.0.9-0.4.20160311git4991c2f.8.amzn1 php70-pecl-memcached.x86_64 3.0.0-0.1.20160217git6ace07d.2.amzn1 php70-pecl-oauth.x86_64 2.0.2-1.2.amzn1 amzn-main php70-pecl-ssh2.x86_64 1.0-5.16.amzn1 amzn-main php70-pecl-uuid.x86_64 1.0.4-7.1.amzn1 amzn-main php70-pecl-yaml.x86_64 2.0.0-1RC8.3.amzn1 amzn-main php70-pgsql.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-process.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-pspell.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-recode.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-snmp.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-soap.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-tidy.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-xml.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-xmlrpc.x86_64 7.0.14-1.20.amzn1 amzn-updates php70-zip.x86_64 7.0.14-1.20.amzn1 amzn-updates
ずらっと、、php7系のパッケージが準備されています。とりあえずいれてみます。
インストール
# yum install php70.x86_64 php70-xml.x86_64 php70-cli.x86_64 php70-common.x86_64 php70-fpm.x86_64 php70-mbstring.x86_64 php70-mcrypt.x86_64 php70-gd.x86_64 php70-pdo.x86_64 php70-mysqlnd.x86_64 # yum install mysql56-server.x86_64 # yum install nginx
これで一応ミドルウェアのインストールは完了です。続けて、とりあえず最低限のセットアップ
セットアップ
# service mysql start # mysql mysql > create database hoge default charset utf8; mysql > GRANT ALL ON hoge.* TO hogeuser@'localhost' identified by 'password'; # service nginx start
AWSのmicroインスタンスでは、php-fpmのmax_childrenのデフォルトが50になっています。この状態でapache benchをかけると、いろいろ影響するため、少しだけ調整
/etc/php-fpm.d/www.confを編集 pm.max_children = 12 pm.start_servers = 7 pm.min_spare_servers = 4 pm.max_spare_servers = 10 # service php-fpm start
あとは、、コンテンツの準備ですが、今回は試しだったので、すでに動作している環境から、mysqldumpとtarを使ってデータをまるっとコピーして動作させてみました。
確認
準備できた段階でアクセスしてみると、、無事動作しました。大きな問題もでていないように見えます(あくまで、ざっくり)。
abをかけてみると、、あくまで参考値ですがRequests per secondが、php56+nginxだと、3.1ぐらいだったのが、php7+nginxだと3.6ぐらいでてました(両環境ともEC2インスタンスCPUについては/proc/cpuinfo上同じもので、またphp-fpmの同時動作数ぐらいしか調整していません)。
結果、、ざっくり15%ぐらい性能向上した・・・ように見えますね+すでにphp7が使えるという状況なのが今後の保守を考えると嬉しいです。
AWSでphp系を動作させる場合は7導入を考えてよい時期になってますので、ご参考まで。
(2017.03.11での情報です)