如果遇到Swoole日志中Toomanyopenfiles的报错,不要惊慌,在开发TCP网络应用的过程中,经常会遇到打开的文件太多这个问题。这意味着你的程序已经达到了Linux允许的最大打开文件数。需要修改ulimit设置,可以使用lsof查看进程打开的文件句柄数:wc-l也可以去掉|wc-l检查服务是否打开了那些文件句柄,而不是关闭。可以用ulimit-n查看当前设置的是多少[root@shenyan~]#ulimit-n100001如果太小,需要调整。Swoole文档建议将ulimit-n调整为100000甚至更大。那么如何修改呢?在命令行执行ulimit-n100000进行修改。但需要注意的是,有时这种修改方式只对当前终端有效,关闭或重新打开一个终端会恢复之前的设置。然后需要修改/etc/security/limits.conf,添加*softnofile262140*hardnofile262140rootsoftnofile262140roothardnofile262140*softcoreunlimited*hardcoreunlimitedrootsoftcoreunlimitedroothardcoreunlimited修改limits.conf文件后,需要重启系统才能生效。此操作完成后,如果仍然报错Toomanyopenfiles,那么可以尝试查看运行进程限制:#将PID改为你要查看的进程IDcat/proc/PID/limitsiftheMax这里打开的文件太小,还需要修改。这种情况多发生在使用supervisor等工具进行管理时。supervisor启动服务默认的minfds配置是1024,所以会出现Toomanyopenfiles。如果使用systemd,同样如此,需要修改LimitNOFILE。如果不设置或者设置为LimitNOFILE=unlimited(不识别),默认为1024。这里还要注意设置LimitNOFILE=infinity等于LimitNOFILE=65536。对于需要打开超过10万个文件的,就要自己设置了。综上,遇到Toomanyopenfiles时的解决方法:ulimit-nsupervisor:minfdssystemd:LimitNOFILE
