PHP 7.0 安裝使用與效能監測!
PHP 7.0釋出,網上關於新版的介紹很多,介於 7.0 在正式釋出之前已經發過若干個 Beta、8個 RC,應該不會出現重大問題。今日我將一臺機器升級至 PHP 7.0 並將有關資訊記錄如下。
本人使用 Ubuntu 12.04 LTS,在網上已經找到 7.0 正式版的 ppa,所以不需要編譯,使用如下命令可直接安裝。
安裝 PHP7.0與擴充套件
sudo add-apt-repository ppa:ondrej/php-7.0
sudo apt-get update
sudo apt-get install php7.0-fpm php7.0-cli php7.0-common php7.0-json php7.0-mysql php7.0-opcache php7.0-curl
由於 Memcached、Redis 擴充套件並沒有在 pecl 釋出支援 PHP7 的最新版本,所以需要到 Github 找到 PHP7 的分支進行手動編譯安裝。
redis、memcached的github地址如下 https://github.com/phpredis/phpredis/ https://github.com/rlerdorf/php-memcached
Redis 安裝方法
git clone https://github.com/phpredis/phpredis/
cd phpredis
git checkout php7
phpize
./configure
make
ssudo make install
Memcached 安裝方法
Memcached 需要先下載 libmemecached 庫才能正常編譯。
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar -zxvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure
make
sudo make install
sudo apt-get install pkg-config
git clone https://github.com/rlerdorf/php-memcached.git
cd php-memcached
git checkout php7
phpize
./configure
make
sudo make install
自己編譯的這2個擴充套件需要手動在配置檔案里載入
sudo touch /etc/php/mods-available/redis.ini
sudo touch /etc/php/mods-available/memcached.ini
並將兩個檔案內容寫上
extension=redis.so
extension=memcached.so
cd /etc/php/7.0/fpm/conf.d
sudo ln -s /etc/php/mods-available/redis.ini ./
sudo ln -s /etc/php/mods-available/memcached.ini ./
如果命令列下需要啟用擴充套件,同樣需要在 cli/conf.d 目錄下將其連結過去。 最後重啟伺服器
sudo service php7.0-fpm restart
配置檔案的調整 由於 PHP7.0 最大的改進是效能,所以務必要啟用 opcache 保證其能發揮最大作用。 將 php.ini 的如下配置啟用。
opcache.enable=1
opcache.enable_cli=1
opcache.file_cache=/tmp
opcache.error_log=/var/log/opcache_errors.log
ppa 安裝的包預設 error_display 是 off 的。 而且 error_log 是註釋的,意味著出現問題時檢視不到任何資訊。 因此請寫入如下配置
error_log=/var/log/php_errors.log
sudo chown www-data.www-data /var/log/php_errors.log
本人安裝的是 Nginx 伺服器,請確保使用者陣列更改為與自己 webserver 一樣的,否則還是不會出現任何提示。 opcache_errors.log 檔案同樣如此。
關於 opcache 的更多內容可以訪問這裡檢視 http://www.laruence.com/2015/12/04/3086.html
異常處理與解決
在配置完成後,就需要實際的將程式跑一下了。目前將老系統轉移到 EN PHP7.0 後,第一個錯誤就是
09-Dec-2015 12:27:48 Asia/Chongqing] PHP Fatal error: Uncaught Error: Call to undefined function set_magic_quotes_runtime() in /init.php:46
已經不再存在set_magic_quotes_runtime 這個函式了。如果要相容的話需要加上判斷
if(PHP_VERSION_ID < 70000){
set_magic_quotes_runtime();
}
監控與調優
我在系統裡安裝了 OneAPM 提供的 Agent。這樣可以實時監測到整個系統的執行情況。其他版本的 Agent 官方網站已經提供了下載。截止本文落筆,PHP 7.0版本官方提供了一個下載地址是:https://oneapm.kf5.com/attachments/download/366552/0015667f0036f47c827fcb8fcbfbc79/
在這之前更多人會使用 xhprof 來檢測和優化系統,但是 xhprof 對整體的程式效能採集樣本無法很好的歸納,也沒有很好的視覺化曲線圖和 Web 事務跟蹤,導致在短時間內很難對系統瓶頸進行評估。
所以我使用 OneAPM 的 PHP Agent 來完成這些工作,OneAPM 同樣使用定時取樣定時彙報的方式來收集效能資訊,並且官方宣稱耗費資源小於5%。不過對於使用效能提升數倍的 PHP7.0 來部署的話這些損耗可以忽略不計,而且本人只在叢集若干機器內部署了一臺。
下面介紹基本的效能分析和故常排查方法。
比如可以在 dashboard 中檢視到具體某個時間段整個系統的穩定程度,我們在圖上看到了一個異常波峰,時間在早上6點左右,通過列表篩選器移除 WEB External 後看圖。
其他業務都很正常,執行到最後 PHP 層,平均時間也只用了 10ms 左右。回到上圖點選波峰的指示器可以看到具體明細。
當開啟詳情時可以明顯看到,原來是微信的介面在6點鐘抽了。同樣該頁面還可以監控到第三方服務呼叫的響應情況。比如 217ms 的 api.hitokoto.us 服務。
再簡單看一個 SQL 緩慢的監控。
通過 Web 事務的響應時間佔比檢視到一個指令碼執行時間相對過長,通過上圖可以看到資料庫查詢佔了579ms
通過切換到詳情頁面,可以看到整個指令碼的呼叫過程,最終發現是程式 mysqli.php:88 行執行的查詢佔用了過長的時間。
以上只是通過 OneAPM 持續檢查程式穩定性的一個基本方法。
程式在日常執行中由於受到的訪問量不同,很有可能在某個時間點上出現大面積的延遲,比如併發突然增高或訪問某一部分介面的比例突然過高,而平時 Apdex 指標卻看起來非常漂亮,那麼這個時候通過 OneAPM 就很容易發現程式中影響效能的部分,從而繼續改進或優化程式碼。
(本文作者系 OneAPM 使用者,授權 OneAPM 官方部落格轉發)
OneAPM for PHP 能夠深入到所有 PHP 應用內部完成應用效能管理和監控,包括程式碼級別效能問題的可見性、效能瓶頸的快速識別與追溯、真實使用者體驗監控、伺服器監控和端到端的應用效能管理。想閱讀更多技術文章,請訪問 OneAPM 官方技術部落格 。 本文轉自 OneAPM 官方部落格
相關文章
- PHP7.0安裝使用與效能監測!PHP
- [LAMP]【轉載】——PHP7.0的安裝LAMPPHP
- PHP程式碼效能監測工具PHP
- Centos下Yum安裝PHP5.5,5.6,7.0CentOSPHP
- CentOS 7.0下使用yum安裝MySQLCentOSMySql
- mytop安裝,使用mytop監控MySQL效能MySql
- PHP7透過yum源安裝及效能測試PHP
- 【STATSPACK】Statspack安裝、測試與使用
- php效能監控PHP
- Redis安裝+叢集+效能監控Redis
- CentOS 7.0 之 FastDFS安裝CentOSAST
- Rational Rose 7.0安裝教程ROS
- 介面測試:postman的安裝與使用Postman
- Centos環境下給PHP7.0安裝yaf擴充套件CentOSPHP套件
- CentOs環境下給PHP7.0安裝fileinfo擴充套件CentOSPHP套件
- 【PHP Composer】安裝&使用PHP
- [PHP Composer] 安裝&使用PHP
- CentOS6 升級 PHP7.0 及安裝 ZIP 擴充套件CentOSPHP套件
- 自動化(YUM/編譯)安裝PHP(5.3/5.5/7.0/7.1)指令碼編譯PHP指令碼
- 【實驗】【STATSPACK】Statspack 安裝、測試與使用
- 如何在 CentOS 7.0 安裝 WebsvnCentOSWeb
- Ubuntu 14.04 安裝 JDK 7.0UbuntuJDK
- 【飲水思源】安裝IIS 7.0
- 完美解除安裝 V7.0
- centos7.0 安裝字型庫CentOS
- CentOS 7.0下使用yum安裝mysql的方法詳解CentOSMySql
- Chrome 效能監測Chrome
- PHP安裝及與apache整合PHPApache
- 效能測試 -- docker安裝influxdbDockerUX
- CentOS7.0安裝配置LAMP伺服器方法(Apache+PHP+MariaDB)CentOSLAMP伺服器ApachePHP
- Munin監控的安裝與配置
- PHP 使用 Kafka 安裝拾遺PHPKafka
- Red Hat Linux 7.0安裝使用手記(六則) (轉)Linux
- php 快取使用監控測試程式碼PHP快取
- PHP 7.0即將釋出,效能接近Facebook的HHVMPHP
- redis效能監控工具redis-stat安裝初探Redis
- 如何安裝vmware以及如何在vmware上安裝centOS 7.0CentOS
- sysbench的安裝和做效能測試