RHEL 6.3에서 몇 가지 프로세스가 실행되고 있지만 어떤 이유로 스레드 스택 크기를 초과합니다.RedHat Enterprise Linux 6에서 스레드 스택 크기 제한을 초과하는 프로세스가 있습니까?
예를 들어 Java 프로세스는 시작할 때 런타임에 -Xss256k의 스택 크기가 주어지며 C++ 프로세스에는 실제 코드에서 pthread_attr_setstacksize()를 사용하여 1MB의 스레드 스택 크기가 지정됩니다.
그러나 이러한 프로세스가 이러한 제한을 지키지 않고 있으며 이유가 확실하지 않습니다. 나는 C++ 및 Java 프로세스에 대한
pmap -x <pid>
실행 예를 들어
, 나는 이들 각각에 의해 생성 된 내부 작업자 스레드를 확정 한 각에 대한 '익명'수백 개의 스레드 (볼 수 있습니다 프로세스), 그러나 이들은, 한계는 위의 설정하지 64메가바이트 각각의 할당 된 값을했다 :
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 ]
...
을하지만 실행할 때 모든 64메가바이트 '곧'스레드 위의 과정에서 다음
cat /proc/<pid>/limits | grep stack
Max stack size 1048576 1048576 bytes
최대 스레드 스택 크기가 1MB이므로 여기서 무슨 일이 일어나고 있는지 혼란 스럽습니다. 또한이 프로그램을 호출하는 스크립트는 'ulimit -s 1024'도 설정합니다.
매우 고급 컴퓨터 (예 : 48GB RAM, 24 CPU 코어)를 사용할 때만 나타나는 것으로보아야합니다. 덜 강력한 컴퓨터 (예 : 4GB RAM, 2CPU 코어)에는 문제가 표시되지 않습니다.
여기에서 무슨 일이 일어나고 있는지 이해하는 데 도움이 될 것입니다.
이 답변을 주셔서 감사합니다. 많은 시간을 절약 해 줬습니다! 변경 사항을 적용하고 알림없이 해제하는 이유는 무엇입니까? – omid