修复 OpenWrt 上 ShellCrash CrashCore “Too Many Open Files” 问题

最近在部署 OpenWrt 旁路由时,遇到网络间歇性断开、日志大量报错:

socket: too many open files
fcntl: too many open files
network is unreachable
packet loss

经排查发现,核心问题是 ShellCrash 启动的 CrashCore 进程文件描述符上限过低,导致 TCP/UDP 透明代理在连接暴涨时触发 EMFILE 错误。

问题分析

  • CrashCore 默认 Max open files 为 4096(见 /proc/<PID>/limits)。
  • 当旁路由作为全网网关,UDP/TUN/QUIC 连接较多时,很容易超过上限。
  • 日志中大量的 UDP、IPv6 失败提示,表明连接数高峰期 FD 耗尽。

修复

修改 /etc/init.d/shellcrash 启动脚本,增加 procd limits 参数:

  1. 打开启动脚本:
vi /etc/init.d/shellcrash
  1. start_service() 中找到 procd_open_instance 区块:
procd_open_instance
procd_set_param user $USER
procd_set_param respawn
procd_set_param command $COMMAND
procd_set_param stderr 0
procd_set_param stdout 0
procd_close_instance
  1. 增加 nofile 限制:
procd_open_instance
procd_set_param user $USER
procd_set_param respawn
procd_set_param limits nofile="1048576 1048576"
procd_set_param command $COMMAND
procd_set_param stderr 0
procd_set_param stdout 0
procd_close_instance
  1. start_service() 下方开头加 ulimit -n 1048576,双保险。
  2. 重启服务:
/etc/init.d/shellcrash restart
  1. 验证:
PID=$(pidof CrashCore)
cat /proc/$PID/limits | grep "open files"

输出应为:

Max open files            1048576              1048576              files

补充建议

  • 如果旁路由不使用 IPv6,可以在 CrashCore 配置中关闭 IPv6,减少 FD 压力。
  • UDP/TUN/QUIC 透明代理在高连接数场景下容易暴涨,可以考虑暂时关闭或限速。
  • 持续观察日志,确保不再出现 too many open files

结论
通过提升 CrashCore 文件描述符上限,并合理配置网络协议,成功解决了旁路由断网问题。OpenWrt 下使用 procd 启动的服务,需要通过 procd_set_param limits 指定资源上限,而不仅仅依赖 ulimit


作 者:motorbottle
链 接: https://blog.motorbottle.site/archives/786
来 源:Motor's Blog
版 权 声 明:本博客所有文章除特别声明(如【转载】)外,均采用CC BY-NC-SA 4.0许可协议。文章版权归作者所有,未经允许请勿转载!


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇