You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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这两个文件,确保里面有一行:
    session required pam_limits.so
    
    没有的话就加上,这是让系统加载limits配置的关键。
  • 重启系统或者重新登录你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:20:43