私たちは最近、いくつかの重労働のためにHP ProLiantDL360pサーバーをセットアップしました。何らかの理由で、セットアップ時にシステムBIOSでハイパースレッディングを無効にしました。デュアルCPU8コアシステムであるため、16個のハードウェアスレッドが提供されました。 32GBのRAM。 Ubuntu 12.0464ビットを実行しています。
行われる作業の大部分は、VHDL「シンセサイザー」またはコンパイラーによって行われます。これはQTアプリケーションですが、通常はコマンドラインモード(GUIなし)で実行されます。このコンパイラは、継続的インテグレーションシステム(Jenkins)によって開始され、過去数週間は正常に実行されています。
本日、ハイパースレッディングを再度有効にして、32のハードウェアスレッドすべてにアクセスできるようにしました。ただし、このコンパイラは、私が考案できるすべての場合に次のエラーでハングします。
QThread::start: Thread creation error: Resource temporarily unavailable
プロセスは停止していて、CPUでビジーではないように見え、ctrl-cがプロセスを中断します。
オンラインで検索したところ、これはOSの最大スレッド制限に関連しているようですが、これを変更する方法がわかりません。とにかくデフォルトはおそらく約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.
_