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

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

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

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

今天我们重新启用了超线程,以便访问所有 32 个硬件线程。但是现在,在我所能想到的所有情况下,此编译器都会挂起并出现以下错误:

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

该进程似乎已停止,没有任何 CPU 处于繁忙状态,并且 ctrl-c 可中断它。

我在网上搜索了一下,似乎这可能与操作系统的最大线程限制有关,但我不确定如何更改它。默认值应该是 800 个线程左右,对于这个只运行少量线程(可能是 2 个?)的编译器来说,这应该足够了。

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

答案1

您能否描述一下这个过程是如何启动的,并为我们提供ulimit -a尽可能接近该过程的输出?

正如pthread_create(3)解释的那样,你遇到了:

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

相关内容