我试图暂时(不重新启动机器,只是为了启动 JVM 的测试)将 OSX Yosemite 中的进程数增加到 2048,但我无法这样做。
首先,我尝试调用ulimit -S -u 2048
但返回:
ulimit: value exceeds hard limit
硬限制是 1064:
$ ulimit -Hu
1064
我曾经改变过和sysctl
的限制,效果很好:kern.maxproc
kern.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 对此提供的帮助!