RHEL 6.3で実行されているプロセスがいくつかありますが、何らかの理由でそれらがスレッドスタックサイズを超えています。
たとえば、Javaプロセスには起動時の実行時に-Xss256kのスタックサイズが与えられ、C++プロセスには実際のコードでpthread_attr_setstacksize()を使用して1MBのスレッドスタックサイズが与えられます。
ただし、何らかの理由で、これらのプロセスはこれらの制限に固執しておらず、その理由はわかりません。
たとえば、私が実行すると
pmap -x <pid>
C ++およびJavaプロセスの場合、それぞれに数百の「anon」スレッドが表示されます(これらの各プロセスによって作成された内部ワーカースレッドであることが確認されています)が、これらには、設定された制限ではなく、それぞれ64MBの割り当て値があります。その上:
00007fa4fc000000 168 40 40 rw--- [ anon ]
00007fa4fc02a000 65368 0 0 ----- [ anon ]
00007fa500000000 168 40 40 rw--- [ anon ]
00007fa50002a000 65368 0 0 ----- [ anon ]
00007fa504000000 168 40 40 rw--- [ anon ]
00007fa50402a000 65368 0 0 ----- [ anon ]
00007fa508000000 168 40 40 rw--- [ anon ]
00007fa50802a000 65368 0 0 ----- [ anon ]
00007fa50c000000 168 40 40 rw--- [ anon ]
00007fa50c02a000 65368 0 0 ----- [ anon ]
00007fa510000000 168 40 40 rw--- [ anon ]
00007fa51002a000 65368 0 0 ----- [ anon ]
00007fa514000000 168 40 40 rw--- [ anon ]
00007fa51402a000 65368 0 0 ----- [ anon ]
00007fa518000000 168 40 40 rw--- [ anon ]
...
しかし、すべての64MBの「anon」スレッドを使用して上記のプロセスで以下を実行すると、
cat /proc/<pid>/limits | grep stack
Max stack size 1048576 1048576 bytes
最大スレッドスタックサイズは1MBであるため、ここで何が起こっているのか少し混乱しています。また、これらのプログラムを呼び出すスクリプトは、「ulimit-s1024」も設定します。
これは、非常にハイエンドのマシン(48GB RAM、24 CPUコアなど)を使用している場合にのみ発生するように見えることに注意してください。この問題は、それほど強力ではないマシン(4GB RAM、2 CPUコアなど)では発生しません。
ここで何が起こっているのかを理解する助けをいただければ幸いです。