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

nginx服務器異常502 bad gateway原因排查

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

服務器進行公眾號粉絲數據同步以及批量推送報錯502

根據錯誤信息可以判定是后端的問題,502錯誤的原因有很多種,但總的來說就是服務器處理不過來了

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

在這里插入圖片描述

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

在這里插入圖片描述

通常worker_connections的值可以參考單個進程打開的最大連接數,命令為:ulimit -n
ulimit -a 查看所有限制參數
當前最大打開文件數:65535,可以設置worker_connections為51200

重啟nginx nginx -s reload

查看當前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不夠用了,說明php-fpm最大進程數太小了,查看php配置文件ww.conf,修改改參數pm.max_children=100

php-fpm主要調整幾個參數
pm = dynamic 如何控制子進程,選項有static和dynamic

pm.max_children:靜態(tài)方式下開啟的php-fpm進程數量

pm.max_requests:php-fpm子進程能處理的最大請求數

pm.start_servers:動態(tài)方式下的起始php-fpm進程數量
pm.min_spare_servers:動態(tài)方式下的最小php-fpm進程數
pm.max_spare_servers:動態(tài)方式下的最大php-fpm進程數量

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

這個值原則上是越大越好,php-cgi的進程多了就會處理的很快,排隊的請求就會很少。
設置”max_children” 也需要根據服務器的性能進行設定。

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

對于小內存的服務器來說,比如256M內存的VPS,即使按照一個20M的內存量來算,10個php-cgi進程就將耗掉200M內存,那系統(tǒng)的崩潰就應該很正常了。

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

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

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

這里面還有一個問題,php-fpm因為一些第三方庫可能會引起內存泄漏,時間長了,占用的內存會比較多,像我們的服務器現(xiàn)在就是50m左右,還好,有pm.max_requests這個參數,這個參數指定了一個php-fpm子進程執(zhí)行多少次之后重啟該進程。這個可能就要根據你的實際情況調整了。

計算方式如下:

一般來說一臺服務器正常情況下每一個php-cgi所耗費的內存在20M~30M左右,因此我的”max_children”我設置成40個,20M*40=800M也就是說在峰值的時候所有PHP-CGI所耗內存在800M以內,低于我的有效內存2Gb。

而如果我 的”max_children”設置的較小,比如5-10個,那么php-cgi就會“很累“,處理速度也很慢,等待的時間也較長,占用的CPU也很高。

如果長時間沒有得到處理的請求就會出現(xiàn) 504 Gateway Time-out 這個錯誤,而正在處理的很累的那幾個php-cgi如果遇到了問題就會出現(xiàn) 502 Bad gateway 這個錯誤。

max_children較好的設置方式根據req/s
(吞吐率,單位時間里服務器處理的最大請求數,單位req/s)來設置,
若程序是 100 req/s 的處理能力,那么就設置 100比較好,這是動態(tài)來調整的。

二、request_terminate_timeout 多大合適?

計算方式如下:

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

而如果你做不到這一點,也就是說你的PHP-CGI可能出現(xiàn)某個BUG,或者你的寬帶不夠充足或者其他的原因導致你的PHP-CGI能夠假死那么就建議你給”request_terminate_timeout”賦一個值,這個值可以根 據你服務器的性能進行設定。

一般來說性能越好你可以設置越高,20分鐘-30分鐘都可以。由于我的服務器PHP腳本需要長時間運行,有的可能會超過10分鐘因此我設置了900秒,這樣不會導致PHP-CGI死掉而出現(xiàn)502 Bad gateway這個錯誤。

優(yōu)化后的參數

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

request_terminate_timeout=1200

查出服務的進程id
ps aux |grep php-fpm
kill -9 進程id 常用來殺死僵尸進程

總結nginx出現(xiàn)502錯誤原因

二、代理緩沖區(qū)設置過小
如果你使用的是nginx反向代理,如果header過大,超出了默認的1k,就會引發(fā)上述的upstream sent too big header (說白了就是nginx把外部請求給后端處理,后端返回的header太大,nginx處理不過來就會導致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;
…………
}

三、默認php-cgi的進程數設置過少
在安裝好使用過程中出現(xiàn)502問題,一般是因為默認php-cgi進程是5個,可能因為phpcgi進程不夠用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 將其中的max_children值適當增加。也有可能是max_requests值不夠用。需要說明的是這連個配置項占用內存很大,請根據服務器配置進行設置。否則可能起到反效果。

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

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

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

六、如果做公眾號這一塊,注意有可能是微信服務器請求自己服務器過多導致的
如果發(fā)現(xiàn)php-fpm進程數已經達到最大的進程數,查看php-fpm配置文件,可以看到錯誤信息

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

相關文章

  • Linux部署Nginx實現(xiàn)反向代理的方法步驟

    Linux部署Nginx實現(xiàn)反向代理的方法步驟

    Nginx 是一種常用、輕型且快速的 Web 服務器, 它可以在 Linux 和 Windows 上運行,并且可以配置為反向代理服務器,本文主要介紹了Linux部署Nginx實現(xiàn)反向代理的方法步驟,感興趣的可以了解一下
    2023-08-08
  • CentOS如何用nginx搭建文件下載服務器

    CentOS如何用nginx搭建文件下載服務器

    Nginx 是開源、高性能、高可靠的 Web 和反向代理服務器,而且支持熱部署,幾乎可以做到 7 * 24 小時不間斷運行,即使運行幾個月也不需要重新啟動,這篇文章主要介紹了CentOS用nginx搭建文件下載服務器,需要的朋友可以參考下
    2023-11-11
  • Nginx反向代理及負載均衡如何實現(xiàn)(基于linux)

    Nginx反向代理及負載均衡如何實現(xiàn)(基于linux)

    這篇文章主要介紹了Nginx反向代理及負載均衡如何實現(xiàn)(基于linux),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • 詳解Nginx如何配置繼承模型

    詳解Nginx如何配置繼承模型

    這篇文章主要介紹了詳解Nginx如何配置繼承模型,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 配置nginx轉發(fā)內網請求到外網的實現(xiàn)示例

    配置nginx轉發(fā)內網請求到外網的實現(xiàn)示例

    本文主要介紹了配置nginx轉發(fā)內網請求到外網的實現(xiàn)示例,通過nginx配置代理實現(xiàn)內網對外網接口數據的獲取,涉及nginx安裝、配置SSL、日志設置和錯誤排查,感興趣的可以了解一下
    2024-10-10
  • nginx?添加http_stub_status_module模塊

    nginx?添加http_stub_status_module模塊

    本文主要介紹了nginx?添加http_stub_status_module模塊,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • Nginx 重定向時獲取域名的方法示例

    Nginx 重定向時獲取域名的方法示例

    本篇文章主要介紹了Nginx 重定向時獲取域名的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • nginx+lua+redis防刷和限流的實現(xiàn)

    nginx+lua+redis防刷和限流的實現(xiàn)

    本文將介紹如何使用nginx lua redis實現(xiàn)防刷和限流,首先,我們將了解防刷和限流的基本概念和必要性,然后,我們將詳細介紹如何使用nginx lua redis實現(xiàn)防刷和限流,感興趣的可以了解一下
    2023-09-09
  • 在Nginx服務器中配置mod_proxy反向代理的方法

    在Nginx服務器中配置mod_proxy反向代理的方法

    這篇文章主要介紹了在Nginx服務器中配置mod_proxy反向代理的方法,Nginx服務器最大的特點就是作高性能反向代理使用,需要的朋友可以參考下
    2015-07-07
  • Nginx 啟動腳本/重啟腳本代碼

    Nginx 啟動腳本/重啟腳本代碼

    Nginx 啟動腳本 重啟腳本,學習使用centos配置服務器的朋友可以參考下。
    2010-10-10

最新評論