PHP的502報錯

相信自己,加油!


****

 nginx+php 出現502 bad gateway,一般這都不是nginx的問題,而是由於 fastcgi或者php的問題導致的

  服務器出現 502 的原因是連接超時 我們向服務器發送請求 由於服務器當前鏈接太多,導致服務器方面無法給於正常的響應 , 產生此類報錯

因此如果你服務器併發量非常大,那隻能先增加機器,然後按以下方式優化會取得更好效果 ; 但如果你併發不大卻出現 502 ,一般都可以歸結爲配置問題,腳本超時問題。

****

 

 

1、memory_limit       /etc/php/7.2/cli/php.ini

     如果有個別php程序進程需要佔用極大內存時這個必須注意

 

2、max_children           php-fpm.conf

     設置不合理,php-fpm 進程數不夠用,設置過小會因爲沒有足夠的cgi進程處理請求,設置過

     大會出現一會兒有響應正常,一會兒等很久纔有響應的情況,使用 netstat -napo |grep "php-

     fpm" | wc -l 查看一下當前 fastcgi 進程個數,如果個數接近 conf 裏配置的上限,就需要調高

     進程數(一般情況下children 按照內存計算,比如說1G設置64,2G128。這個根據實際情況

     自行調整。)

 

3、pstream sent too big header while reading response  headerfrom upstream    nginx日誌

    檢查client head buffer,fastcgi buffer  size是否過小

 

4、 timeout PHP程序執行時間過長而超時    

     檢查nginx和fastcgi中各種timeout設置。nginx 中的  fastcgi_connect_timeout 300;  

     fastcgi_send_timeout 300     fastcgi_read_timeout300       keepalive_timeout ;

     php-fpm中的request_terminate_timeout,php.ini中的max_execution_time

 

5、max_requests        php-fpm  

    該參數指明瞭每個children最多處理多少個請求後便會被關閉。在大量處理請求下,如果該值

    設置過小會導致 children頻繁的自殺和建立 而浪費大量時間,若所有的children差不多都在這

    個時候自殺,則重建前將沒有children響應請求,於是出現502。可以將該值設置大一些或者

    是0[無限]。

 

6、調高 linux 內核打開文件數量

    ( 必須是 root 帳號 )

     echo 'ulimit -HSn 65536'>> /etc/profile

     echo 'ulimit -HSn 65536'>> /etc/rc.local

     source /etc/profile

 

7、腳本執行時間超時

   如果腳本因爲某種原因長時間等待不返回 ,導致新來的請求不能得到處理,調小如下配置。

   nginx.conf 裏面主要是如下

             fastcgi_connect_timeout 300;

             fastcgi_send_timeout 300;

             fastcgi_read_timeout 300;

   php-fpm.conf 裏如要是如下

             request_terminate_timeout =10s

 

8、緩存設置較小

    修改或增加配置到 nginx.conf

         proxy_buffer_size 64k;

         proxy_buffers  512k;

         proxy_busy_buffers_size 128k;

 

9、recv()failed (104: Connection reset by peer) while reading response header

    fromupstream

    最重要的是程序裏要設置好超時,不要使用 php-fpm 的 request_terminate_timeout

    最好設成 request_terminate_timeout=0;

    因爲這個參數會直接殺掉 php 進程,然後重啓 php 進程,這樣前端 nginx 就會返回 104:

     Connection reset by peer 。這個過程是很慢,總體感覺就是網站很卡。

    還應該注意到php.ini中的max_execution_time參數。當請求終止時,也會出現502錯誤的。

 

10、調整增大php 和Nginx 的backlog數

     listen.backlog = 4096



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章