日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

php中的fpm_详解PHP中PHP-FPM是什么?有什么用?

發布時間:2024/10/8 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php中的fpm_详解PHP中PHP-FPM是什么?有什么用? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PHP-FPM(PHP FastCGI Process Manager)意:PHP FastCGI 進程管理器,用于管理PHP 進程池的軟件,用于接受web服務器的請求。

作用

PHP-FPM提供了更好的PHP進程管理方式,可以有效控制內存和進程、可以平滑重載PHP配置。

【相關推薦:PHP教程】

(1). 為什么會出現php-fpm

fpm的出現全部因為php-fastcgi出現。為了很好的管理php-fastcgi而實現的一個程序

(2). 什么是php-fastcgi

php-fastcgi 只是一個cgi程序,只會解析php請求,并且返回結果,不會管理(因此才出現的php-fpm)。

(3)為什么不叫php-cgi

其實在php-fastcgi出現之前是有一個php-cgi存在的,只是它的執行效率低下,因此被php-fastcgi取代。

(4)那fastcgi和cgi有什么區別呢?

親們,這區別就大了,當一個服務web-server(nginx)分發過來請求的時候,通過匹配后綴知道該請求是個動態的php請求,會把這個請求轉給php。

在cgi的年代,思想比較保守,總是一個請求過來后,去讀取php.ini里的基礎配置信息,初始化執行環境,每次都要不停的去創建一個進程,讀取配置,初始化環境,返回數據,退出進程,久而久之,啟動進程的工作變的乏味無趣特別累。

當php來到了5的時代,大家對這種工作方式特別反感,想偷懶的人就拼命的想,我可不可以讓cgi一次啟動一個主進程(master),讓他只讀取一次配置,然后在啟動多個工作進程(worker),當一個請求來的時候,通過master傳遞給worker這樣就可以避免重復勞動了。于是就產生了fastcgi。

(5)fastcgi這么好,啟動的worker用完怎么辦?

當worker不夠的時候,master會通過配置里的信息,動態啟動worker,等空閑的時候可以收回worker

(6)到現在還是沒明白php-fpm 是個什么東西?

就是來管理啟動一個master進程和多個worker進程的程序.PHP-FPM 會創建一個主進程,控制何時以及如何將HTTP請求轉發給一個或多個子進程處理。

PHP-FPM主進程還控制著什么時候創建(處理Web應用更多的流量)和銷毀(子進程運行時間太久或不再需要了)PHP子進程。PHP-FPM進程池中的每個進程存在的時間都比單個HTTP請求長,可以處

理10、50、100、500或更多的HTTP請求。

安裝

PHP在 5.3.3 之后已經把php-fpm并入到php的核心代碼中了。 所以php-fpm不需要單獨的下載安裝。

要想php支持php-fpm,只需要在編譯php源碼的時候帶上 --enable-fpm 就可以了。

全局配置

在Centos中,PHP-FPM 的主配置文件是 /etc/php7/php-fpm.conf。

指定一段時間內有指定個子進程失效了,PHP-FPM重啟:#在指定的一段時間內,如果失效的PHP-FPM子進程數超過這個值,PHP-FPM主進程將優雅重啟。

emergency_restart_threshold = 10

#設定emergency_restart_interval 設置采用的時間跨度。

emergency_restart_interval = 1m

配置進程池

PHP-FPM配置文件其余的內容是一個名為Pool Defintions的區域。這個區域里的配置用戶設置每個PHP-FPM進程池。PHP-FPM進程池中是一系列相關的PHP子進程。

通常一個PHP應用有自己一個進程池

Centos在PHP-FPM主配置文件的頂部引入進程池定義文件:include=/etc/php7/php-fpm.d/*.conf

www.conf 是PHP-FPM進程池的默認配置文件。user= nobody

#擁有這個 PHP-FPM進程池中子進程的系統用戶。要把這個設置的值設用的非根用戶的用戶名。

group = nobody

#擁有這個 PHP-FPM進程池中子進程的系統用戶組。要把這個設置的值設應用的非根用戶所屬的用戶組名。

listen=[::]]:9000

#PHP-FPM進程池監聽的IP地址和端口號,讓 PHP-FPM 只接受 nginx從這里傳入的請求。

listen. allowed clients =127.0.0.1

#可以向這個 PHP-FPM進程池發送請求的IP地址(一個或多個)。

pm.max children =51

#這個設置設定任何時間點 PHP-FPM進程池中最多能有多少個進程。這個設置沒有絕對正確的值,你應該測試你的PHP應用,確定每個PHP進程需要使用多少內存,然后把這個設置設為設備可用內存能容納的PHP進程總數。對大多數中小型PHP應用來說,每個PHP進程要使用5~15MB內存(具體用量可能有差異)。 假設我們使用設備為這個PHP-FPM進程池分配了512MB可用內存,那么可以把這個設置設為(512MB總內存)/(每個進程使用10MB) = 51個進程。

...

編輯保存,重啟PHP-FPM主進程:sudo systemctl restart php-fpm.service

PHP-FPM進程池的配置詳情參見 http://php.net/manual/install.fpm.configuration.php

參考Company開發環境

測試環境的配置如下:[www]

user = nobody #進程的發起用戶和用戶組,用戶user是必須設置,group不是 nobody 任意用戶

group = nobody

listen = [::]:9000 #監聽ip和端口,[::] 代表任意ip

chdir = /app #在程序啟動時將會改變到指定的位置(這個是相對路徑,相對當前路徑或chroot后的“/”目錄)

pm = dynamic #選擇進程池管理器如何控制子進程的數量 #static: 對于子進程的開啟數路給定一個鎖定的值(pm.max_children) #dynamic: 子進程的數目為動態的,它的數目基于下面的指令的值(以下為dynamic適用參數)

pm.max_children = 16 #同一時刻能夠存貨的最大子進程的數量

pm.start_servers = 4 #在啟動時啟動的子進程數量

pm.min_spare_servers = 2 #處于空閑"idle"狀態的最小子進程,如果空閑進程數量小于這個值,那么相應的子進程會被創建

pm.max_spare_servers = 16 #最大空閑子進程數量,空閑子進程數量超過這個值,那么相應的子進程會被殺掉。

catch_workers_output = Yes #將worker的標準輸出和錯誤輸出重定向到主要的錯誤日志記錄中,如果沒有設置,根據FastCGI的指定,將會被重定向到/dev/null上

生產環境配置:

轉發請求給PHP-FPM

nginx為例:server {

listen 83;

server_name mobile.com;

root /app/mobile/web/;

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root /usr/share/nginx/html;

}

location / {

index index.html index.htm index.php;

# Redirect everything that isn't a real file to index.php

try_files $uri $uri/ /index.php$is_args$args;

}

#把HTTP請求轉發給PHP-FPM進程池處理

location ~ .*\.php include fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_pass 192.168.33.30:9000; #監聽9000端口

fastcgi_index index.php;

try_files $uri =404;

#include fastcgi.conf;

}

location ~ /\.(ht|svn|git) {

deny all;

}

access_log /app/wwwlogs/access.log;

error_log /app/wwwlogs/error.log;

}

php-fpm啟動,重啟,終止操作

啟動php-fpm:/usr/sbin/php-fpm

/usr/local/php/sbin/php-fpm

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的master進程號# ps aux|grep php-fpm

root 21891 0.0 0.0 112660 960 pts/3 R+ 16:18 0:00 grep --color=auto php-fpm

root 42891 0.0 0.1 182796 1220 ? Ss 4月18 0:19 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)

nobody 42892 0.0 0.6 183000 6516 ? S 4月18 0:07 php-fpm: pool www

nobody 42893 0.0 0.6 183000 6508 ? S 4月18 0:17 php-fpm: pool www

重啟php-fpm:kill -USR2 42891

上面方案一般是沒有生成php-fpm.pid文件時使用,如果要生成php-fpm.pid,使用下面這種方案:

上面master進程可以看到,matster使用的是/usr/local/php/etc/php-fpm.conf這個配置文件,cat /usr/local/php/etc/php-fpm.conf 發現:[global]

; Pid file

; Note: the default prefix is /usr/local/php/var

; Default Value: none

;pid = run/php-fpm.pid

pid文件路徑應該位于/usr/local/php/var/run/php-fpm.pid,由于注釋掉,所以沒有生成,我們把注釋去除,再kill -USR2 42891 重啟php-fpm,便會生成pid文件,下次就可以使用以下命令重啟,關閉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'

總結

以上是生活随笔為你收集整理的php中的fpm_详解PHP中PHP-FPM是什么?有什么用?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。