PHP5和PHP7的处理速度:对PHP性能进行调查
背景 – 背景我听说只需要将PHP5升级到PHP7,处理速度就会大幅提升,所以决定进行验证。
对不起。
我虽然提出了一个很合理的借口,但其实是谎言。
实际上,这是一篇为了熟悉在Qiita上发表文章而写的,希望能作为一个参考示例。
这篇文章的目标读者
-
Dockerfileのシンプルなサンプルをみたい人
- Dockerfileのシンプルなサンプルをみたい人
- Dockerのamazonlinux2コンテナ内でPHPをインストールしたい人
这篇文章没有包括的内容。
-
LaravelやCakePHP等、フレームワークのセットアップ方法
- LaravelやCakePHP等、フレームワークのセットアップ方法
- NginxやApache等、ウェブサーバー用ミドルウェアのセットアップ方法
如果您想了解上述内容,我认为参考其他文章会更好,所以如果您能安静地关闭页面,我会非常感激。
验证环境设备: Mac mini(2018)
操作系统:macOS Catalina版本10.15.7
虚拟环境:Docker AmazonLinux2镜像
PHP5:PHP 5.6.40
PHP7:PHP 7.3.24
Dockerfile 的内容无论是PHP5还是PHP7,我们都是先登录然后安装PHP,因此我们使用相同的Dockerfile。
# AmazonLiunx2のイメージを使うよ
FROM amazonlinux:2
# ここではユーザー'bearrabi'で管理者用コマンドを使えるようにしてるだけだよ。
# PHPインストールのコマンドはここには書いてないよ
RUN yum -y update && \
yum clean all && \
yum install -y sudo && \
yum install -y vim && \
yum install -y systemd && \
yum install -y yum-utils && \
useradd bearrabi && \
echo "bearrabi ALL=NOPASSWD: ALL" >> /etc/sudoers
# コンテナログイン時のカレントディレクトリを指定
WORKDIR /usr/local/sbin
从构建Docker镜像到登录
# ディレクトリを紐づけるために、ローカルにディレクトリを作成
# 途中のディレクトリが存在しないとエラーになるから注意ね
% mkdir /Users/bearrabi/php_56/work
# 自分の指定した名前で、Dockerfileの内容をイメージ化
% docker build . -t php_dif_img
# イメージからコンテナを生成してログイン可能状態にする
% docker run -d --name php_dif_con --privileged -v /Users/bearrabi/php_56/work:/usr/local/sbin:rw php_56_img /sbin/init
# 生成したコンテナにログイン
% docker exec -it -u bearrabi php_dif_con /bin/bash
# AmazonLiunx2のイメージを使うよ
FROM amazonlinux:2
# ここではユーザー'bearrabi'で管理者用コマンドを使えるようにしてるだけだよ。
# PHPインストールのコマンドはここには書いてないよ
RUN yum -y update && \
yum clean all && \
yum install -y sudo && \
yum install -y vim && \
yum install -y systemd && \
yum install -y yum-utils && \
useradd bearrabi && \
echo "bearrabi ALL=NOPASSWD: ALL" >> /etc/sudoers
# コンテナログイン時のカレントディレクトリを指定
WORKDIR /usr/local/sbin
从构建Docker镜像到登录
# ディレクトリを紐づけるために、ローカルにディレクトリを作成
# 途中のディレクトリが存在しないとエラーになるから注意ね
% mkdir /Users/bearrabi/php_56/work
# 自分の指定した名前で、Dockerfileの内容をイメージ化
% docker build . -t php_dif_img
# イメージからコンテナを生成してログイン可能状態にする
% docker run -d --name php_dif_con --privileged -v /Users/bearrabi/php_56/work:/usr/local/sbin:rw php_56_img /sbin/init
# 生成したコンテナにログイン
% docker exec -it -u bearrabi php_dif_con /bin/bash
# ディレクトリを紐づけるために、ローカルにディレクトリを作成
# 途中のディレクトリが存在しないとエラーになるから注意ね
% mkdir /Users/bearrabi/php_56/work
# 自分の指定した名前で、Dockerfileの内容をイメージ化
% docker build . -t php_dif_img
# イメージからコンテナを生成してログイン可能状態にする
% docker run -d --name php_dif_con --privileged -v /Users/bearrabi/php_56/work:/usr/local/sbin:rw php_56_img /sbin/init
# 生成したコンテナにログイン
% docker exec -it -u bearrabi php_dif_con /bin/bash
如果显示为 [【用户】@【容器ID】 sbin]$,则表示登录成功。
在我的环境中,出现了以下情况。
[bearrabi@82461436bd6c sbin]$
安装PHP5.6
### epel(Extra Packages for Enterprise Linux)リポジトリをインストール
# レポジトリは「貯蔵庫」の意味で、epelはOSに存在していないものを保管します
# remiレポジトリをインストールするのに必要です
$ sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
### remiレポジトリをインストール
# remiレポジトリにはPHPが保管されています
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
### 各リポジトリのアップデート
$ sudo yum -y update --disablerepo=amzn2-core --enablerepo=epel,remi,remi-php56
### PHP5.6をインストール
$ sudo yum -y install --enablerepo=remi,remi-php56 php56
确认PHP的版本
$ php56 -v
PHP 5.6.40 (cli) (built: Sep 29 2020 11:42:56)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
### epel(Extra Packages for Enterprise Linux)リポジトリをインストール
# レポジトリは「貯蔵庫」の意味で、epelはOSに存在していないものを保管します
# remiレポジトリをインストールするのに必要です
$ sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
### remiレポジトリをインストール
# remiレポジトリにはPHPが保管されています
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
### 各リポジトリのアップデート
$ sudo yum -y update --disablerepo=amzn2-core --enablerepo=epel,remi,remi-php56
### PHP5.6をインストール
$ sudo yum -y install --enablerepo=remi,remi-php56 php56
$ php56 -v
PHP 5.6.40 (cli) (built: Sep 29 2020 11:42:56)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
PHP 5.6.40已安装。
PHP 5.6.40的处理速度验证
源代码 Mǎ)
<?php
// 速度計測の開始時刻をミリ秒で取得
$start_time = microtime(true);
// この変数をループ回数の上限とする
$max_loop_index = 100000000;
// ループで上限値まで繰り返し
$counter = 0;
for($i=0; $i<$max_loop_index; $i++){ $counter += 1; }
// 速度計測の終了時刻をミリ秒で取得
$end_time = microtime(true);
// 処理開始から終了まで何ミリ秒必要だったかを取得
$time_defference = $end_time - $start_time;
// 計測時間を出力
print "time: ".$time_defference."秒\n";
// ループ処理が最後まで完了しているか確認
print "counter: $counter 回ループ処理を行いました\n";
?>
执行脚本并测量结果
$ php56 test.php
time: 8.2781031131744秒
counter: 100000000 回ループ処理を行いました
<?php
// 速度計測の開始時刻をミリ秒で取得
$start_time = microtime(true);
// この変数をループ回数の上限とする
$max_loop_index = 100000000;
// ループで上限値まで繰り返し
$counter = 0;
for($i=0; $i<$max_loop_index; $i++){ $counter += 1; }
// 速度計測の終了時刻をミリ秒で取得
$end_time = microtime(true);
// 処理開始から終了まで何ミリ秒必要だったかを取得
$time_defference = $end_time - $start_time;
// 計測時間を出力
print "time: ".$time_defference."秒\n";
// ループ処理が最後まで完了しているか確認
print "counter: $counter 回ループ処理を行いました\n";
?>
执行脚本并测量结果
$ php56 test.php
time: 8.2781031131744秒
counter: 100000000 回ループ処理を行いました
$ php56 test.php
time: 8.2781031131744秒
counter: 100000000 回ループ処理を行いました
无论尝试多少次,大致上都是8.2秒。
将PHP5.6更新至PHP7.3
# インストール済みのPHPを削除
$ sudo yum -y remove php*
# インストール済みのepelレポジトリを削除
$ sudo yum -y remove epel*
# 新しいepelレポジトリをインストール
$ sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm
# 新しいremiレポジトリをインストール
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# レポジトリのアップデート
$ sudo yum -y update --disablerepo=amzn2-core --enablerepo=epel,remi,remi-php73
# php7.3をインストール
$ sudo yum -y install --disablerepo=amzn2-core --enablerepo=remi,remi-php73 php
请确认PHP的版本。
$ php -v
PHP 7.3.24 (cli) (built: Oct 27 2020 11:01:59) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.24, Copyright (c) 1998-2018 Zend Technologies
# インストール済みのPHPを削除
$ sudo yum -y remove php*
# インストール済みのepelレポジトリを削除
$ sudo yum -y remove epel*
# 新しいepelレポジトリをインストール
$ sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm
# 新しいremiレポジトリをインストール
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# レポジトリのアップデート
$ sudo yum -y update --disablerepo=amzn2-core --enablerepo=epel,remi,remi-php73
# php7.3をインストール
$ sudo yum -y install --disablerepo=amzn2-core --enablerepo=remi,remi-php73 php
$ php -v
PHP 7.3.24 (cli) (built: Oct 27 2020 11:01:59) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.24, Copyright (c) 1998-2018 Zend Technologies
已安装 PHP 7.3.24。
PHP 7.3.24的处理速度验证。
$ php test.php
time: 0.89267206192017秒
counter: 100000000 回ループ処理を行いました
$ php test.php
time: 0.89267206192017秒
counter: 100000000 回ループ処理を行いました
哎呀?
完全没有差别,反而是PHP7.3稍微慢一些啊!!
考察 – Investigate or Research也许,不仅仅是解释器的处理变得更快的原因。
在其他文章中,已经监控了通过使用库进行计算时的处理速度和内存使用情况。
※请参照以下PHP版本(5.3〜7.0)的性能比较。
在这篇文章中,明显地指出了由于PHP版本升级,处理速度变得更快。因此,可以说并不全是谎言。
最终这次我们进行了根据PHP版本对处理速度进行验证的测试。
结果表明,即使进行简单的处理,处理速度也不会有差异。
我原本希望将其作为在提出性能改进建议时的简单证据,但很遗憾?
尽管如此,Docker的基本使用方式以及不使用amazon-extra-install的PHP安装方法等都已经尽量简洁地记录下来了。希望对有需要的人能有所帮助。
以上是我的回答。
感謝您始終閱讀到最後☺️