今天程式在執行一項excel匯出任務的時候出現了nginx超時的提示
nginx 504 Gateway Time-out
排查過程:
查看該任務發現內容是一個資料量20000條資訊每條資訊有50個欄位在執行導出為excel的時候出現了該問題
執行時間大概在10分鐘左右就出現超時
分析:
Nginx 504 Gateway Time-out的含義是所請求的網關沒有請求到,簡單來說就是沒有請求到可以執行的PHP-CGI
通常以下幾種情況會導致這個問題:
1.程式在處理大量的數據,或者有死循環之類的問題
2.創建資料庫之類的連接因為某些原因連接不上,然後沒有超時失敗的機制,導致一直在創建連接
3.程式中有一些http請求,這些請求執行時間過長,導致超時
分別查看nginx及php的相關配置查看timeout具體參數
找到nginx設定檔
<span>#修改Nginx配置: fastcgi_connect_timeout 1200s;#原设置为300s fastcgi_send_timeout 1200s;<span>#原设置为300s</span>fastcgi_read_timeout 1200s;<span>#原设置为300s</span>fastcgi_buffer_size 64k; fastcgi_buffers </span><span>4</span><span> 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 256k;</span>
這裡最主要的設定是前三條,即
<span>fastcgi_connect_timeout #同 FastCGI 服务器的连接超时时间,默认值60秒,它不能超过75秒;<br>fastcgi_send_timeout #Nginx 进程向 FastCGI 进程发送 request ,整个过程的超时时间,默认值60秒;<br>fastcgi_read_timeout #FastCGI 进程向 Nginx 进程发送 response ,整个过程的超时时间,默认值60秒;<br></span>
php設定檔
<span>php.ini<br></span><span>max_execution_time = 300s;PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。<br>php-fpm<br>request_terminate_timeout = 0; #设置单个请求的超时中止时间.设置为0 即一直执行下去直到程序结束 不会超时 </span>reee
但是頁面空白,並沒有文件匯出。應該還是php在執行過程中逾時
沒辦法查看php程式碼並沒有發現有執行時間的設定即:set_time_limit
百度一下php函數執行時間查到以下內容:
set_time_limit
一下php函數執行時間查到以下內容:set_time_limit本函數來配置該頁最久執行時間。預設值是 30 秒,在 php.ini 中的 max_execution_time 變數配置,若配置為 0 則不限定最久時間。
當執行到該函數時,才開始計算。例如,若預設為 30 秒,而在執行到該函數前已執行了 25 秒,而用本函數改為 20 秒,則該頁面最長執行時間為 45 秒。
最後在php函數裡 增加了這樣一行:
set_time_limit(0);
再次執行,結果可以了。
以上就介紹了記一次 nginx 504 Gateway Time-out,包含了504 gateway time-out方面的內容,希望對PHP教學有興趣的朋友有幫助。
🎜 🎜