[server] SVCHOST / 워크 스테이션 서비스에서 Windows 2012 Core Extreme 메모리 사용

약 200 개의 서버 (Hyper V, File Cluster 및 IIS)가 모두 동일한 문제를 겪고 있습니다. 정상적인 사용을 통해 서버에서 이벤트가 발생하여 서버의 RAM을 최대한으로 또는 거의 최대한으로 사용합니다. 이 문제가 발생하면 SVCHOST / 워크 스테이션 서비스 (특히 워크 스테이션 서비스를 자체 SVCHOST에 격리하여 처리)는 핸들 / 스레드 릴리스를 중지하고 해당 서비스에서 사용하는 메모리는 절대 해제되지 않습니다. 극단적 인 경우에는 255GB 서버에서 최대 40GB의 램을 사용하는 워크 스테이션 서비스가 있습니다. 또한 경우에 따라 4 천만 개 이상의 핸들을 찾는 경우도 있습니다.

재부팅시 물론 문제는 사라지고 W3 프로세스 나 HyperV VM 등 모든 메모리가 사용될 때까지 워크 스테이션 서비스가 모든 RAM을 가져 오기 시작합니다. 프로세스는 매우 느리고 서버의 RAM 크기에 따라 몇 주 / 월이 걸릴 수 있습니다.

당사의 Hyper V 서버와 IIS 서버는 모두 작업 파일의 공유에 액세스합니다. 이러한 공유는 SSD 스토리지에 있으므로 성능이 뛰어납니다. 현재 모든 패치를 설치했지만 R2로 이동하지 않았습니다. 툴링이 많기 때문에 중요한 단계이며 R2에서 수정 될 것이라는 명확한 징후를 찾을 수 없습니다.

우리는 ProcMon 및 기타 도구를 실행했지만 가장 문제가 많은 서버에서는 해당 도구가 실행되지 않습니다. 다른 한편으로는 그들이 제공 한 결과는 그 과정에서 실제로 메모리 누수가있는 것으로 보입니다.

이 프로세스에서 메모리를 비우거나 버그를 함께 피할 수있는 방법이 있습니까? 다시 부팅 할 필요가 없으며 오류 상태가되면 프로세스를 다시 시작할 수 없습니다. 프로세스가 정지됩니다.

우리는이 문제를 ‘수정’하기 위해 정기적으로 재부팅하는 것을 피하려고 노력하므로 모든 답변을 부탁드립니다.



답변

svchost가 서버 성능을 파괴하는 경우와 비슷한 문제가 발생했습니다.

해결책 : 이벤트 로그가 가득 찼습니다. 나는 그것을 지우고 아무 일도 일어나지 않은 것처럼 모든 것이 백업되고 실행되었습니다.

(또한 이벤트 로그의 크기를 기본값에서 변경하는 것이 좋습니다. 아래 참조)

Windows 인터페이스를 사용하여 최대 로그 크기를 설정하려면
-이벤트 뷰어를 시작하십시오.
-콘솔 트리에서 관리하려는 이벤트 로그로 이동하여 선택하십시오.
-동작 메뉴에서 속성을 클릭합니다.
-최대 로그 크기 (KB)에서 스피너 컨트롤을 사용하여 원하는 값을 설정하고 확인을 클릭합니다.

여기서 일어나고있는 것과 똑같이 들리지만, 정말 쉬운 해결책이되었습니다. 다시 시작하면 일시적으로 문제가 해결되지만 로그에 쓰려고 시도하는 즉시 모든 작업이 중단되고 리소스를 계속 사용하게됩니다.

도움이 되었기를 바랍니다!


답변

>Is there a way we can free up the memory from this process ?

할당 된 메모리를 외부에서 (적절하게) 해제하거나 문제가있는 앱을 종료하지 않고 리소스를 처리 할 수있는 방법이 없습니다.

>or avoid the bug all together?

메모리 및 리소스 누수가 발생했습니다. 문제를 해결할 수있는 유일한 방법은 누수를 찾고 트리거를 피하거나 (가능한 경우) 소스 코드 수준에서 누수를 수정하는 것입니다. 마지막으로 패치를 생성하려면 Microsoft의 도움이 필요하지만 문제의 실제 위치를 “정확하게”알려줄 것으로 기대합니다.

예를 들어 MS Application Verifier를 사용하여 메모리 / 자원 누수를 정확히 찾아 범인을 찾으려고 시도 할 수 있습니다.


답변

RAM을 만드는 것은 쉽지만 해결책은 없습니다.

심층 조사를 위해 Sysinternals RAMMAP 또는 VMMAP을 제안합니다. 이 도구를 사용하면 어떻게되는지 더 잘 볼 수 있습니다. 종종 메타 파일 문제입니다.

Server 2008부터는 공유에서 응용 프로그램을 시작할 때 시간이 지남에 따라 메모리가 부족한 모든 터미널 서버에 메모리가 부족한 문제가 있습니다.

우리의 해결 방법은 해당 응용 프로그램을 별도의 터미널 서버에서 호스팅하고 메모리 소비를 자주 지우는 것입니다.


모든 프로세스에서 SeDebugPrivilege와 함께 SetProcessWorkingSetSize ()를 사용하여 자체 설계된 c ++ 명령 행 애플리케이션으로이를 수행 합니다.

이런 식으로하지 않는 것이 좋습니다.)


답변