macOS提升ulimit与maxfiles:ulimit -n 100001:FRP、Nginx 高并发优化

VFX大学 Linux/macOS 与自动化运维 macOS提升ulimit与maxfiles:ulimit -n 100001:FRP、Nginx 高并发优化

  • 该话题为空。
正在查看 0 条回复
  • 作者
    帖子
    • #737

      追光
      管理员

      适用于 FRP 大并发、Nginx、高性能应用、数据库连接池 等场景。


      1. 背景与功能作用

      • ulimit -n 表示 单个进程可打开的最大文件描述符数(影响 TCP 连接数)。

      • FRP(frps / frpc)在高并发时会因 “too many open files” 报错。

      • macOS 默认值仅 256,严重限制高并发性能。

      • 目标:提升到 65536,并确保系统守护进程和终端都生效。


      2. 默认值检查

      ulimit -n
      # 默认:256

      查看 Launchd 全局限制:

      launchctl limit

      3. 调整方法

      (A) 临时生效(仅当前 shell)

      ulimit -n 65536

      缺点:重启后失效。


      (B) 永久生效(终端会话)

      修改 ~/.zshrc

      vi ~/.zshrc

      添加:

      ulimit -n 65536

      执行:

      source ~/.zshrc

      验证:

      ulimit -n
      # 输出:65536

      (C) 系统级全局生效

      1. 编辑 sysctl(内核参数)

      sudo vi /etc/sysctl.conf

      添加:

      kern.maxfiles=65536
      kern.maxfilesperproc=65536

      加载:

      sudo sysctl -w kern.maxfiles=65536
      sudo sysctl -w kern.maxfilesperproc=65536
      1. 创建 LaunchDaemon(确保开机生效)

      sudo vi /Library/LaunchDaemons/limit.maxfiles.plist

      内容:

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
      <dict>
          <key>Label</key>
          <string>limit.maxfiles</string>
          <key>ProgramArguments</key>
          <array>
              <string>launchctl</string>
              <string>limit</string>
              <string>maxfiles</string>
              <string>65536</string>
              <string>65536</string>
          </array>
          <key>RunAtLoad</key>
          <true/>
      </dict>
      </plist>

      加载:

      sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

      4. 验证

      ulimit -n
      # 65536
      
      launchctl limit
      # maxfiles 65536 unlimited

      5. 对 FRP 的作用

      • 每个 TCP 连接占用一个文件描述符。

      • 256 → 65536 允许 frps 支持数万并发连接。

      • 配合 frps.toml

      [transport]
      maxPoolCount = 10
      heartbeatTimeout = 120
      tcpKeepalive = 7200

      并调整 Linux ulimit 和内核参数,FRP 可轻松支撑高并发

正在查看 0 条回复
  • 在下方一键注册,登录后就可以回复啦。