錯(cuò)誤日志:
error_log(/www/wwwroot/xxxx.xxxxxxxx.com/php-server/runtime/log/20240502_info.log): failed to open stream: Too many open files/www/wwwroot/xxxxx.com/php-server/vendor/topthink/framework/src/think/log/driver/File.php126
原因分析:
這個(gè)錯(cuò)誤信息說明在嘗試寫入日志文件時(shí),因?yàn)檫_(dá)到了系統(tǒng)允許的最大文件描述符數(shù)量,導(dǎo)致無法打開新的文件流。
排查方法:
1:可以先使用ulimit -n命令查看一下當(dāng)前操作系統(tǒng)的最大描述符數(shù)量。
2:使用lsof -p 1551 | wc -l,查看swoole進(jìn)程當(dāng)前已經(jīng)創(chuàng)建的描述符數(shù)量。1551指的是swoole的進(jìn)程id。
3:使用cat /proc/1551/limits ,查看swoole進(jìn)程允許創(chuàng)建的最大文件句柄數(shù)量max open files
linux操作系統(tǒng)解決方法:
修復(fù)方案是增加操作系統(tǒng)配置文件中對(duì)最大描述符數(shù)量的限制,其實(shí)這個(gè)問題在swoole的官方文檔中已經(jīng)有修復(fù)方法了,采用swoole官方的方案修復(fù)即可。
隨后重啟操作系統(tǒng),然后使用ulimit -n查看輸出是否為修改后的2622140
繼續(xù)使用命令cat /proc/9949/limits,9949為swoole的進(jìn)程id,該命令查看到Max open files 為1024, 因?yàn)閟woole是supervisor啟動(dòng)的,而1024為supervisor的minfds默認(rèn)配置,不對(duì)勁。,為什么swoole進(jìn)程允許的最大描述符數(shù)量沒有遵循修改后的操作系統(tǒng)最大描述符文件數(shù)量。。
懶得深入研究了,直接修改supervisor的minfds,我改成了150000,重啟supervisor。最后使用cat /proc/9949/limits,可以查看到swoole進(jìn)程最大可創(chuàng)建的描述符文件數(shù)150000已生效。
總結(jié):
1:先調(diào)整操作系統(tǒng)最大允許創(chuàng)建的描述符數(shù)量配置;
2:修改supervisor配置,保證supervisor啟動(dòng)的swoole進(jìn)程擁有足夠多的創(chuàng)建文件句柄的數(shù)量。
3:使用cat /proc/9949/limits,查看配置是否生效。