php-fpm安裝、配置與優化
轉載自:https://www.zybuluo.com/phper/note/89081
1、php中fastcgi和php-fpm是什麼東西
最近在研究和學習php的效能方面的知識,看到了factcgi以及php-fpm,發現我對他們是少之又少的理解,可以說幾乎是一無所知,想想還是蠻可怕的。決定仔細的學習一下關於這方面的知識。
為了如何一步步的引出fastcgi和php-fpm,我先一點一點的說說關於php的周邊。哎。突然覺得人活著好累!
先說說web伺服器
php是為web而生的一門後端語言,我們php狗當然是最清楚的啦。所以php僅僅是一門後端語言,那麼它就必須藉助於web伺服器,才能提供web功能。當然其他的後端語言如果做web應用,也必須藉助於web伺服器。好,由php引出了web伺服器,不錯!
那麼常見的web伺服器有哪些呢?php狗用的最多的就是Apache了,還有其他的:
- apache
- nginx
- IIS
- lighttpd
- tomcat
基本上就是上面幾種,與php相關聯起來用的最多的就是Apache和Nginx了。
我們先舉例用apache當作web伺服器,來說明一次完整的php訪問的情況:
圖片中就很好的解釋了php與Apache結合mysql資料庫的一次完成的web訪問流程圖
mod_php模式
上面講清楚了php必須藉助於web伺服器才能提供web的功能服務,現在看下他倆是怎麼成為基友的。
我們用到的最多的就是Apache了。那麼回憶一下,如何使apache是怎麼能夠識別php程式碼的?是不是apache的配置檔案httpd.conf中加上或者修改這樣幾句:
//加入以下2句
LoadModule php5_module D:/php/php5apache2_2.dll
AddType application/x-httpd-php .php
//將下面的
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
//將其修改為:
<IfModule dir_module>
DirectoryIndex index.html index.htm index.php index.phtml
</IfModule>
上面的windows下安裝php和apache環境後的手動配置,在linux下原始碼安裝大致是這樣配置的:
./configure --with-mysql=/usr/local--with-apache=/usr/local/apache --enable-track-vars
所以,這種方式,他們的共同本質都是用LoadModule
來載入php5_module
,就是把php作為apache的一個子模組來執行。當通過web訪問php檔案時,apache就會呼叫php5_module
來解析php程式碼。
那麼php5_module
是怎麼來將資料傳給php解析器來解析php程式碼的呢?
答案是通過sapi
我們再來看一張圖,詳細的說說apache 與 php 與 sapi的關係:
從上面圖中,我們看出了sapi
就是這樣的一箇中間過程,SAPI提供了一個和外部通訊的介面,有點類似於socket
,使得PHP可以和其他應用進行互動資料(apache,nginx,cli等)。php預設提供了很多種SAPI,常見的給apache和nginx的php5_module,CGI,給IIS的ISAPI,還有Shell的CLI。
所以,以上的apache呼叫php執行的過程如下:
apache -> httpd -> php5_module -> sapi -> php
好了。apache與php通過php5_module的方式就搞清楚了吧!
我們把這種執行方式叫做mod_php
模式
mod_fastcgi模式
上面我們仔細說了php與apache通過php5_module,php5_module通過sapi的方式訪問php,來達到php web的整個流程。
上面也說到了sapi,sapi
是php提供的統一介面,它提供給了php5_module和cgi等方式供web伺服器來連結和解析php程式碼。上面講到的php5_module
載入模式,我們稱之為mod_php
模式。
那麼!噹噹噹當!馬上就要說出fastcgi模式了。哈哈哈哈哈,太不容了。
那麼php的sapi的另一種方式就是提供cgi模式,由於cgi比較老所以就出現了fastcgi來取代它。
所以,哎。沒辦法,又要說什麼是CGI了?
CGI(Common Gateway Interface)。CGI是外部應用程式(CGI程式)與Web伺服器之間的介面標準,是在CGI程式和Web伺服器之間傳遞資訊的規程。CGI規範允許Web伺服器執行外部程式,並將它們的輸出傳送給Web瀏覽器,CGI將Web的一組簡單的靜態超媒體文件變成一個完整的新的互動式媒體。
看官方的解釋就蛋疼,簡單的說,就是:cgi就是專門用來和web 伺服器打交道的。web伺服器收到使用者請求,就會把請求提交給cgi程式(php的fastcgi),cgi程式根據請求提交的引數作應處理(解析php),然後輸出標準的html語句返回給web服伺服器,再返回給客戶端,這就是普通cgi的工作原理。
cgi的好處就是完全獨立於任何伺服器,僅僅是做為中間分子。提供介面給apache和php。他們通過cgi搭線來完成搞基動作。這樣做的好處了儘量減少2個的關聯,使他們2變得更獨立。
但是cgi有個蛋疼的地方,就是每一次web請求都會有啟動和退出過程,也就是最為人詬病的fork-and-execute
模式,這樣一在大規模併發下,就死翹翹了。
所以。這個時候fastcgi
運用而生了。它事先就早早的啟動好了,而且可以啟動多個cgi模組,在那裡一直執行著等著,等著web發過來的請求,然後再給php解析運算完成生成html給web後,也不會退出,而且繼續等著下一個web請求。而且這些cgi的模組啟動是可控的,可監測的。這種技術還允許把web server和php執行在不同的主機上,以大規模擴充套件和改進安全性而不損失生產效率。
所以現在一般作業系統都是fastcgi模式。cig模式也慢慢退出了歷史舞臺!我們文章中說cgi一般也就指fastcgi。
所以把這種執行方式叫做mod_fastcgi
模式
我會在接下來的段落講如何使用fastcgi模式來連線php和apache(或者nginx)
總結一下:php 與 apache 或者 ngix 結合, 會用sapi 提供2種連線方法:mod_php和mod_fastcgi
。mod_php
模式會將php模組安裝到apache下面來執行,2者結合度較大。mod_fastcgi
模式則是作為一箇中間過程,apache介紹使用者請求後,就傳送給fastcgi, 再連線php來完成訪問。
圖形表示一下這2種模式
mod_php 模式
mod_php 模式是將php模組安裝到apache中,所以每一次apache結束的請求呢,都會產生一條程序,這個程序就完整的包括php的各種運算計算等操作。
從圖中我們很清晰的可以看到,apache每接收一個請求,都會產生一個程序來連線php通過sapi來完成請求,可想而知,如果一旦使用者過多,併發數過多,伺服器就會承受不住了。
而且,把mod_php編進apache時,出問題時很難定位是php的問題還是apache的問題。
mod_fastcgi 模式
mod_fastcgi模式則剛剛相反,fastcgi是一個獨立與apache和php的獨立個體,它隨著apache一起啟動,生成多個cig模組,等著apache的請求:
圖中fastcgi早早的啟動好了,靜靜的在哪裡等著,已有apache發來的httpd請求就立馬接收過來,通過呼叫sapi給php,完成運算。而且不會退出。這樣就能應對大規模的併發請求,因為web server的要做的事情少了,所以就更快的去處理下一個請求,這樣併發大大的。
由於apache 與 php 獨立了。出問題,很好定位到底是哪裡出問題了。這點也是這種模式受歡迎的原因之一。
php-fpm
我了個大操,終於要說到php-fpm了。^....^
先開門見山說php-fpm是幹嘛好的了。它就是專門來輔助mode_fastcgi
模式的。
嗯。很好,先知道它是幹嘛的後,我們再回到mode_fastcgi
模式。通過前面的瞎雞巴一大堆的說明,我已經搞清楚了這種模式是怎麼樣子的一種狀態了。
fastcgi 是一個與平臺無關,與語言無關,任何語言只要按照它的介面來實現,就能實現自己語言的fastcgi能力和web server 通訊。
PHP-CGI就是PHP實現的自帶的FastCGI管理器。
雖然是php官方出品,自帶的,但是這丫的卻一點也不給力,效能太差,而且也很麻煩不人性化,主要體現在:
- php-cgi變更php.ini配置後需重啟php-cgi才能讓新的php-ini生效,不可以平滑重啟。
- 直接殺死php-cgi程序,php就不能運行了。
上面2個問題,一直讓很多人病垢了很久,所以很多人一直還是在用mode_php
方式。
直到 2004年(確定是這麼早嗎?)一個叫 Andrei Nigmatulin的屌絲髮明瞭PHP-FPM ,這神器的出現就徹底打破了這種局面,這是一個PHP專用的fastcgi管理器,它很爽的克服了上面2個問題,而且,還表現在其他方面更表現強勁. 請戳官網
我擦,這一篇貌似又瞎比比的說超時了啊。好吧。那windows和linux下安裝配置php-fpm就下一節來說吧。反正我已經已經把php-fpm和fastcgi給講清楚了。
=====================================================================================================2、php-fpm的安裝和啟動
在前面我學習過了php中的mod_php模式
和mode_fastcgi和php-fpm模式
:地址,中大致的講述了幾種模式的區別,也明白了php-fpm是fastcgi模式的管理器。今天就來看下php如何安裝php-fpm,以及執行。
安裝 php-fpm
我的機器是centos 6.2 之前就已經安裝過了php 5.4.11,PHP在 5.3.3 之後已經講php-fpm寫入php原始碼核心了。所以已經不需要另外下載了。我這裡是5.4.11所以就可以直接用。
由於我php已經安裝好了,而且之前編譯的時候沒有帶上fpm模式,所以我必須找到原始碼重新編譯一下:
要想使php支援php-fpm,只需要在編譯的時候帶上
--enable-fpm
就可以了。
所以,我需要找到之前的編譯引數, 後面加上--enable-fpm
,重新編譯下就可以了。之前就講過,有2種方式可以找到之前的編譯引數:
- 在原始碼 /lamp/php-5.4.11/中找到
config.nice
,這個就是之前的編譯引數- 在php.ini配置檔案中找到
Configure
相關的配置 :/usr/local/php/bin/php -i |grep 'Configure'
好,我們開始,找到之前的編譯引數:
[[email protected] /]# cd /lamp/php-5.4.11& vi config.nice
'./configure' \
'--prefix=/usr/local/php' \
'--with-config-file-path=/usr/local/php/etc/' \
'--with-apxs2=/usr/local/apache/bin/apxs' \
'--with-mysql=/usr/local/mysql/' \
'--with-libxml-dir=/usr/local/libxml2/' \
'--with-png-dir=/usr/local/libpng/' \
'--with-jpeg-dir=/usr/local/jpeg8/' \
'--with-freetype-dir=/usr/local/freetype/' \
'--with-gd=/usr/local/gd/' \
'--with-zlib-dir=/usr/local/zlib/' \
'--with-mcrypt=/usr/local/libmcrypt/' \
'--with-mysqli=/usr/local/mysql/bin/mysql_config' \
'--enable-soap' \
'--enable-mbstring=all' \
'--enable-sockets' \
加上--enable-fpm
後,重新編譯:
[[email protected] /]# cd /lamp/php-5.4.11
[[email protected] php-5.4.11]#'./configure' \
'--prefix=/usr/local/php' \
'--with-config-file-path=/usr/local/php/etc/' \
'--with-apxs2=/usr/local/apache/bin/apxs' \
'--with-mysql=/usr/local/mysql/' \
'--with-libxml-dir=/usr/local/libxml2/' \
'--with-png-dir=/usr/local/libpng/' \
'--with-jpeg-dir=/usr/local/jpeg8/' \
'--with-freetype-dir=/usr/local/freetype/' \
'--with-gd=/usr/local/gd/' \
'--with-zlib-dir=/usr/local/zlib/' \
'--with-mcrypt=/usr/local/libmcrypt/' \
'--with-mysqli=/usr/local/mysql/bin/mysql_config' \
'--enable-soap' \
'--enable-mbstring=all' \
'--enable-sockets' \
'--enable-fpm'
[[email protected] php-5.4.11] make && make install
啟動 php-fpm
安裝完成之後,我們嘗試著啟動:
啟動命令是:
/usr/local/php/sbin/php-fpm
報錯了:
[26-Feb-201515:39:55] ERROR: failed to open configuration file '/usr/local/php/etc/php-fpm.conf':No such file or directory (2)
[26-Feb-201515:39:55] ERROR: failed to load configuration file '/usr/local/php/etc/php-fpm.conf'
[26-Feb-201515:39:55] ERROR: FPM initialization failed
錯誤資訊說找不到 php-fpm.conf
哦,原來是php-fpm.conf還沒有,我們到 /usr/local/php/etc目錄下將php-fpm.conf.default
拷貝也一份成php-fpm.conf
cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
編輯一下這個配置檔案:
vim php-fpm.conf
pid = run/php-fpm.pid
user = www
group= www
再次嘗試啟動:
/usr/local/php/sbin/php-fpm
再次報錯說www 使用者不存在:
[26-Feb-201515:57:38] ERROR:[pool www] cannot get uid for user 'www'
[26-Feb-201515:57:38] ERROR: FPM initialization failed
好,那我們新建www 使用者組:
groupadd www
useradd -g www www
再次啟動:
/usr/local/php/sbin/php-fpm
沒有任何的輸出,表示成功了!!!
php-fpm佔用的是9000埠,我們檢視下程序:
[[email protected] php-5.4.11]# ps -ef|grep php-fpm
root 13771231011:19 pts/100:00:00 grep php-fpm
root 292491006:22?00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 2925029249006:22?00:00:00 php-fpm: pool www
www 2925129249006:22?00:00:00 php-fpm: pool www
root 321326158008:25 pts/200:00:00 vi php-fpm.conf
[[email protected] php-5.4.11]# netstat -tnl | grep 9000
tcp 00127.0.0.1:90000.0.0.0:* LISTEN
[[email protected] php-5.4.11]#
好,安裝和啟動都OK了。
開機啟動 php-fpm
之前接說過php-fpm是獨立於web伺服器和php之前的一層伺服器,所以,我們需要開機啟動它
開機啟動的配置檔案是:/etc/rc.local
,加入 /usr/local/php/sbin/php-fpm
即可
[[email protected] init]# vi /etc/rc.local
1#!/bin/sh
2#
3# This script will be executed *after* all the other init scripts.
4# You can put your own initialization stuff in here if you don't
5# want to do the full Sys V style init stuff.
6
7 touch /var/lock/subsys/local
8/usr/local/apache/bin/apachectl start
9/usr/local/bin/redis-server /etc/redis.conf
10/usr/local/php/sbin/php-fpm
光安裝好php-fpm也是沒用的,得配合web伺服器使用,下一節,我要學習nginx的安裝,以及nginx連線php-fpm來使用php。
重啟 php-fpm
我們在新安裝擴充套件後,是需要重新php-fpm的,已使擴充套件生效。
最簡單粗暴的重新php-fpm的方式是:
先找到php-fpm的程序號,kill 掉,再用/usr/local/php/sbin/php-fpm 這樣啟動。
其實還有更多溫和的方法,就是使用訊號
。
INT, TERM 立刻終止
QUIT 平滑終止
USR1 重新開啟日誌檔案
USR2 平滑過載所有worker程序並重新載入配置和二進位制模組
示例:
php-fpm 關閉:
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`
php-fpm 重啟:
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
======================================================================================================================3、php-fpm的配置和優化
我在前面幾篇中,很詳細的講述了php-fpm的各種介紹,和安裝。今天來看一下它的配置檔案php-fpm
的各種配置以及一些常見的優化。
php-fpm的安裝目錄
下面是我的平時的環境搭建php的各種安裝目錄,大家的基本也差不多。
centos等linux平臺
/usr/local/php/php
/usr/local/php/etc/php.ini
/usr/local/php/sbin/php-fpm
/usr/local/php/etc/php-fpm.conf
mac平臺
/usr/bin/php
/etc/php.ini
/usr/bin/php-fpm
/etc/php-fpm.conf
由於我開發以Mac為主,所以就用Mac的環境配置來學習。
php-fpm配置詳解
pid =/usr/local/var/run/php-fpm.pid
#pid設定,一定要開啟,上面是Mac平臺的。預設在php安裝目錄中的var/run/php-fpm.pid。比如centos的在: /usr/local/php/var/run/php-fpm.pid
error_log =/usr/local/var/log/php-fpm.log
#錯誤日誌,上面是Mac平臺的,預設在php安裝目錄中的var/log/php-fpm.log,比如centos的在: /usr/local/php/var/log/php-fpm.log
log_level = notice
#錯誤級別. 上面的php-fpm.log紀錄的登記。可用級別為: alert(必須立即處理), error(錯誤情況), warning(警告情況), notice(一般重要資訊), debug(除錯資訊). 預設: notice.
emergency_restart_threshold =60
emergency_restart_interval =60s
#表示在emergency_restart_interval所設值內出現SIGSEGV或者SIGBUS錯誤的php-cgi程序數如果超過 emergency_restart_threshold個,php-fpm就會優雅重啟。這兩個選項一般保持預設值。0 表示 '關閉該功能'. 預設值: 0 (關閉).
process_control_timeout =0
#設定子程序接受主程序複用訊號的超時時間. 可用單位: s(秒), m(分), h(小時), 或者 d(天) 預設單位: s(秒). 預設值: 0.
daemonize = yes
#後臺執行fpm,預設值為yes,如果為了除錯可以改為no。在FPM中,可以使用不同的設定來執行多個程序池。 這些設定可以針對每個程序池單獨設定。
listen =127.0.0.1:9000
#fpm監聽埠,即nginx中php處理的地址,一般預設值即可。可用格式為: 'ip:port', 'port', '/path/to/unix/socket'. 每個程序池都需要設定。如果nginx和php在不同的機器上,分散式處理,就設定ip這裡就可以了。
listen.backlog =-1
#backlog數,設定 listen 的半連線佇列長度,-1表示無限制,由作業系統決定,此行註釋掉就行。backlog含義參考:http://www.3gyou.cc/?p=41
listen.allowed_clients =127.0.0.1
#允許訪問FastCGI程序的IP白名單,設定any為不限制IP,如果要設定其他主機的nginx也能訪問這臺FPM程序,listen處要設定成本地可被訪問的IP。預設值是any。每個地址是用逗號分隔. 如果沒有設定或者為空,則允許任何伺服器請求連線。
listen.owner = www
listen.group= www
listen.mode =0666
#unix socket設定選項,如果使用tcp方式訪問,這裡註釋即可。
user = www
group= www
#啟動程序的使用者和使用者組,FPM 程序執行的Unix使用者, 必須要設定。使用者組,如果沒有設定,則預設使用者的組被使用。
pm =dynamic
#php-fpm程序啟動模式,pm可以設定為static和dynamic和ondemand
#如果選擇static,則程序數就數固定的,由pm.max_children指定固定的子程序數。
#如果選擇dynamic,則程序數是動態變化的,由以下引數決定:
pm.max_children =50#子程序最大數
pm.start_servers =2#啟動時的程序數,預設值為: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.min_spare_servers =1#保證空閒程序數最小值,如果空閒程序小於此值,則建立新的子程序
pm.max_spare_servers =3#,保證空閒程序數最大值,如果空閒程序大於此值,此進行清理
pm.max_requests =500
#設定每個子程序重生之前服務的請求數. 對於可能存在記憶體洩漏的第三方模組來說是非常有用的. 如果設定為 '0' 則一直接受請求. 等同於 PHP_FCGI_MAX_REQUESTS 環境變數. 預設值: 0.
pm.status_path =/status
#FPM狀態頁面的網址. 如果沒有設定, 則無法訪問狀態頁面. 預設值: none. munin監控會使用到
ping.path =/ping
#FPM監控頁面的ping網址. 如果沒有設定, 則無法訪問ping頁面. 該頁面用於外部檢測FPM是否存活並且可以響應請求. 請注意必須以斜線開頭 (/)。
ping.response = pong
#用於定義ping請求的返回相應. 返回為 HTTP 200 的 text/plain 格式文字. 預設值: pong.
access.log = log/$pool.access.log
#每一個請求的訪問日誌,預設是關閉的。
access.format ="%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
#設定訪問日誌的格式。
slowlog = log/$pool.log.slow
#慢請求的記錄日誌,配合request_slowlog_timeout使用,預設關閉
request_slowlog_timeout =10s
#當一個請求該設定的超時時間後,就會將對應的PHP呼叫堆疊資訊完整寫入到慢日誌中. 設定為 '0' 表示 'Off'
request_terminate_timeout =0
#設定單個請求的超時中止時間. 該選項可能會對php.ini設定中的'max_execution_time'因為某些特殊原因沒有中止執行的指令碼有用. 設定為 '0' 表示 'Off'.當經常出現502錯誤時可以嘗試更改此選項。
rlimit_files =1024
#設定檔案開啟描述符的rlimit限制. 預設值: 系統定義值預設可開啟控制代碼是1024,可使用 ulimit -n檢視,ulimit -n 2048修改。
rlimit_core =0
#設定核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整數. 預設值: 系統定義值.
chroot =
#啟動時的Chroot目錄. 所定義的目錄需要是絕對路徑. 如果沒有設定, 則chroot不被使用.
chdir =
#設定啟動目錄,啟動時會自動Chdir到該目錄. 所定義的目錄需要是絕對路徑. 預設值: 當前目錄,或者/目錄(chroot時)
catch_workers_output = yes
#重定向執行過程中的stdout和stderr到主要的錯誤日誌檔案中. 如果沒有設定, stdout 和 stderr 將會根據FastCGI的規則被重定向到 /dev/null . 預設值: 空.
當然還有一些無關緊要的設定,用到了再說吧。
一些重要的設定
php-fpm程序分配
在之前的文章中就說過了。在fasgcgi模式下,php會啟動多個php-fpm程序,來接收nginx發來的請求,那是不是程序越多,速度就越快呢?這可不一定!得根據我們的機器配置和業務量來決定。
我們先來看下,設定程序的配置在哪裡?
pm = static | dynamic | ondemand
pm可以設定成這樣3種,我們用的最多的就上前面2種。
pm = static 模式
pm = static
表示我們建立的php-fpm子程序數量是固定的,那麼就只有pm.max_children = 50
這個引數生效。你啟動php-fpm的時候就會一起全部啟動51(1個主+50個子)個程序,頗為壯觀。
pm = dynamic 模式
pm = dynamic
模式,表示啟動程序是動態分配的,隨著請求量動態變化的。他由 pm.max_children
,pm.start_servers
,pm.min_spare_servers
,pm.max_spare_servers
這幾個引數共同決定。
上面已經講過,這裡再重申一下吧:
pm.max_children = 50
是最大可建立的子程序的數量。必須設定。這裡表示最多隻能50個子程序。
pm.start_servers = 20
隨著php-fpm一起啟動時建立的子程序數目。預設值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。這裡表示,一起啟動會有20個子程序。
pm.min_spare_servers = 10
設定伺服器空閒時最小php-fpm程序數量。必須設定。如果空閒的時候,會檢查如果少於10個,就會啟動幾個來補上。
pm.max_spare_servers = 30
設定伺服器空閒時最大php-fpm程序數量。必須設定。如果空閒時,會檢查程序數,多於30個了,就會關閉幾個,達到30個的狀態。
到底選擇static還數dynamic?
很多人恐懼症來襲,不知道選什麼好?
一般原則是:動態適合小記憶體機器,靈活分配程序,省記憶體。靜態適用於大記憶體機器,動態建立回收程序對伺服器資源也是一種消耗。
如果你的記憶體很大,有8-20G,按照一個php-fpm程序20M算,100個就2G記憶體了,那就可以開啟static模式。如果你的記憶體很小,比如才256M,那就要小心設定了,因為你的機器裡面的其他的程序也算需要佔用記憶體的,所以設定成dynamic是最好的,比如:pm.max_chindren = 8, 佔用記憶體160M左右,而且可以隨時變化,對於一半訪問量的網站足夠了。
慢日誌查詢
我們有時候會經常飽受500,502問題困擾。當nginx收到如上錯誤碼時,可以確定後端php-fpm解析php出了某種問題,比如,執行錯誤,執行超時。
這個時候,我們是可以開啟慢日誌功能的。
slowlog = /usr/local/var/log/php-fpm.log.slow
request_slowlog_timeout = 15s
當一個請求該設定的超時時間15秒後,就會將對應的PHP呼叫堆疊資訊完整寫入到慢日誌中。
php-fpm慢日誌會記錄下程序號,指令碼名稱,具體哪個檔案哪行程式碼的哪個函式執行時間過長:
[21-Nov-201314:30:38][pool www] pid 11877
script_filename =/usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php
[0xb70fb88c] file_get_contents()/usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php:2
通過日誌,我們就可以知道第2行的file_get_contents 函式有點問題,這樣我們就能追蹤問題了。
相關推薦
php-fpm安裝、配置與優化
轉載自:https://www.zybuluo.com/phper/note/89081 1、php中fastcgi和php-fpm是什麼東西 最近在研究和學習php的效能方面的知識,看到了factcgi以及php-fpm,發現我對他們是少之又少的理解,可以說幾乎是一無
【SonarQube】安裝、配置與使用 01
ges 工具 順序 64位系統 runner lba 問題 分析 clas SonarQube是管理代碼質量一個開放平臺,可以快速的定位代碼中潛在的或者明顯的錯誤,下面將會介紹一下這個工具的安裝、配置以及使用。 準備工作; 1、jdk(不再介紹) 2、sonarqube:h
轉:MySQL下載安裝、配置與使用(win7x64)
服務端 oot 路徑 source password ade cto 麻煩 全部 1 第一大步:下載。 a.俗話說:“巧婦難為無米之炊”嘛!我這裏用的是 ZIP Archive 版的,win7 64位的機器支持這個,所以我建議都用這個。因為這個簡
SonarQube的安裝、配置與使用
modules 登錄 初始 distrib 初始化 html 開放 mage bin SonarQube的安裝、配置與使用 SonarQube是管理代碼質量一個開放平臺,可以快速的定位代碼中潛在的或者明顯的錯誤,下面將會介紹一下這個工具的安裝、配置以及使用。 準
Mongodb下載、安裝、配置與使用
調試 端口號 log文件 生成 IV journal 輸出 cmd TP 感謝:https://blog.csdn.net/heshushun/article/details/77776706 一、下載: 官網地址:https://www.mongodb.com/dow
[轉] mongodb下載、安裝、配置與使用
win7 spa 追加 簡單的 clip 進入 沒有 出現 端口 記得在管理員模式下運行CMD,否則服務將啟動失敗。 詳細圖解,記錄 win7 64 安裝mongo數據庫的過程。安裝的版本是 MongoDB-win32-x86_64-2008plus-ssl-3.4.1-
代碼質量管理平臺SonarQube的安裝、配置與使用
sonarqube 代碼質量管理平臺 tle title 使用 href 質量 log www 代碼質量管理平臺SonarQube的安裝、配置與使用 學習了:https://www.cnblogs.com/qiumingcheng/p/7253917.html代碼質量管理平
eclipse的git插件安裝、配置與使用
直接 upload net som 賬號密碼 圖1 blank cli sdn 轉載 : https://blog.csdn.net/u012052268/article/details/79160478 eclipse的git插件安裝與配置 1 git插件安
Windows10下Anaconda和Pycharm的安裝、配置與激活
容易 nlb 常用 targe mfile windows10 tsp ive gii 一、Anaconda的下載安裝 1.1 Anaconda介紹 Anaconda 是一個基於 Python 的數據處理和科學計算平臺,內置了許多非常有用的
Java開發利器:IntelliJ IDEA的安裝、配置與使用 視訊教程 百度雲盤
IntelliJ IDEA是一款功能強大的開發工具,在程式碼自動提示、重構、J2EE支援、各類版本工具(如git、svn、github)、maven等方面都有很好的應用。IntelliJ IDEA有免費的社群版和付費的旗艦版。免費版只支援Java等為數不多的語言和基本的IDE特性,旗艦版還支
Windows下MySQL下載安裝、配置與使用
一、下載 下載頁面http://dev.mysql.com/downloads/mysql/ 選擇系統平臺後,點選download(根據系統選擇64或32位) 二、配置 1、下載成功後,解壓安裝包到要安裝的位置,我是安裝在”D:\Progra
tomcat安裝、配置與使用
tomcat安裝、配置與使用 Tomcat安裝程式包apache-tomcat-7.0.40.zip,解壓到一個非中文目錄下即可完成安裝 Tomcat啟動:預設已經安裝好java環境,如果未安裝java會報錯。 方法1、雙擊bat檔案啟動: 進入到tomcat安裝目錄的bin目
資料庫:簡介、安裝、配置與基本操作
目錄 一、資料和資料庫 1.什麼是資料? 客觀事物的符號表示。 2.資料的分類? 結構化資料:可以通過統一的格式進行管理的資料。 非結構化資料:
更多免費初級中級高階大資料java視訊教程下載 加(微***信((號keepper,請備註java或掃下面2二3維4碼尚矽谷Java開發利器:IntelliJ IDEA的安裝、配置與使用
更多免費初級中級高階大資料java視訊教程下載 加(微***信((號keepper,請備註java或掃下面2二3維4碼尚矽谷Java開發利器:IntelliJ IDEA的安裝、配置與使用java視訊教程1-課件java視訊教程1-課件java視訊教程~$谷_宋紅康_IntelliJIDEA的安裝、配置與使用.
Weblogic的安裝、配置與應用部署
Weblogic安裝 Linux下安裝過程 安裝環境: 作業系統: redhat-release-5Server-5.4.0.3 Weblogic版本: Weblogic 9.24 部署前準備: 建立webl
eclipse的git外掛安裝、配置與使用
1. eclipse的git外掛安裝與配置 1.1 git外掛安裝 新版本的eclipse已經自帶了GIt了,就不用安裝了。 老版本的eclipse安裝Git,和安裝一般外掛過程一樣: 點選help——Install new software
開發環境配置-eclipse中git的安裝、配置與使用-4
1、eclipse自帶git,如果需要替換可先刪除,然後通過以下兩種操作方式中的一種進項安裝: Help->Eclipse MarketPlace->輸入egit進行查詢和安裝 Help->Install New SoftWare->
RabbitMQ實踐--伺服器安裝、配置與命令
ubuntu安裝rabbitmq-server 按照官網的APT repositories方法安裝 #新增以下地址到/etc/apt/sources.list echo 'deb http://www.rabbitmq.com/debian/ testi
Ubuntu 中sendmail 的安裝、配置與傳送郵件的具體實現
一、安裝 ubuntu中sendmail函式可以很方便的傳送郵件,ubuntu sendmail先要安裝兩個包。 必需安裝的兩個包: 程式碼 sudo apt-get install sendmail sudo apt-get install sendmail-
SVN:客戶端與伺服器端安裝、配置與使用
SVN(SUBVERSION) 前言: SVN是Subversion的簡稱,是一個開放原始碼的版本控制系統,說得簡單一點SVN就是用於多個人共同開發同一個專案,共用資源的目的。類似的工具號有git(github是其應用)。 環境:ubuntu 16.4 客戶端:w