【发布时间】:2015-05-15 13:04:53
【问题描述】:
我们有一个托管大量测试应用程序的测试服务器。当有很多进程(或线程)在运行时,我们发现无法创建新的进程或线程:
- 对于 C 程序:“无法分叉,资源不可用”
- 对于 java 程序:抛出异常“OutOfMemory,无法创建本机线程”
我认为这是由于对最大进程数的硬限制。我试图设置ulimit -n 255085。 ulimit 显示如下:
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
open files (-n) 90000
pipe size (512 bytes, -p) 10
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 255085
virtual memory (kbytes, -v) unlimited
但它不起作用。我尝试与不同的用户同时运行许多进程,并且它们同时停止并出现相同的错误。因此,我认为无论登录的用户如何,整个系统都有一个“限制”。
【问题讨论】:
-
这是一个令人困惑的问题 首先它不是一个编程问题。其次,您需要更改一些可调内核参数:maxpid、max_nprocs 和 maxuprc。以该顺序。 maxuprc 有效地依赖于 maxpid。第三,你实际上正在做某事,看起来,你应该重新考虑你的方法。为什么?让系统同时运行大量进程几乎总是一个坏主意。
-
ps实际上是否显示超过 250,000 个进程正在运行?当错误都说你内存不足时,为什么你认为这是一个进程计数问题?
标签: process numbers max solaris ulimit