欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php-fpm優(yōu)化總結(jié)經(jīng)驗(yàn)分享

 更新時(shí)間:2022年08月18日 14:32:41   作者:村東頭最靚的仔  
這篇文章主要為大家介紹了php-fpm優(yōu)化總結(jié)的經(jīng)驗(yàn)分享,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Nginx 與 php-fpm 運(yùn)行流程

  • Nginx 查看 nginx.conf 配置文件
  • 加載 nginx 的 fast-cgi 模塊
  • php-fpm 監(jiān)聽(tīng) 127.0.0.1:9000
  • php-fpm 接收到請(qǐng)求,啟用 worker 進(jìn)程處理請(qǐng)求
  • php-fpm 處理完請(qǐng)求,返回給 nginx
  • nginx 將結(jié)果通過(guò) http 返回給瀏覽器\

Nginx 與 php-fpm 通信機(jī)制

  www.test.com
        |
        |
      Nginx
        |
        |
路由到 www.test.com/index.php
        |
        |
加載 nginx 的 fast-cgi 模塊
        |
        |
fast-cgi 監(jiān)聽(tīng) 127.0.0.1:9000 地址
        |
        |
www.test.com/index.php 請(qǐng)求到達(dá) 127.0.0.1:9000
        |
        |
     等待處理...

Nginx 與 php-fpm 的結(jié)合

  • 在 Linux 上,nginx 與 php-fpm 的通信有 tcp socket 和 unix socket 兩種方式。
  • tcp socket 的優(yōu)點(diǎn)是可以跨服務(wù)器,當(dāng) nginx 和 php-fpm 不在同一臺(tái)機(jī)器上時(shí),只能使用這種方式。
  • Unix socket 又叫 IPC (inter-process communication 進(jìn)程間通信) socket,用于實(shí)現(xiàn)同一主機(jī)上的進(jìn)程間通信,這種方式需要在 nginx 配置文件中填寫(xiě) php-fpm 的 socket 文件位置。

兩種方式的數(shù)據(jù)傳輸過(guò)程如下圖所示:

php-fpm 進(jìn)程管理

php-fpm 采用的是 master-worker 的進(jìn)程方式。其中,

  • master 負(fù)責(zé)監(jiān)聽(tīng)端口,等待鏈接;其次,注冊(cè)信號(hào),可以通過(guò)信息好 master 進(jìn)行管理
  • worker 負(fù)責(zé)處理具體的邏輯
    查看 php-fpm 日志信息
  • 默認(rèn)路徑 -/usr/local/php/var/log

php-fpm 優(yōu)化

php.ini 優(yōu)化

//默認(rèn)情況下服務(wù)器對(duì)上傳文件的大小是有限制的,如果想修改上傳文件的限制可以修改php.ini文件
file_uploads = On; //是否允許上傳文件 
upload_max_filesize = 1024M; //上傳文件的最大限制
post_max_size = 1024M; //通過(guò)post提交的最多數(shù)據(jù)
max_execution_time = 300; //腳本最長(zhǎng)的執(zhí)行時(shí)間 單位為秒
max_input_time = 30000; //接收提交的數(shù)據(jù)的時(shí)間限制 單位為秒
memory_limit = 256M; //每個(gè)腳本使用的最大內(nèi)存  ;在安全模式下,你不能用ini_set()在運(yùn)行時(shí)改變這個(gè)設(shè)置。

php-fpm.conf 優(yōu)化

(1)進(jìn)程數(shù)設(shè)置

 pm = dynamic
 pm.max_children = 15  //靜態(tài)方式下開(kāi)啟的php-fpm進(jìn)程數(shù)量
 pm.start_servers = 5    //動(dòng)態(tài)方式下的起始php-fpm進(jìn)程數(shù)量
 pm.min_spare_servers = 5 //動(dòng)態(tài)方式下 空閑時(shí)間最小的php-fpm進(jìn)程
 pm.max_spare_servers = 5 //動(dòng)態(tài)方式下 空閑時(shí)間最大的php-fpm進(jìn)程

(2)最大處理請(qǐng)求數(shù)

最大處理請(qǐng)求數(shù)是指一個(gè)php-fpm的worker進(jìn)程在處理多少個(gè)請(qǐng)求后就終止掉,master進(jìn)程會(huì)重新respawn新的。

該配置可以避免php解釋器自身或程序引起的memory leaks。 

默認(rèn)值是500, pm.max_requests = 1024 這樣的規(guī)劃,1秒鐘 

最大請(qǐng)求數(shù):15*1024=15360 最小請(qǐng)求數(shù):5*1024=7120

如何避免程序 hang 死

方法 1:設(shè)置 php-fpm 執(zhí)行的超時(shí)時(shí)間為固定值

vi php-fpm.conf 修改為request_terminate_timeout = 60

方法 2:定時(shí) reload php-fpm

在負(fù)載較高的服務(wù)器上定時(shí)重載 php-fpm

reload 可以平滑重啟而不影響生產(chǎn)系統(tǒng)的 php 腳本運(yùn)行,每 15 分鐘 reload 一次

0-59/15 * * * * /usr/local/php/sbin/php-fpm reload

方法 3:優(yōu)化進(jìn)程池配置

php-fpm 根據(jù)配置文件內(nèi)容和實(shí)際情況,動(dòng)態(tài)創(chuàng)建子進(jìn)程來(lái)處理請(qǐng)求。

當(dāng)達(dá)到能夠創(chuàng)建的最大值時(shí),只能阻塞。一個(gè)個(gè)地進(jìn)行執(zhí)行。

進(jìn)程數(shù)優(yōu)化

pm = dynamic
pm.max_children = 300
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35

最大請(qǐng)求數(shù)優(yōu)化

pm.max_requests = 10240

提示:這個(gè)用來(lái)處理因?yàn)?PHP 解析器或引用的第三方庫(kù)時(shí),造成的內(nèi)存泄露問(wèn)題。

最大請(qǐng)求數(shù):指一個(gè) php-fpm 的工作進(jìn)程在處理多少個(gè)請(qǐng)求后就終止掉。

最長(zhǎng)執(zhí)行時(shí)間優(yōu)化(php.ini)

request_terminate_timeout = 20

提示:這個(gè)是用來(lái)處理因?yàn)?PHP 執(zhí)行時(shí)間超長(zhǎng)而報(bào) 502 錯(cuò)誤的解決。

這個(gè)時(shí)長(zhǎng)配置可以在 php.ini(max_execution_time)或 php-fpm.conf 中配置均可,為了不影響全局配置,可在 php-fpm.conf 中實(shí)現(xiàn) crontab 定時(shí)任務(wù)把 php-fpm 平滑重啟,這種方式就是使用 crontab 定時(shí)任務(wù)去定時(shí)查詢網(wǎng)站是否 502 了,如果 502 了,就把 php-fpm 平滑重啟

首先在 /root/ 目錄下面創(chuàng)建腳本

vim restart-php-fpm.sh

然后給這個(gè)腳本賦予執(zhí)行權(quán)限

chmod +x /root/restart-php-fpm.sh

然后就是編寫(xiě)腳本內(nèi)容了,上代碼

#!/bin/bash
MY_URL="http://www.****.com/"
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`
if [ -n "$RESULT" ]; then
 /etc/init.d/php7.2-fpm restart
fi

注意:

我是使用的 /etc/init.d/php7.2-fpm restart 這種方式重啟的

然后編寫(xiě)定時(shí)任務(wù)

crontab -e
/root/restart-php-fpm.sh

用 crontab -l 查看定時(shí)任務(wù)列表

以上就是php-fpm優(yōu)化總結(jié)經(jīng)驗(yàn)分享的詳細(xì)內(nèi)容,更多關(guān)于php-fpm優(yōu)化經(jīng)驗(yàn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • php驗(yàn)證碼生成器

    php驗(yàn)證碼生成器

    這篇文章主要為大家詳細(xì)介紹了php驗(yàn)證碼生成器的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • PHP多維數(shù)組遍歷方法(2種實(shí)現(xiàn)方法)

    PHP多維數(shù)組遍歷方法(2種實(shí)現(xiàn)方法)

    這篇文章主要介紹了PHP多維數(shù)組遍歷方法,實(shí)例分析了2種多維數(shù)組的遍歷技巧,包括簡(jiǎn)單的foreach遍歷與遞歸操作遍歷實(shí)現(xiàn)方法,需要的朋友可以參考下
    2015-12-12
  • PHP實(shí)現(xiàn)圖片旋轉(zhuǎn)的方法詳解

    PHP實(shí)現(xiàn)圖片旋轉(zhuǎn)的方法詳解

    這篇文章主要為大家詳細(xì)介紹了PHP如何實(shí)現(xiàn)圖片旋轉(zhuǎn)功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)PHP有一定幫助,感興趣的小伙伴可以了解一下
    2022-11-11
  • php中str_pad()函數(shù)用法分析

    php中str_pad()函數(shù)用法分析

    這篇文章主要介紹了php中str_pad()函數(shù)用法,較為詳細(xì)的分析了php中str_pad()函數(shù)的功能、參數(shù)含義及具體使用方法,需要的朋友可以參考下
    2017-03-03
  • PHP中iconv函數(shù)轉(zhuǎn)碼時(shí)截?cái)嘧址麊?wèn)題的解決方法

    PHP中iconv函數(shù)轉(zhuǎn)碼時(shí)截?cái)嘧址麊?wèn)題的解決方法

    這篇文章主要介紹了PHP中iconv函數(shù)轉(zhuǎn)碼時(shí)截?cái)嘧址麊?wèn)題的解決方法,本文給出的解決方法是使用mb_convert_encoding代替iconv,需要的朋友可以參考下
    2015-01-01
  • php生成excel文件的簡(jiǎn)單方法

    php生成excel文件的簡(jiǎn)單方法

    生成excel文件,最簡(jiǎn)單的莫過(guò)于把數(shù)據(jù)庫(kù)的數(shù)據(jù)導(dǎo)入到excel就行了,下面有個(gè)不錯(cuò)的示例,大家可以參考下
    2014-02-02
  • Ezpop?pop序列化鏈反序列化知識(shí)

    Ezpop?pop序列化鏈反序列化知識(shí)

    這篇文章主要為大家介紹了Ezpop?pop序列化鏈反序列化知識(shí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • php 中文處理函數(shù)集合

    php 中文處理函數(shù)集合

    php中文處理工具函數(shù)
    2008-08-08
  • PHP新特性詳解之命名空間、性狀與生成器

    PHP新特性詳解之命名空間、性狀與生成器

    這篇文章主要給大家介紹了關(guān)于PHP新特性之命名空間、性狀與生成器的相關(guān)資料,主要涉及到php中trait(性狀)與generator(生成器) 方面的內(nèi)容,對(duì)于php中trait(性狀)與generator(生成器) 感興趣的同學(xué)可以參考一下。
    2017-07-07
  • PHP獲取時(shí)間戳等相關(guān)函數(shù)匯總

    PHP獲取時(shí)間戳等相關(guān)函數(shù)匯總

    PHP是一種廣泛使用的服務(wù)器端腳本語(yǔ)言,具有豐富的時(shí)間戳相關(guān)函數(shù)。本文介紹了PHP中獲取時(shí)間戳的常用函數(shù),包括time()、strtotime()、date()等,并提供了使用示例。同時(shí),還介紹了PHP中其他與時(shí)間相關(guān)的函數(shù),如mktime()、microtime()等。
    2023-06-06

最新評(píng)論