사용중인 Windows 손잡이는 몇 개가 "너무 많습니까?
-
11-09-2019 - |
문제
이 질문에 대한 답은 레지스트리 설정과 Windows 버전, 아마도 메모리가 충분하지 않은 경우 RAM의 양에 따라 다를 수 있음을 이해합니다. 이 질문을 위해 서버에 많은 RAM (3+ gib)이 있다고 가정합니다.
응용 프로그램 (이 경우 제 3 자 신청서)이 한 시간당 수백 만에 핸들을 누출하는 경우, 다른 응용 프로그램이 문제가 발생하기 전에 해당 신청서가 누출 될 수 있습니까? 예를 들어, "문제"라는 의미는 스레드를 시작하지 못하고 파일을 열지 못하는 등을 의미합니다.
수만 개의 핸들을 사용하여 프로세스 (일반적으로 데이터베이스 프로세스)에서 일부 서버 (가볍게로드 된)가 잘 실행되는 것을 보았으므로 이전 10000 핸들 제한은 분명히 여기에 문제가되지 않습니다. (그리고 그것은 어쨌든 가공 당 한도 였으므로 그 시점에있는 내 응용 프로그램에는 영향을 미치지 않을 것입니다.)
누군가가 질문에 대답하거나 핸들 또는 기타 시스템 리소스에 대해 효과적으로 다 떨어지기 전에 Windows 서버가 허용 할 수있는 총 핸들 수에 대해 설명하는 일부 리소스를 제시 할 수 있습니까?
해결책
보다 이 주제에 대한 Raymond Chen의 게시물. Window Manager는 프로세스 당 10K 한계를 시행하고 시스템 전체에서 총 제한 32K입니다. 따라서 "만"만으로도 시간당 100 개의 핸들이 누출되면 오작동을 시작하기 전에 며칠의 가동 시간이 있습니다.
모든 핸들이 동일하지는 않습니다. 예를 들어 창 핸들은 DB 핸들이 아니며 다른 규칙을 따를 수 있습니다. 따라서 프로그램이 누출되는지에 따라 이러한 제한이 적용되지 않을 수 있습니다. 이 블로그 게시물도 읽으십시오.
다른 팁
이러한 값은 새로운 Windows 버전으로 변경 될 수 있으므로 Sysinternals 도구를 사용할 수 있습니다. TestLimit
/ TestLimit64
대략적인 견적을 얻으려면. X64 버전은 특히 메모리 테스트 (하드 디스크 (스왑 파일)를 사용하여보다 가상 메모리를 얻을 수 있음)의 경우 한동안 실행될 수 있습니다.
도구를 얻으십시오 http://live.sysinternals.com/windowsinternals/ 또는 http://download.sysinternals.com/files/testlimit.zip
명령 줄 옵션 :
-p check process limit
-t check thread limit
-h check handle limit
-u check user handle limit
에 따르면 이것, 10000.