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

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

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

今天,我们重新启用了超线程来访问所有32个硬件线程。 然而,现在这个编译器在每个我可以devise的情况下都会挂起下面的错误:

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

这个过程似乎是停滞的,不占用任何CPU,并且ctrl-c中断它。

我做了一些在线search,这似乎可能与操作系统的最大线程限制相关,但我不知道如何去改变这一点。 无论如何,默认情况下大约有800个线程,对于仅运行less量(可能是2?)的编译器来说,这应该足够了。

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

    你能描述一下这个过程是如何开始的,并且从尽可能接近的上下文向我们提供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.