我们最近为一些繁重的工作设置了HP ProLiant DL360p服务器.由于某种原因,我们在设置时禁用了系统B
IOS中的超线程.作为双cpu 8核系统,它给了我们16个硬件线程. 32 GB RAM.我们正在运行64位的Ubuntu 12.04.
完成的大部分工作是通过VHDL“合成器”或编译器完成的.它是QT应用程序,但通常以命令行模式运行(无GUI).这个编译器在过去几周一直运行良好,由一个持续集成系统(Jenkins)启动.
今天我们重新启用超线程以访问所有32个硬件线程.但是现在这个编译器在我可以设想的每种情况下都会挂起以下错误:
QThread :: start:线程创建错误:资源暂时不可用
该过程似乎停滞不前,并没有在任何cpu上忙,并且ctrl-c会中断它.
我做了一些在线搜索,看起来这可能与操作系统最大线程限制有关,但我不知道如何改变它.无论如何,默认值大约为800个线程,这对于只运行少量(可能是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.