2009-07-06 3 views
0

다중 스레드 응용 프로그램에서 tracelistener를 사용하여 원격으로 메시지를 기록하지만 응용 프로그램이 메모리 오버플로를 만듭니다.추적 수신기 - 메모리 오버플로 만들기

테스트를 위해 10,000 개의 스레드를 만들고 TraceData 기능을 사용하여 메시지를 기록하려고했습니다.

.Net 프레임 워크는 메모리 오버플로가 발생하는 TraceData에 대한 모든 호출에 대해 개체를 만듭니다.

답변

4

10,000 개의 스레드 : 각각 (기본) 1MB 스택 공간이 할당됩니다. 따라서 그들은 32 비트 프로세스에서는 불가능한 10GB RAM을 필요로 할 것입니다 (그리고 64 비트에서 총 RAM/페이지를 깰 가능성이 있습니다).

추적과 관련이 없습니다.

추가 사항 : Mark Russinovich의 Windows 스레드 및 프로세스 제한에 대한 최신 기사. 마지막 단락에 유의하십시오. "Pushing the Limits of Windows: Processes and Threads"

+0

우리가 만들 수있는 최대 스레드 수는 얼마입니까? – somaraj

+0

(사용 가능한 RAM/1048576)이므로 2/3GB의 사용 가능한 RAM은 2048/3072입니다. – schnaader

+0

다른 것들을 위해 얼마나 많은 주소 공간이 필요한가에 따라, 각 스레드는 다른 할당을 차단하지만 실제 질문은 얼마나 많은 것들이 유용한 것들을하고 있는지입니다. 오늘 (현재 가장 큰 서버에서도) 100 개의 스레드를 치는 것을 기대하지는 않습니다. (더 많은 코어와 메모리가 지원됨에 따라 서서히 증가 할 것으로 예상됩니다.) – Richard

관련 문제