導航:首頁 > 編程語言 > killphpfpm

killphpfpm

發布時間:2023-01-05 21:02:36

⑴ mac php-fpm剛殺死又啟動

如果用的unix-like系統,可以用進程查看命令
ps -ef | grep php-fpm

⑵ 啟動php-fpm時是怎麼載入php.ini

php.ini:決定php語言運行的環境,支持擴展的模塊,開發環境的配置

php-fpm.conf:進程式控制制管理器配置文件,控制php-cgi的進程數,常駐內存,提高web服務的響應速率,php-cgi運行時會載入這兩個配置文件。

⑶ php進程超時介面返回504錯誤分析

在一次介面測試中,發現返回的http 504 time out 的錯誤,然後查看了php-fpm的錯誤日誌,發現了如下錯誤

從表現上看,是php進程超時導致的進程被kill了,那麼這個超時時間以及kill的機制是跟哪些參數有關呢,這里系統這里一下。

Nginx服務一般因為php的錯誤或者超時會有兩種錯誤碼502 bad Gateway 或者 504 Gateway Time-out

一種情況是php產生了語法錯誤,比如循環調用、變數作用域錯誤、方法不存在等,如果開啟錯誤日誌輸出的話,這種錯誤在php-fpm的錯誤日誌中是可以看到調用棧信息的。

另外一種情況可能就是超時引起的php-fpm主動kill的情況,在php.ini和php.fpm中有兩個配置項,用來管理php腳本的最大執行時間

當php腳本的執行時間超過這個時間時,PHP-FPM不只會終止腳本的執行,還會終止執行腳本的Worker進程。所以Nginx會發現與自己通信的連接斷掉了,就會返回給客戶端502錯誤。

以頂部的錯誤為例,當報502錯誤是,nginx的errorlog中有如下日誌,:

所以只需將這兩項的值調大一些就可以讓PHP腳本不會因為執行時間長而被終止了。request_terminate_timeout可以覆蓋max_execution_time,

所以如果不想改全局的php.ini,那隻改PHP-FPM的配置就可以了。

此外要注意的是Nginx的upstream模塊中的max_fail和fail_timeout兩項。這兩個配置表示在fail_timeout事件內,如果fail的測試達到max_fail,那麼在接下來的fail_timeout時間內,Nginx都會認為上游伺服器掛掉了,都會返回502錯誤。

所以可以將max_fail調大一些,將fail_timeout調小一些。

PHP-FPM設置的腳本最大執行時間已經夠長了,但執行耗時PHP腳本時,發現Nginx報錯從502變為504了。這是為什麼呢?

因為我們修改的只是PHP的配置,Nginx中也有關於與上游伺服器通信超時時間的配置

以Nginx超時時間為90秒,PHP-FPM超時時間為300秒為例,報504 Gateway Timeout錯誤時的Nginx錯誤訪問日誌如下:

調高這三項的值(主要是read和send兩項,默認不配置的話Nginx會將超時時間設為60秒)之後,504錯誤也解決了。

而且這三項配置可以配置在http、server級別,也可以配置在location級別。擔心影響其他應用的話,就配置在自己應用的location中吧。

要注意的是factcgi_connect/read/send_timeout是對FastCGI生效的,而proxy_connect/read/send_timeout是對proxy_pass生效的。

參考鏈接: http://www.cnblogs.com/fei33423/p/8184098.html 感謝分享!

⑷ PHP Redis是使用connect還是pconnect

首先先介紹下connect和pconnect的區別。
connect:腳本結束之後連接就釋放了。

pconnect:腳本結束之後連接不釋放,連接保持在php-fpm進程中。
所以使用pconnect代替connect,可以減少頻繁建立redis連接的消耗。

linux 如何升級ubuntu 裡面的php

一、下載最新版本
可以到php.net這里下載最新發布的PHP版本包,目前使用VPS居多吧,常規做法是先下載PHP包到本地上,然後在傳到VPS上,如果是使用VPS那麼可以直接從VPS上下載即可,這樣省事,而且也方便。下載時,選擇適合VPS的相應節點,如你的VPS在美國就選擇美國節點,這樣下載速度會比其它節點要快。
二、解壓
這個不用介紹了,直接tar -jxvf + PHP壓縮包文件名回車即可
三、停用php-fpm
先查找出php-fpm的進程號
#ps -le | grep 'php-fpm'
然後使用kill殺掉,如php-fpm進程號是10562
#kill -QUIT 10562
四、配置編譯安裝PHP
配置還是跟原來安裝時配置的參數一樣,然後編譯,最後安裝
五、完成安裝,啟動php-fpm
安裝結束後,直接運行php-fpm命令即可啟動,加入你安裝的PHP在local路徑下則啟動命令如下
# /usr/local/php/sbin/php-fpm
完成以上五個步驟以後,運行phpinfo查看eAccelerator是否已啟動。如果啟動失敗,或者在執行php-fpm命令提示
[eAccelerator] This build of "eAccelerator" was compiled for PHP version 5.3.6. Rebuild it for your PHP version (5.3.13) or download precompiled binaries.
類似錯誤提示的也不要慌張,這是PHP版本導致的小錯誤。只要重新下載eAccelerator編譯安裝,然後殺掉php-fpm進程再啟動php-fpm即可
對於,那些也同我一樣想升級到PHP5.4版本以上的童鞋,只能等等了,因為eAccelerator還沒有PHP5.4版本的發布,除非放棄不使用eAccelerator的童鞋大可隨意升級!

⑹ php-fpm的工作機制

概括來說,fpm 的實現就是創建一個 master 進程,在 master 進程中創建並監聽 socket,然後 fork 出多個子進程,這些子進程各自 accept 請求,子進程的處理非常簡單,它在啟動後阻塞在 accept 上,有請求到達後開始讀取請求數據,讀取完成後開始處理然後再返回,在這期間是不會接收其它請求的,也就是說 fpm 的子進程同時只能響應一個請求,只有把這個請求處理完成後才會 accept 下一個請求,這一點與 nginx 的事件驅動有很大的區別,nginx 的子進程通過 epoll 管理套接字,如果一個請求數據還未發送完成則會處理下一個請求,即一個進程會同時連接多個請求,它是非阻塞的模型,只處理活躍的套接字。

fpm 的 master 進程與 worker 進程之間不會直接進行通信,master 通過共享內存獲取 worker 進程的信息,比如 worker 進程當前狀態、已處理請求數等,當 master 進程要殺掉一個 worker 進程時則通過發送信號的方式通知 worker 進程。

fpm 可以同時監聽多個埠,每個埠對應一個 worker pool,而每個 pool 下對應多個 worker 進程,類似 nginx 中 server 概念。

在 php-fpm.conf 中通過[pool name]聲明一個 worker pool:

啟動 fpm 後查看進程:

具體實現上 worker pool 通過fpm_worker_pool_s這個結構表示,多個 worker pool 組成一個單鏈表

接下來看下 fpm 的啟動流程,從main()函數開始:

fpm_init()主要有以下幾個關鍵操作:

(1) fpm_conf_init_main():

解析 php-fpm.conf 配置文件,分配 worker pool 內存結構並保存到全局變數中:fpm_worker_all_pools,各 worker pool 配置解析到fpm_worker_pool_s->config中。

(2)fpm_scoreboard_init_main():

分配用於記錄 worker 進程運行信息的共享內存,按照 worker pool 的最大 worker 進程數分配,每個 worker pool 分配一個fpm_scoreboard_s結構,pool 下對應的每個 worker 進程分配一個fpm_scoreboard_proc_s結構。
(3)fpm_signals_init_main():

這里會通過socketpair()創建一個管道,這個管道並不是用於 master 與 worker 進程通信的,它只在 master 進程中使用,具體用途在稍後介紹 event 事件處理時再作說明。另外設置 master 的信號處理 handler,當 master 收到 SIGTERM、SIGINT、SIGUSR1、SIGUSR2、SIGCHLD、SIGQUIT 這些信號時將調用sig_handler()處理:

(4)fpm_sockets_init_main()

創建每個 worker pool 的 socket 套接字。
(5)fpm_event_init_main():

啟動 master 的事件管理,fpm 實現了一個事件管理器用於管理 IO、定時事件,其中 IO 事件通過 kqueue、epoll、poll、select 等管理,定時事件就是定時器,一定時間後觸發某個事件。

在fpm_init()初始化完成後接下來就是最關鍵的fpm_run()操作了,此環節將 fork 子進程,啟動進程管理器,另外 master 進程將不會再返回,只有各 worker 進程會返回,也就是說fpm_run()之後的操作均是 worker 進程的。

在 fork 後 worker 進程返回了監聽的套接字繼續 main() 後面的處理,而 master 將永遠阻塞在fpm_event_loop(),接下來分別介紹 master、worker 進程的後續操作。

fpm_run()執行後將 fork 出 worker 進程,worker 進程返回main()中繼續向下執行,後面的流程就是 worker 進程不斷 accept 請求,然後執行 PHP 腳本並返回。整體流程如下:

worker 進程一次請求的處理被劃分為 5 個階段:

worker 處理到各個階段時將會把當前階段更新到fpm_scoreboard_proc_s->request_stage,master 進程正是通過這個標識判斷 worker 進程是否空閑的。

接下來我們來看下 master 是如何管理 worker 進程的,首先介紹下三種不同的進程管理方式:

前面介紹到在fpm_run()中 master 進程將進入fpm_event_loop():

這就是 master 整體的處理,其進程管理主要依賴注冊的幾個事件,接下來我們詳細分析下這幾個事件的功能。

(1)sp[1]管道可讀事件:

在 fpm_init() 階段 master 曾創建了一個全雙工的管道:sp,然後在這里創建了一個 sp[0] 可讀的事件,當 sp[0] 可讀時將交由 fpm_got_signal() 處理,向 sp[1] 寫數據時 sp[0] 才會可讀,那麼什麼時機會向 sp[1] 寫數據呢?前面已經提到了:當 master 收到注冊的那幾種信號時會寫入 sp[1] 端,這個時候將觸發 sp[0] 可讀事件。

這個事件是 master 用於處理信號的,我們根據 master 注冊的信號逐個看下不同用途:

具體處理邏輯在 fpm_got_signal() 函數中,這里不再羅列。

(2)fpm_pctl_perform_idle_server_maintenance_heartbeat():

這是進程管理實現的主要事件,master 啟動了一個定時器,每隔 1s 觸發一次,主要用於 dynamic、ondemand 模式下的 worker 管理,master 會定時檢查各 worker pool 的 worker 進程數,通過此定時器實現 worker 數量的控制,處理邏輯如下:

(3)fpm_pctl_heartbeat():

這個事件是用於限制 worker 處理單個請求最大耗時的,php-fpm.conf 中有一個request_terminate_timeout的配置項,如果 worker 處理一個請求的總時長超過了這個值那麼 master 將會向此 worker 進程發送kill -TERM信號殺掉 worker 進程,此配置單位為秒,默認值為 0 表示關閉此機制,另外 fpm 列印的 slow log 也是在這里完成的。

除了上面這幾個事件外還有一個沒有提到,那就是 ondemand 模式下 master 監聽的新請求到達的事件,因為 ondemand 模式下 fpm 啟動時是不會預創建 worker 的,有請求時才會生成子進程,所以請求到達時需要通知 master 進程,這個事件是在fpm_children_create_initial()時注冊的,事件處理函數為fpm_pctl_on_socket_accept(),具體邏輯這里不再展開,比較容易理解。

原文出處: https://www.fanhao.com/2017/10/internal-php-fpm.html

⑺ macbook pro 自帶的php是5.3.15的,求問重啟php-fpm的方法。5.3.X已經不支持php-fpm start stop了

pgrep php-fpm |xargs sudo kill -USR2

⑻ php5.4.6怎樣重啟php-fpm

php5.4中php-fpm怎麼重啟?
php 5.3.3以後 源碼中已經內嵌了 php-fpm,不用象以前的php版本一樣專門打補丁了,只需要在configure的時候添加編譯參數即可。
關於php-fpm的編譯參數有 –enable-fpm –with-fpm-user=www –with-fpm-group=www –with-libevent-dir=libevent位置。
但是,php 5.3.3以後 的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,需要使用信號控制:
master進程可以理解以下信號:

INT, TERM 立刻終止
QUIT 平滑終止
USR1 重新打開日誌文件
USR2 平滑重載所有worker進程並重新載入配置和二進制模塊
有了以上信號,php-fpm進程重啟就方便多了。
例子:
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`
說明:
cat部分是php-fpm的進程號,可能是我用的5.4的問題。沒有用php-fpm.pid ,就沒有這個文件。
可以用 ps aux | grep php-fpm,使用第一個進程的進程號,測試可行。

⑼ 如何修改 php-fpm的運行用戶

第一種:一個php-fpm主進程

這種方式比較簡單,也只需要一個php-fpm自啟動文件。

首先我們查看一下原php-fpm.conf的這個配置文件,分為兩個部分,一個是global塊,另外一個是自定義的塊,配置文件裡面稱為pool池,默認叫「www」。在global池的上方,有一行注釋了的「include=etc/fpm.d/*.conf」配置項,再通過www池的配置,我們可知可以通過不同的池來配置不同的用戶,來達到多個用戶運行php-fpm的目的,步驟如下:

4、刪除前面的global塊,或者注釋掉。

5、修改[www]為其他,比如你[blog]。

6、配置[blog]池,主要修改兩個地方:

6.1:第一處為運行的用戶和用戶組。

即將

12user = www3group = www4。

修改為

12user=nobody #具體用哪個用戶視自己情況而定,我只做個示例3group=nobody4。

6.2:修改監聽的埠或者socket:

即將:

12listen = 127.0.0.1:90003。

修改為:

12listen = /var/socket/php-fpm/blog.socket #php-fpm需要自己創建,當然也可以直接放在php-fpm目錄下3。

修改成其他埠也是可以的,比如:listen = 127.0.0.1:9001。

7、到主配置文件 php-fpm.conf將「include=…」前面的注釋去掉,讓它去讀取fpm.d目錄下的配置文件。

8、到此第一種方案就修改完畢了,重新啟動測試一下:

12service php-fpm reload3。

第二種:兩個php-fpm主進程。

這種方法需要獨立的配置文件和獨立的自啟動文件:

1、復制一份php-fpm.conf主配置文件。

12cp php-fpm.conf php-fpm-blog.conf3。

2、修改主配置文件。

12vim php-fpm-blog.conf3。

2.1:修改[global]下pid和error_log文件的路徑。

修改 pid=run/php-fpm.pid 為 pid=run/php-fpm-blog.pid 。

修改 error_log = /log/php-fpm.log 為 error_log = /log/php-fpm-blog.log。

2.2:修改池的名稱[www]為[blog],不過這個可以不用修改了,因為這里和原來的進程是獨立的。

2.3:修改用戶和用戶組。

2.4:監聽埠或socket文件。

以上兩部可以按照第一種方案進行修改,這里就不再重復。

3、進入/etc/init.d目錄,復制一份自啟動文件。

12cp php-fpm php-fpm23。

4、修改自啟動文件php-fpm2:

4.1:修改配置文件路徑。

12php_fpm-CONF=${prefix}/etc/php-fpm.conf3。

12php_fpm-CONF=${prefix}/etc/php-fpm-blog.conf3。

這個路徑就是剛才的主配置文件。

4.2:修改PID文件路徑:

12php_fpm_PID=${prefix}/var/run/php-fpm.pid3。

為:

12php_fpm_PID=${prefix}/var/run/php-fpm-blog.pid3。

這個路徑要和主配置文件中的pid路徑一致。

5、修改完畢後添加自動啟動。

12chkconfig --add php-fpm23chkconfig --level 2345 php-fpm2 on4。

6、啟動服務。

⑽ 如何在php-fpm與php.ini

/usr/local/php/sbin/php-fpm
/usr/local/php/etc/php-fpm.conf
/usr/local/php/etc/php.ini
一,php-fpm的啟動參數
#測試php-fpm配置
/usr/local/php/sbin/php-fpm -t
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t
#啟動php-fpm
/usr/local/php/sbin/php-fpm
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf
#關閉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`
二,php-fpm.conf重要參數詳解
pid = run/php-fpm.pid
#pid設置,默認在安裝目錄中的var/run/php-fpm.pid,建議開啟
error_log = log/php-fpm.log
#錯誤日誌,默認在安裝目錄中的var/log/php-fpm.log
log_level = notice
#錯誤級別. 可用級別為: alert(必須立即處理), error(錯誤情況), warning(警告情況), notice(一般重要信息), debug(調試信息). 默認: notice.這樣試試呢如果還有不明白的話,你也可以去後盾人平台看看php基礎教學視頻看看,也是不錯的選擇,希望能幫到你,給個採納吧╮( ̄▽ ̄)╭謝謝

閱讀全文

與killphpfpm相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:753
蘋果郵件無法連接伺服器地址 瀏覽:958
phpffmpeg轉碼 瀏覽:667
長沙好玩的解壓項目 瀏覽:140
專屬學情分析報告是什麼app 瀏覽:562
php工程部署 瀏覽:831
android全屏透明 瀏覽:730
阿里雲伺服器已開通怎麼辦 瀏覽:801
光遇為什麼登錄時伺服器已滿 瀏覽:300
PDF分析 瀏覽:482
h3c光纖全工半全工設置命令 瀏覽:139
公司法pdf下載 瀏覽:379
linuxmarkdown 瀏覽:349
華為手機怎麼多選文件夾 瀏覽:681
如何取消命令方塊指令 瀏覽:347
風翼app為什麼進不去了 瀏覽:776
im4java壓縮圖片 瀏覽:360
數據查詢網站源碼 瀏覽:148
伊克塞爾文檔怎麼進行加密 瀏覽:888
app轉賬是什麼 瀏覽:161