启用超线程 - 在 Ubuntu Precise 64 位上导致 qthread 创建错误

dav*_*idA 6 linux ubuntu threads hyperthreading

我们最近为一些繁重的工作设置了一台 HP ProLiant DL360p 服务器。出于某种原因,我们在设置时禁用了系统 BIOS 中的超线程。作为双 CPU 8 核系统,这为我们提供了 16 个硬件线程。32 GB 内存。我们正在运行 Ubuntu 12.04 64 位。

大部分工作是由 VHDL“合成器”或编译器完成的。它是一个 QT 应用程序,但通常以命令行模式(无 GUI)运行。这个编译器在过去几周一直运行良好,由持续集成系统 (Jenkins) 启动。

今天,我们重新启用了超线程以访问所有 32 个硬件线程。但是现在这个编译器在我可以设计的每种情况下都挂起以下错误:

QThread::start: Thread creation error: Resource temporarily unavailable

该进程似乎已停止,不占用任何 CPU,并且 ctrl-c 中断它。

我在网上做了一些搜索,看起来这可能与操作系统最大线程限制有关,但我不确定如何更改它。无论如何,默认值应该是大约 800 个线程,这对于仅运行少量(可能是 2 个?)的编译器来说应该绰绰有余。

与此同时,我将不得不禁用超线程,但我想知道这是否是运行 64 位 Linux 的高端服务器的已知问题?有已知的解决方法吗?或者它更可能是该特定应用程序的问题?

Pie*_*ier 1

您能否描述一下这个过程是如何开始的,并向我们提供ulimit -a尽可能接近的上下文的输出?

\n\n

正如pthread_create(3)所解释的,您遇到了:

\n\n
ERRORS\n       EAGAIN Insufficient  resources  to create another thread, or a system-\n              imposed limit on the number of threads  was  encountered.   The\n              latter  case  may  occur  in  two  ways:  the RLIMIT_NPROC soft\n              resource limit (set via setrlimit(2)), which limits the  number\n              of  process  for  a  real user ID, was reached; or the kernel's\n              system-wide limit on  the  number  of  threads,  /proc/sys/ker\xe2\x80\x90\n              nel/threads-max, was reached.\n
Run Code Online (Sandbox Code Playgroud)\n