CWP+OroCommerce执行缓存清除命令报Too many open files错误求助
解决OroCommerce执行
cache:clear --env=prod时的"Too many open files"错误 我之前部署OroCommerce时也碰到过一模一样的问题,跟你一样一开始改了无关的PHP参数,折腾半天才找到关键点。咱们一步步来解决:
1. 先纠正一个误区:你改的max_input_nesting_level跟这个问题没关系
这个参数是用来限制PHP处理嵌套输入数组的深度的,跟文件句柄完全不沾边,你可以把它改回默认值,避免引入其他潜在问题。
2. 临时验证:先给当前shell提权试试
你之前用ulimit -n 30000只是临时生效,而且可能没覆盖到当前执行命令的环境。试试直接在同一行执行:
ulimit -n 65535 && php app/console cache:clear --env=prod
如果这个命令能成功,说明问题确实是文件句柄限制不够,接下来要做永久配置。
3. 永久修改系统级文件句柄限制
临时的ulimit重启shell就失效了,得改系统配置:
- 编辑
/etc/security/limits.conf,在末尾添加:
这里* soft nofile 65535 * hard nofile 65535 root soft nofile 65535 root hard nofile 65535*代表所有用户,soft是警告值,hard是最大值,设置65535是比较稳妥的数值。 - 然后检查
/etc/pam.d/common-session和/etc/pam.d/common-session-noninteractive这两个文件,确保里面有一行:
没有的话就加上,这是让系统加载limits配置的关键。session required pam_limits.so - 重启系统或者重新登录你的shell,执行
ulimit -n看看是否显示65535。
4. 确认运行命令的用户权限
你是用realized用户执行的命令,得确保这个用户的限制已经生效:
su - realized -c "ulimit -n"
如果输出不是65535,说明limits配置没应用到这个用户,检查一下limits.conf的语法有没有错,或者有没有针对这个用户的单独限制。
5. 额外排查:看看是不是其他进程占了太多句柄
有时候系统里其他进程占用了大量文件句柄,也会导致这个问题。执行以下命令查看当前系统总打开文件数:
lsof | wc -l
或者查看realized用户的进程占用:
lsof -u realized | wc -l
如果数值接近你之前设置的30000,那说明确实需要提高系统的整体限制。
6. 关于CWP的注意事项
CWP面板有时候会有自己的进程管理限制,但你是用CLI执行缓存清理,所以重点还是系统级的limits配置。另外,确保你的realized用户有足够权限访问OroCommerce的所有目录(比如vendor、var这些),权限不足也可能导致类似的报错。
按照这些步骤来,应该就能解决缓存清理时的文件句柄问题了。
内容的提问来源于stack exchange,提问作者rbncha
相关产品推荐
相关产品推荐

