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

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

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

물론 재부팅하면 문제가 사라지고 W3 프로세스나 HyperV VM에서 모든 메모리를 사용할 때까지 다시 나타나지 않습니다. 그 후 워크스테이션 서비스가 모든 RAM을 잡기 시작합니다. 프로세스는 매우 느리며 서버의 RAM 용량에 따라 몇 주/몇 달이 걸릴 수 있습니다.

Hyper V 서버와 IIS 서버 모두 작업 파일을 위한 공유에 액세스하며 이러한 공유는 SSD 스토리지에 있으므로 성능이 뛰어납니다. 우리는 현재 패치를 모두 설치했지만 이를 중요한 단계로 만들 많은 도구를 갖추고 있고 R2에서 이 문제가 수정될 것이라는 명확한 표시를 찾을 수 없기 때문에 R2로 이동하지 않았습니다.

우리는 ProcMon 및 기타 도구를 실행했지만 가장 문제가 많은 서버에서는 이러한 도구가 실행되지 않습니다. 다른 경우에는 그들이 제공한 결과에 따르면 해당 프로세스에 실제로 메모리 누수가 발생한 것으로 보입니다.

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

우리는 이 문제를 '수정'하기 위해 정기적인 재부팅을 피하려고 노력하고 있으므로 답변해 주시면 감사하겠습니다.

답변1

svchost가 서버 성능을 파괴하는 것과 비슷한 문제가 있었습니다.

해결책:알고 보니 전체 이벤트 로그가 있었습니다. 나는 그것을 정리했고 아무 일도 없었던 것처럼 모든 것이 백업되고 실행되었습니다.

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

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

여기서 무슨 일이 일어나고 있는지 정확히 들리지만 결과적으로는 정말 쉽게 해결할 수 있었습니다. 다시 시작하면 문제가 일시적으로 해결되지만 로그에 기록을 시도하자마자 모든 것이 통제 불능 상태가 되어 리소스를 계속 소모하게 되었습니다.

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

답변2

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

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

>or avoid the bug all together? 

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

즉, MS를 사용하여 메모리/리소스 누수를 정확히 찾아내어 범인을 찾으려고 할 수 있습니다.애플리케이션 검증자

답변3

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

더 심층적인 조사를 위해 Sysinternals RAMMAP 또는 VMMAP을 제안합니다. 이 도구를 사용하면 무슨 일이 일어나는지 더 잘 볼 수 있습니다. 매우 자주 메타파일 문제입니다.

Server 2008부터 공유에서 응용 프로그램을 시작할 때 모든 터미널 서버의 메모리가 부족해지고 시간이 지나면서 믿을 수 없을 만큼 메모리가 소모되는 문제가 발생했습니다.

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


모든 프로세스에서 SeDebugPrivilege와 함께 SetProcessWorkingSetSize()를 사용하여 자체 설계한 C++ 명령줄 응용 프로그램을 사용하여 이 작업을 수행합니다.

이런 일을하지 않는 것이 좋습니다.)

관련 정보