在 OSX Yosemite 中暂时增加 `ulimit -u` 设置

在 OSX Yosemite 中暂时增加 `ulimit -u` 设置

我试图暂时(不重新启动机器,只是为了启动 JVM 的测试)将 OSX Yosemite 中的进程数增加到 2048,但我无法这样做。

首先,我尝试调用ulimit -S -u 2048但返回:

ulimit: value exceeds hard limit

硬限制是 1064:

$ ulimit -Hu
1064

我曾经改变过和sysctl的限制,效果很好:kern.maxprockern.maxprocperuid

$ sudo sysctl -w kern.maxprocperuid=2048
$ sudo sysctl -w kern.maxproc=2048
$ sysctl kern.maxprocperuid kern.maxproc
kern.maxprocperuid: 2048
kern.maxproc: 2048

我也尝试过改变限制,launchctl maxproc这似乎工作得很好:

$ sudo launchctl limit maxproc 2048 2048
$ launchctl limit maxproc
maxproc     2048           2048

然而,尽管改变了这一切,我仍然无法改变 的上限ulimit -u

我做所有这些的原因是因为我OOME: Unable to create native thread在从 MVN 测试启动的 JVM 中遇到了一些错误,即使我已经传递给它-Xss265k -Xmx2g

有任何想法吗?

答案1

/Library/LaunchDaemons/limit.maxproc.plist即使您只想暂时更改限制,也必须通过创建由 root:wheel 拥有且权限为 644 且包含以下内容的文件以持久方式完成更改:

<?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.maxproc</string>
      <key>ProgramArguments</key>
        <array>
          <string>launchctl</string>
          <string>limit</string>
          <string>maxproc</string>
          <string>2048</string>
          <string>2048</string>
        </array>
      <key>RunAtLoad</key>
        <true />
      <key>ServiceIPC</key>
        <false />
    </dict>
  </plist>

感谢 Jason Greene 对此提供的帮助!

相关内容