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

nginx服務(wù)器異常502 bad gateway原因排查

 更新時(shí)間:2021年08月10日 15:54:25   作者:曉鋒不懂你  
這篇文章主要介紹了nginx服務(wù)器異常502 bad gateway原因排查,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

服務(wù)器進(jìn)行公眾號(hào)粉絲數(shù)據(jù)同步以及批量推送報(bào)錯(cuò)502

根據(jù)錯(cuò)誤信息可以判定是后端的問(wèn)題,502錯(cuò)誤的原因有很多種,但總的來(lái)說(shuō)就是服務(wù)器處理不過(guò)來(lái)了

1.首先查看服務(wù)器日志
1)先查nginx日志,不熟悉的可以從nginx.conf中獲取error_log的路徑,找到錯(cuò)誤如下:

在這里插入圖片描述

發(fā)現(xiàn)nginx進(jìn)程處理的連接數(shù)不夠用,單個(gè)進(jìn)程處理的連接數(shù)超過(guò)了nginx.conf配置的worker_connections值

在這里插入圖片描述

通常worker_connections的值可以參考單個(gè)進(jìn)程打開(kāi)的最大連接數(shù),命令為:ulimit -n
ulimit -a 查看所有限制參數(shù)
當(dāng)前最大打開(kāi)文件數(shù):65535,可以設(shè)置worker_connections為51200

重啟nginx nginx -s reload

查看當(dāng)前tcp連接狀況 
netstat -an|awk '/^tcp/{++S[$NF]}END{for (a in S)print a,S[a]}'

2)查看php-fpm日志,同樣不熟悉日志位置可以從php-fpm.conf中查看,注意php7以上的配置文件是放在php-fpm.d目錄下的www.conf

查看php-fpm.log

在這里插入圖片描述

發(fā)現(xiàn)pm.max_children不夠用了,說(shuō)明php-fpm最大進(jìn)程數(shù)太小了,查看php配置文件ww.conf,修改改參數(shù)pm.max_children=100

php-fpm主要調(diào)整幾個(gè)參數(shù)
pm = dynamic 如何控制子進(jìn)程,選項(xiàng)有static和dynamic

pm.max_children:靜態(tài)方式下開(kāi)啟的php-fpm進(jìn)程數(shù)量

pm.max_requests:php-fpm子進(jìn)程能處理的最大請(qǐng)求數(shù)

pm.start_servers:動(dòng)態(tài)方式下的起始php-fpm進(jìn)程數(shù)量
pm.min_spare_servers:動(dòng)態(tài)方式下的最小php-fpm進(jìn)程數(shù)
pm.max_spare_servers:動(dòng)態(tài)方式下的最大php-fpm進(jìn)程數(shù)量

一、pm.max_children,pm.max_spare_servers 多大合適?

這個(gè)值原則上是越大越好,php-cgi的進(jìn)程多了就會(huì)處理的很快,排隊(duì)的請(qǐng)求就會(huì)很少。
設(shè)置”max_children” 也需要根據(jù)服務(wù)器的性能進(jìn)行設(shè)定。

數(shù)量也可以根據(jù) 內(nèi)存/30M 得到,比如8GB內(nèi)存可以設(shè)置為100,那么php-fpm耗費(fèi)的內(nèi)存就能控制在 2G-3G的樣子。

對(duì)于小內(nèi)存的服務(wù)器來(lái)說(shuō),比如256M內(nèi)存的VPS,即使按照一個(gè)20M的內(nèi)存量來(lái)算,10個(gè)php-cgi進(jìn)程就將耗掉200M內(nèi)存,那系統(tǒng)的崩潰就應(yīng)該很正常了。

因此應(yīng)該盡量地控制php-fpm進(jìn)程的數(shù)量,大體明確其他應(yīng)用占用的內(nèi)存后,
給它指定一個(gè)靜態(tài)的小數(shù)量,會(huì)讓系統(tǒng)更加平穩(wěn)一些?;蛘呤褂脛?dòng)態(tài)方式,
因?yàn)閯?dòng)態(tài)方式會(huì)結(jié)束掉多余的進(jìn)程,可以回收釋放一些內(nèi)存,所以推薦在內(nèi)存較少的服務(wù)器或VPS上使用。具體最大數(shù)量根據(jù) 內(nèi)存/30M 得到。

pm.start_servers缺省值計(jì)算公式: min_spare_servers + (max_spare_servers - min_spare_servers) / 2。

比如說(shuō)512M的VPS,加入分配給php-fpm最大250M,建議pm.max_spare_servers設(shè)置為250/30 ,約為8。至于pm.min_spare_servers,則建議根據(jù)服務(wù)器的負(fù)載情況來(lái)設(shè)置,比如服務(wù)器上只是部署php環(huán)境的話,比較合適的值在2~5之間。

這里面還有一個(gè)問(wèn)題,php-fpm因?yàn)橐恍┑谌綆?kù)可能會(huì)引起內(nèi)存泄漏,時(shí)間長(zhǎng)了,占用的內(nèi)存會(huì)比較多,像我們的服務(wù)器現(xiàn)在就是50m左右,還好,有pm.max_requests這個(gè)參數(shù),這個(gè)參數(shù)指定了一個(gè)php-fpm子進(jìn)程執(zhí)行多少次之后重啟該進(jìn)程。這個(gè)可能就要根據(jù)你的實(shí)際情況調(diào)整了。

計(jì)算方式如下:

一般來(lái)說(shuō)一臺(tái)服務(wù)器正常情況下每一個(gè)php-cgi所耗費(fèi)的內(nèi)存在20M~30M左右,因此我的”max_children”我設(shè)置成40個(gè),20M*40=800M也就是說(shuō)在峰值的時(shí)候所有PHP-CGI所耗內(nèi)存在800M以內(nèi),低于我的有效內(nèi)存2Gb。

而如果我 的”max_children”設(shè)置的較小,比如5-10個(gè),那么php-cgi就會(huì)“很累“,處理速度也很慢,等待的時(shí)間也較長(zhǎng),占用的CPU也很高。

如果長(zhǎng)時(shí)間沒(méi)有得到處理的請(qǐng)求就會(huì)出現(xiàn) 504 Gateway Time-out 這個(gè)錯(cuò)誤,而正在處理的很累的那幾個(gè)php-cgi如果遇到了問(wèn)題就會(huì)出現(xiàn) 502 Bad gateway 這個(gè)錯(cuò)誤。

max_children較好的設(shè)置方式根據(jù)req/s
(吞吐率,單位時(shí)間里服務(wù)器處理的最大請(qǐng)求數(shù),單位req/s)來(lái)設(shè)置,
若程序是 100 req/s 的處理能力,那么就設(shè)置 100比較好,這是動(dòng)態(tài)來(lái)調(diào)整的。

二、request_terminate_timeout 多大合適?

計(jì)算方式如下:

如果你的服務(wù)器性能足夠好,且寬帶資源足夠充足,PHP腳本沒(méi)有循環(huán)或BUG的話你可以直接將”request_terminate_timeout”設(shè) 置成0s。0s的含義是讓PHP-CGI一直執(zhí)行下去而沒(méi)有時(shí)間限制。

而如果你做不到這一點(diǎn),也就是說(shuō)你的PHP-CGI可能出現(xiàn)某個(gè)BUG,或者你的寬帶不夠充足或者其他的原因?qū)е履愕腜HP-CGI能夠假死那么就建議你給”request_terminate_timeout”賦一個(gè)值,這個(gè)值可以根 據(jù)你服務(wù)器的性能進(jìn)行設(shè)定。

一般來(lái)說(shuō)性能越好你可以設(shè)置越高,20分鐘-30分鐘都可以。由于我的服務(wù)器PHP腳本需要長(zhǎng)時(shí)間運(yùn)行,有的可能會(huì)超過(guò)10分鐘因此我設(shè)置了900秒,這樣不會(huì)導(dǎo)致PHP-CGI死掉而出現(xiàn)502 Bad gateway這個(gè)錯(cuò)誤。

優(yōu)化后的參數(shù)

編輯/usr/local/php/etc/php-fpm.d/www.conf:
服務(wù)器配置:2核8G
pm = dynamic
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 100

request_terminate_timeout=1200

查出服務(wù)的進(jìn)程id
ps aux |grep php-fpm
kill -9 進(jìn)程id 常用來(lái)殺死僵尸進(jìn)程

總結(jié)nginx出現(xiàn)502錯(cuò)誤原因

二、代理緩沖區(qū)設(shè)置過(guò)小
如果你使用的是nginx反向代理,如果header過(guò)大,超出了默認(rèn)的1k,就會(huì)引發(fā)上述的upstream sent too big header (說(shuō)白了就是nginx把外部請(qǐng)求給后端處理,后端返回的header太大,nginx處理不過(guò)來(lái)就會(huì)導(dǎo)致502。

server {

listen       80;
server_name  *.lxy.me;

location / {

添加這3行
fastcgi_buffer_size 64k;
fastcgi_buffers 32 32k;
fastcgi_busy_buffers_size 128k;
添加這3行
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
…………
}

三、默認(rèn)php-cgi的進(jìn)程數(shù)設(shè)置過(guò)少
在安裝好使用過(guò)程中出現(xiàn)502問(wèn)題,一般是因?yàn)槟J(rèn)php-cgi進(jìn)程是5個(gè),可能因?yàn)閜hpcgi進(jìn)程不夠用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 將其中的max_children值適當(dāng)增加。也有可能是max_requests值不夠用。需要說(shuō)明的是這連個(gè)配置項(xiàng)占用內(nèi)存很大,請(qǐng)根據(jù)服務(wù)器配置進(jìn)行設(shè)置。否則可能起到反效果。

四、php執(zhí)行超時(shí)
php執(zhí)行超時(shí),修改/usr/local/php/etc/php.ini 將max_execution_time 改為300

五、nginx等待時(shí)間超時(shí)
部分PHP程序的執(zhí)行時(shí)間超過(guò)了Nginx的等待時(shí)間,可以適當(dāng)增加nginx.conf配置文件中FastCGI的timeout時(shí)間

http {
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
……
}

六、如果做公眾號(hào)這一塊,注意有可能是微信服務(wù)器請(qǐng)求自己服務(wù)器過(guò)多導(dǎo)致的
如果發(fā)現(xiàn)php-fpm進(jìn)程數(shù)已經(jīng)達(dá)到最大的進(jìn)程數(shù),查看php-fpm配置文件,可以看到錯(cuò)誤信息

到此這篇關(guān)于nginx服務(wù)器異常502 bad gateway原因排查的文章就介紹到這了,更多相關(guān)nginx服務(wù)器異常502 bad gateway內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Nginx反向代理解決跨域問(wèn)題詳解

    利用Nginx反向代理解決跨域問(wèn)題詳解

    這篇文章主要介紹了利用Nginx反向代理解決跨域問(wèn)題詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • 詳解linux中 Nginx 常見(jiàn)502錯(cuò)誤問(wèn)題解決辦法

    詳解linux中 Nginx 常見(jiàn)502錯(cuò)誤問(wèn)題解決辦法

    這篇文章主要介紹了詳解linux中 Nginx 常見(jiàn)502錯(cuò)誤問(wèn)題解決辦法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • nginx找到默認(rèn)根目錄(root?html)的方法

    nginx找到默認(rèn)根目錄(root?html)的方法

    這篇文章主要給大家介紹了nginx如何找到默認(rèn)根目錄(root?html),文中給出詳細(xì)的解決方法,通過(guò)代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-11-11
  • nginx和lvs各自的優(yōu)劣以及適合的使用環(huán)境

    nginx和lvs各自的優(yōu)劣以及適合的使用環(huán)境

    這篇文章主要介紹了nginx和lvs各自的優(yōu)劣以及適合的使用環(huán)境,幫助大家選擇符合需求的服務(wù)器,感興趣的朋友可以了解下
    2020-10-10
  • Nginx實(shí)現(xiàn)跨域使用字體文件的配置詳解

    Nginx實(shí)現(xiàn)跨域使用字體文件的配置詳解

    這篇文章主要給大家介紹了關(guān)于Nginx實(shí)現(xiàn)跨域使用字體文件的配置方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-06-06
  • Nginx中l(wèi)imit_req模塊和limit_conn模塊的使用

    Nginx中l(wèi)imit_req模塊和limit_conn模塊的使用

    本文主要介紹了Nginx中l(wèi)imit_req模塊和limit_conn模塊的使用,通過(guò)limit_req和limit_conn模塊,可以有效實(shí)現(xiàn)精確的請(qǐng)求頻率和連接數(shù)控制,下面就來(lái)具體介紹一下
    2024-05-05
  • Nginx配置文件nginx.conf詳細(xì)說(shuō)明

    Nginx配置文件nginx.conf詳細(xì)說(shuō)明

    本篇文章主要介紹了Nginx配置文件nginx.conf詳細(xì)說(shuō)明,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • Nginx+CI框架出現(xiàn)404錯(cuò)誤怎么解決

    Nginx+CI框架出現(xiàn)404錯(cuò)誤怎么解決

    這篇文章主要介紹了Nginx+CI出現(xiàn)404錯(cuò)誤怎么解決的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • nginx編譯安裝后對(duì)nginx進(jìn)行平滑升級(jí)的方法

    nginx編譯安裝后對(duì)nginx進(jìn)行平滑升級(jí)的方法

    nginx編譯安裝后用了一段時(shí)間后發(fā)現(xiàn)當(dāng)前版本有漏洞或需要新的功能時(shí)就需要對(duì)當(dāng)前nginx版本進(jìn)行版本升級(jí),所以這時(shí)就需到對(duì)nginx的平滑升級(jí),如何進(jìn)行平滑升級(jí),下面就一起來(lái)了解一下
    2018-12-12
  • 詳解用Nginx搭建CDN服務(wù)器方法(圖文)

    詳解用Nginx搭建CDN服務(wù)器方法(圖文)

    這篇文章主要介紹了詳解用Nginx搭建CDN服務(wù)器方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評(píng)論