문제

내 컴퓨터 (XP, 64)에서 ASP.NET Worker 프로세스 (W3WP.EXE)는 항상 5.5GB의 가상 메모리가 예약되어 있습니다. 이것은 호스팅하는 웹 응용 프로그램에 관계없이 발생합니다 (ASPX의 빈 웹 페이지조차도 무엇이든 할 수 있습니다).

이 가상 메모리의 큰 오래된 덩어리는 프로세스가 시작되는 순간에 예약되어 있으므로 이것은 어떤 종류의 점진적인 메모리 "누출"이 아닙니다.

Windbg와 함께 일부 스누핑은 메모리가 개인, 예약 및 greausageisvad라는 것을 보여줍니다. 또한 해당 메모리가 각각 1GB의 4 개의 큰 덩어리와 여러 개의 작은 덩어리 (각각 1/4GB)로 할당/예약되어 있음을 보여줍니다.

그래서 나는 누가 VirtualAlloc을 부르고이 모든 기억을 예약하는지 알아 내야한다고 생각합니다. 어떻게해야하나요?

w3wp.exe는 svchost.exe (즉, iis/asp.net 필터)가 시작한 프로세스이기 때문에 메모리 할당 전에 프로세스에 디버거를 첨부하는 것은 까다 롭습니다. 이 모든 풍부한 메모리 예약없이 닫힙니다. 또한, 명령 줄 매개 변수는 내가 그것을 실행하면 유효하지 않습니다 (호출 프로세스에서 생성 된 파이프이기 때문에 의미가 있습니다).

사실 (문제의 메모리 영역을 찾은 방법) 이후에 WindBG를 프로세스에 첨부 할 수 있지만, 그 시점에서 누가 무엇을 할당했는지 결정할 수 있는지 확실하지 않습니다.

도움이 되었습니까?

해결책

데이비드 왕 이것을 비슷한 질문에 대답합니다:

...] ASP.NET 성능 개발자는 다음을 알려줍니다.

  • 예약 된 가상 메모리는 걱정할 필요가 없습니다. CLR의 성능/캐싱 전제 조건으로 볼 수 있습니다. 그리고 무거운 하중 테스트는 걱정할 것이 없음을 보여줍니다.
  • System.Windows.forms- 비어있는 Hello World ASPX 페이지에서 가져 오지 않습니다. Microsoft 디버깅 도구 및 "SX E LD System.Windows.Forms"를 사용하여 실제로 런타임에 가져 오는 내용을 식별 할 수 있습니다. 또는 의존성을 찾기 위해 ildasm을 할 수 있습니다.
  • mscorlib- 그것이 Gac'd이고 ngen이 제대로되어 있는지 확인하십시오.

다른 팁

가상 메모리는 프로세스에 할당 된 주소 공간입니다. 메모리 사용과 관련이 없습니다.

보다:

  1. 가상 메모리
  2. Windows의 한계를 밀기 : 가상 메모리
  3. http://support.microsoft.com/kb/555223

예약된 메모리는 매우 다릅니다 할당 메모리. 메모리를 예약하면 주소 공간을 할당합니다. 물리적 페이지를 저 지르지 않습니다.

이 주소 공간은 IIS가 힙에 할당 될 수 있습니다. 필요할 때만 페이지를 커밋합니다.

WINDBG에서 W3WP.EXE를 실제로 시작하려면 유효한 명령 줄 인수로 시작해야 할 것입니다. 당신이 사용할 수있는 프로세스 탐색기 현재 W3WP.EXE 프로세스의 명령 줄이 무엇인지 결정합니다. 예를 들어, 내 서버에서 내 것은 다음과 같습니다.

C : windows system32 inetsrv w3wp.exe -a .

나는 거기에있는 UID가 무엇을 지정하는지 잘 모르겠지만, W3SVC 서비스 (W3WP.EXE를 시작한 것)에 의해 즉시 생성 된 것 같습니다. 따라서 WindBG에서 W3WP를 시작하기 전에 명령 줄을 확실히 살펴 봐야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top