這篇文章主要講解了“php方法執(zhí)行時(shí)間過(guò)長(zhǎng)的問(wèn)題怎么解決”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“php方法執(zhí)行時(shí)間過(guò)長(zhǎng)的問(wèn)題怎么解決”吧!
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到海北州網(wǎng)站設(shè)計(jì)與海北州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋海北州地區(qū)。
php方法執(zhí)行時(shí)間過(guò)長(zhǎng)的解決辦法:1、進(jìn)行Nginx網(wǎng)關(guān)請(qǐng)求超時(shí)設(shè)置;2、進(jìn)行PHP腳本執(zhí)行時(shí)間上限設(shè)置。
本文操作環(huán)境:windows7系統(tǒng)、PHP7.1版,DELL G3電腦
如何解決php方法執(zhí)行時(shí)間過(guò)長(zhǎng)的問(wèn)題?
解決 PHP 方法執(zhí)行時(shí)間過(guò)長(zhǎng)導(dǎo)致 502 Bad Gateway
背景
最近遇到一個(gè)問(wèn)題,有一段 PHP 代碼需要涉及到長(zhǎng)時(shí)間的 IO 操作,而這一段會(huì)阻塞請(qǐng)求所在的線程,導(dǎo)致請(qǐng)求超時(shí)。
你可能會(huì)說(shuō),這有啥難的,開(kāi)個(gè)線程異步去做,做好了更新?tīng)顟B(tài)就 OK 了。這真是一個(gè)不錯(cuò)的方案,可惜這一整套代碼都是別人的。如果要修改代碼,業(yè)務(wù)上會(huì)牽一發(fā)而動(dòng)全身,所以我的解決辦法是盡量不修改代碼的情況下,通過(guò)配置超時(shí)時(shí)間來(lái)解決這個(gè)問(wèn)題。
解決方案
從以上問(wèn)題來(lái)看,超時(shí)主要受到兩個(gè)因素的影響:
Nginx 網(wǎng)關(guān)請(qǐng)求超時(shí)設(shè)置
PHP 腳本執(zhí)行時(shí)間上限設(shè)置
我們依次進(jìn)行設(shè)置。
Nginx 網(wǎng)關(guān)請(qǐng)求超時(shí)設(shè)置
Nginx 支持超時(shí)的設(shè)置粒度很細(xì)。主要使用的幾個(gè)如下:
keepalive_timeout
Nginx 使用 keepalive_timeout 來(lái)指定 KeepAlive 的超時(shí)時(shí)間。指定每個(gè) TCP 連接最多可以保持多長(zhǎng)時(shí)間。Nginx 的默認(rèn)值是 75 秒,有些瀏覽器最多只保持 60 秒,所以可以設(shè)定為 60 秒。
fastcgi_connect_timeout
與FastCGI服務(wù)器建立連接的超時(shí)。
fastcgi_send_timeout
設(shè)置將請(qǐng)求傳輸?shù)紽astCGI服務(wù)器的超時(shí)。 僅在兩次連續(xù)寫入操作之間設(shè)置超時(shí),而不是為整個(gè)請(qǐng)求的傳輸。 如果FastCGI服務(wù)器在此時(shí)間內(nèi)未收到任何內(nèi)容,則關(guān)閉連接。
fastcgi_read_timeout
從FastCGI服務(wù)器讀取響應(yīng)的超時(shí)。 僅在兩個(gè)連續(xù)的讀操作之間設(shè)置超時(shí),而不是為整個(gè)響應(yīng)的傳輸。 如果FastCGI服務(wù)器在此時(shí)間內(nèi)未傳輸任何內(nèi)容,則關(guān)閉連接。
考慮到一次請(qǐng)求 PHP 腳本的執(zhí)行和后三個(gè)設(shè)置比較相關(guān)。所以在對(duì)應(yīng)網(wǎng)站的 Nginx 配置文件中添加設(shè)置即可。
fastcgi_connect_timeout 600s; fastcgi_send_timeout 600s; fastcgi_read_timeout 600s;
PHP 腳本執(zhí)行時(shí)間上限設(shè)置
PHP 腳本的執(zhí)行時(shí)間主要是受兩個(gè)配置的影響:
php.ini 中 max_execution_time 和 max_input_time
php.ini 的默認(rèn)位置在 /usr/local/php/etc/
將 php.ini 配置文件中的這兩個(gè)配置項(xiàng)修改為超時(shí)時(shí)間上限。
max_execution_time = 600 max_input_time = 600 php-fpm.conf 中 request_terminate_timeout php-fpm.conf 的默認(rèn)位置在 /usr/local/php/etc/ request_terminate_timeout 也設(shè)置為超時(shí)時(shí)間的上限。 request_terminate_timeout = 600
修改完成后重啟 Nginx 和 php-fpm 即可。
service nginx reload /etc/init.d/php-fpm reload
感謝各位的閱讀,以上就是“php方法執(zhí)行時(shí)間過(guò)長(zhǎng)的問(wèn)題怎么解決”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)php方法執(zhí)行時(shí)間過(guò)長(zhǎng)的問(wèn)題怎么解決這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
分享文章:php方法執(zhí)行時(shí)間過(guò)長(zhǎng)的問(wèn)題怎么解決
當(dāng)前地址:http://aaarwkj.com/article38/pccgpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、企業(yè)建站、、定制網(wǎng)站、ChatGPT、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)