【发布时间】:2010-08-05 21:24:54
【问题描述】:
运行的进程卡在 32 000 (± 5%) 左右
~# cat /proc/sys/kernel/threads-max 127862
~# ulimit -s 堆栈大小 (kbytes, -s) 2048
可用内存:3,5 Go
当我在进程卡在“top”时尝试基本命令时,我收到 bash 消息:无法分叉,内存不足。 即使还有 3,5 Go 的空闲内存。
什么可以限制线程创建在 32 000 ?
【问题讨论】:
-
threads-max值是系统范围的限制。也可能有每个进程的限制。但是为什么你会想要/需要那么多线程呢?是综合调度程序测试吗? -
在 FreeBSD 上,是的,但不是在 debian 上,使用的是分发版...用于对 Core i7 进行压力测试
-
我认为您是在对调度程序进行压力测试,而不是对 cpu 进行压力测试。
-
是什么让您认为您正在通过创建数千个线程来对 CPU 进行压力测试?您不是,您正在对操作系统和线程调度程序进行压力测试。您的 CPU 只有固定数量的内核,因此它一次只能运行固定数量的线程。如果你想对 CPU 进行压力测试,你需要尽量减少所有其他可能导致 CPU 停滞的因素——例如页面错误和内存延迟,如果你希望操作系统不断切换,这两者都会有很多在运行 32000 个线程之间,每个线程在 RAM 中各自的位置都有自己的堆栈。
标签: c++ multithreading pthreads