常見(jiàn)的原因有以下幾種:
1、php.ini 的memory_limit 過(guò)?。ㄈ绻袀€(gè)別php程序進(jìn)程需要占用極大內(nèi)存時(shí)這個(gè)必須注意);
2、php-fpm.conf 中max_children或者max_requests 設(shè)置不合理;
設(shè)置過(guò)小會(huì)因?yàn)闆](méi)有足夠的cgi進(jìn)程處理請(qǐng)求,設(shè)置過(guò)大會(huì)出現(xiàn)一會(huì)兒有響應(yīng)正常,一會(huì)兒等很久才有響應(yīng)的情況。
3、查看nginx錯(cuò)誤日志,發(fā)現(xiàn) pstream sent too big header while reading response headerfrom upstream ,則檢查client head buffer,fastcgi buffer size是否過(guò)小,可設(shè)置為32K;
4、php 程序執(zhí)行時(shí)間過(guò)長(zhǎng)而超時(shí),檢查nginx和fastcgi中各種timeout設(shè)置;
5、php-fpm 有一個(gè)參數(shù) max_requests ,該參數(shù)指明了每個(gè)children最多處理多少個(gè)請(qǐng)求后便會(huì)被關(guān)閉;
在大量處理請(qǐng)求下,如果該值設(shè)置過(guò)小會(huì)導(dǎo)致 children頻繁的自殺和建立而浪費(fèi)大量時(shí)間,若所有的children差不多都在這個(gè)時(shí)候自殺,則重建前將沒(méi)有children響應(yīng)請(qǐng)求,于是出現(xiàn)502 ??梢詫⒃撝翟O(shè)置大一些或者是0[無(wú)限]。