PHP7透過yum源安裝及效能測試
提到PHP,肯定會有人說這是世界上最好的程式語言。單說流行程度,目前全球超過81.7%的伺服器後端都採用了PHP語言,它驅動著全球超過2億多個網站。上月初PHP7正式版釋出,迎來自2004年以來最大的版本更新。現在PHP 7.0正式釋出。
對於普通的PHP網站,主要是IO密集型的,瓶頸在MySQL資料之上,體現不出來PHP效能的劣勢。但在密集計算方面比C、C++、Java這種靜態編譯型語言差幾十倍甚至上百倍。如果在PHP開發中使用了比較複雜的框架,如symfony,程式效能會明顯下降。事實上,PHP語言最初的設計,就不是用來解決計算密集型的應用場景。我們可以這樣粗略理解為,PHP為了提升開發效率,而犧牲了執行效率。
但PHP比較流行,如新浪微博、Facebook這種大型網站大部分程式都是使用PHP寫的,也就是在這種大規模應用下,PHP效能低下就顯現出來了。Facebook早期的很多程式碼是使用PHP來開發的,但是,隨著業務的快速發展,PHP執行效率成為越來越明顯的問題。為了最佳化執行效率,Facebook在2008年就開始使用HipHop,這是一種PHP執行引擎,最初是為了將Fackbook的大量PHP程式碼轉成 C++,以提高效能和節約資源。使用HipHop的PHP程式碼在效能上有數倍的提升。後來,Facebook將HipHop平臺開源,逐漸發展為現在的HHVM。HHVM用來替換PHP自身使用的引擎Zend Engine。據說效能提升了70%。當然PHP官方也知道PHP最大的短板,於是推出了PHP7專案,主要是重構了Zend Engine引擎。
PHP7最顯著的變化就是效能的極大提升,已接近Facebook開發的PHP執行引擎HHVM。在WordPress基準效能測試中,速度比5.6版本要快2~3倍,大大減少了記憶體佔用。PHP7在語言上也有一些變化,比如新增返回型別宣告、增加了一些新的保留關鍵字等。在安全方面,去除了PHP安全模式,新增魔術引號等。不僅如此,新版還支援64位,而且包含最新版Zend引擎。其實PHP7的在真實場景的效能確實已經和HHVM相當,在一些場景甚至超過了HHVM。但HHVM的運維複雜, 是多執行緒模型, 這就代表著如果一個執行緒導致crash了, 那麼整個服務就掛了, 並且它不會自動重啟。另外它採用JIT, 那麼意味著, 重啟以後要預熱, 沒有預熱的情況下, 效能較為糟糕。並且多執行緒模型除錯困難, 這對於追求穩定來說的Web服務來說, 是非常不適合的。
想使用最新版PHP,就需要使用到REMI源,Remi repository是包含最新版本PHP和MySQL包的 源,由Remi提供維護。有個這個源之後,使用YUM安裝或更新PHP、MySQL較新版本了。
安裝最新的Remi源自動安裝檔案
# CentOS 6 / RHEL 6 yum install # CentOS 7 / RHEL 7 yum install
安裝PHP相關元件,下面提供的是一個生產環境中可以使用的標配安裝。
$ yum --enablerepo=remi,remi-php70 install php \ php-cgi \ php-cli \ php-fpm \ php-common \ php-devel \ php-mysqlnd \ php-mysql \ php-sqlite3 \ php-mbstring \ php-msgpack \ php-mcrypt \ php-bcmath \ php-gd \ php-xml \ php-ldap \ php-xmlrpc \ php-opcache \ php-curl \ php-json \ php-odbc \ php-pdo \ php-bz2 \ php-xml \ php-ftp \ php-imap \ php-snmp \ php-redis \ php-memcached
檢視PHP版本
$ php -v PHP 7.0.9 (cli) (built: Jul 20 2016 18:08:08) ( NTS )
啟動PHP-FPM
$ service php-fpm start
到這裡,PHP7.0就安裝完成了。如果需要用到PHP擴充套件功能,如redis、memcached等,只需要也使用YUM安裝即可,如下:
$ yum --enablerepo=remi,remi-php70 install php-redis php-memcached
如果在REMI或EPEL源中都找不到你需要的擴充套件模組,那麼就需要手動編譯安裝了,也很簡單。
另外檢視PHP模組資訊使用php -m命令。
$ php -m | grep redis redis
安裝一套LNMP參考:LNMP安裝包部署實戰或者參考PHP7.0版本的LNMPZabbix 3.0安裝使用詳解
環境:4核 CPU,記憶體4G,作業系統Centos 6.5。
首先說一點GCC編譯器的建議,據 建議,使用新一點的編譯器,推薦 GCC 4.8以上,因為只有GCC 4.8以上PHP才會開啟Global Register for opline and execute_data支援, 這個會帶來5%左右的效能提升。
寫一段程式(網上提供的簡單測試方法):
第一段,生成一個 60 萬元素的陣列,透過查詢key 的方式,來確定key是否存在。
< ?php $a = array(); for($i=0;$i<600000;$i++){ $a[$i] = $i; } foreach($a as $i) { array_key_exists($i, $a); }
首先是PHP 5.3.17版。
[root@localhost test]# time php search_by_key.php real 0m0.389s user 0m0.337s sys 0m0.051s [root@localhost test]# time php search_by_key.php real 0m0.378s user 0m0.308s sys 0m0.062s [root@localhost test]# time php search_by_key.php real 0m0.378s user 0m0.317s sys 0m0.061s
其次是PHP 7.0版本。
[root@localhost php7]# time php7 search_by_key.php real 0m0.082s user 0m0.066s sys 0m0.014s [root@localhost php7]# time php7 search_by_key.php real 0m0.080s user 0m0.058s sys 0m0.021s [root@localhost php7]# time php7 search_by_key.php real 0m0.080s user 0m0.053s sys 0m0.026s`
響應時間在PHP7下執行變為原來的1/4。
還是上面的這個方式,不過由於速度較慢,所以變成了一個60000個元素的陣列,查詢值。
< ?php $a = array(); for($i=0;$i<600000;$i++){ $a[$i] = $i; } foreach($a as $i) { array_key_exists($i, $a); } [root@localhost test]# time php search_by_val.php real 0m24.296s user 0m24.184s sys 0m0.025s [root@localhost test]# time php search_by_val.php real 0m25.523s user 0m25.317s sys 0m0.026s [root@localhost test]# time php search_by_val.php real 0m26.026s user 0m25.478s sys 0m0.092s
等待的時間,總是覺得很漫長,三次測試,花掉了75秒多。下面,PHP 7 登場了。
[root@localhost php7]# time php7 search_by_val.php real 0m3.362s user 0m3.323s sys 0m0.007s [root@localhost php7]# time php7 search_by_val.php real 0m3.266s user 0m3.251s sys 0m0.004s [root@localhost php7]# time php7 search_by_val.php real 0m3.290s user 0m3.275s sys 0m0.006s
有沒有!速度整整提高了將近7倍。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524109/viewspace-2636807/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- cenos上透過yum安裝mariadb
- CentOS配置Nginx官方的Yum源及yum安裝phpCentOSNginxPHP
- 透過iozone測試硬碟效能硬碟
- centos7透過yum安裝JDK1.8CentOSJDK
- CentOS7 透過YUM安裝MySQL5.7CentOSMySql
- 製作yum源及安裝賽門鐵克
- 配置本地yum源及安裝必要的包
- 12C安裝及本地YUM源配置
- 6.linux->MySQL 安裝及效能測試LinuxMySql
- postgres yum源安裝
- yum安裝及使用全集
- Zookeeper 在Windows下的安裝過程及測試Windows
- hadoop單機安裝配置及測試通過Hadoop
- Linux中如何透過yum或者apt下載安裝MySQLLinuxAPTMySql
- kaldi 的安裝及測試
- 效能測試 -- docker安裝influxdbDockerUX
- CentOS7 yum 安裝 nginx 和 PHP7 訪問白屏CentOSNginxPHP
- JDK安裝及測試檔案JDK
- sysbench的安裝和做效能測試
- CentOS 下效能測試工具 wrk 安裝CentOS
- RedHat Linux 本地Yum源安裝RedhatLinux
- Linux下安裝java及配置(yum安裝)LinuxJava
- 網站滲透測試原理及詳細過程網站
- 透過yum在centos6.6上安裝mysql5.7.21rpm包CentOSMySql
- postgresql的yum安裝及配置方法SQL
- 三十七、Flume的安裝及測試
- ubuntu透過安裝包安裝MongodbUbuntuMongoDB
- 效能測試工具JMeter的安裝及環境配置--Windows和LinuxJMeterWindowsLinux
- Kali Linux滲透測試實戰 1.2 環境安裝及初始化Linux
- MySQL 原始碼安裝及yum的使用MySql原始碼
- yum安裝
- centos7通過yum安裝nginxCentOSNginx
- mysql安裝 (yum 安裝)MySql
- MAC下嘗試PHP7 alpha版本的安裝MacPHP
- Ubuntu上snmp安裝、配置、啟動及遠端測試完整過程Ubuntu
- CentOS 6.x 通過修改yum源 安裝最新mysql-server教程CentOSMySqlServer
- Red Hat Linux安裝CentOS的yum源LinuxCentOS
- CentOS 6.4 國內最快的YUM源安裝CentOS