2014-03-26 4 views
0

제 호스트 회사에서 2 개 이상의 닷넷 응용 프로그램이 있습니다. 이 두 응용 프로그램은 동일한 풀을 사용하며 최대 메모리는 300MB입니다.웹 응용 프로그램에서 너무 많은 메모리를 사용합니다.

응용 프로그램 중 하나의 시작 페이지를 약 10 회 새로 고칠 수 있습니다. 그런 다음 메모리 부족 예외가 발생하고 풀이 손상됩니다.
PrivateMemorySize64 : 197 804.00 KB (193.00 MB)
PeakPagedMemorySize64 247 220.00 KB (241.00 MB)
VirtualMemorySize64 내 적용에

난이 메모리 값을 출력 (27) 327 128.00 KB (26 686.00 MB)
PagedMemorySize64 : 804.00 197 킬로바이트 (193.00 MB)
PagedSystemMemorySize64 : 415.00 KB (0.00 MB)
PeakWorkingSet64 109 196.00 KB (106.00 MB)
WorkingSet64 61 KB 196.00 (59.00 MB)
0,123,GC.GetTotalMemory (참) : 2 960.00 KB (2.00 MB)
GC.GetTotalMemory (거짓) : 2 968.00 KB (2.00 MB) 내가 읽고

, 읽고 메모리 프로파일 링에 대한 본 비디오를 읽고 ,하지만 난 내 응용 프로그램의 프로파일 링 할 때 어떤 문제를 찾을 수 없습니다. 내가 ANTS 메모리 프로파일 (8)을 사용하고 내가 빌드 후 시작 페이지를 한 번 새로 고칠 때이 결과를 얻을 : 내가 요약을 볼 때 a http://oi60.tinypic.com/21l057c.jpg

는, .NET은 135.8 MB의 41.65 MB를 사용하는 전체 개인 바이트가에 할당 신청. 이 값은 새로 고침 할 때마다 커집니다. 그게 정상인가요? 내가 8 시간 새로 고침 때이 얻을 : .NET 응용 프로그램에 할당 된 153 MB 총 개인 바이트 중 56.11 MB 사용하고 있습니다.

어디에서 시작해야합니까? 너무 많은 메모리를 사용하는 문제가 무엇일 수 있습니까? 메모리가 300MB로 낮습니까?

+1

모두 코드에 따라 다릅니다. 모든 것에 대해'Dispose'라고 부르십시오. 데이터베이스 연결이있는 경우 'Dispose'체인의 연결을 닫아야합니다. – krillgar

답변

1

이것은 의심 할 여지없이 코드에서 메모리 누수가 발생했기 때문에 큐 또는 데이터베이스와 같은 연결을 처리하거나 닫지 않는 형식 일 가능성이 큽니다. 프로파일을 따로 떼어 내고 코드를 검토하고 적절한 모든 리소스를 닫거나 폐기했는지 확인하십시오. 그러면 문제가 해결됩니다.

0

처리되지 않은 일부 db 연결이있었습니다. 다음과 같은 Etags를 제거하는 클래스가 있습니다.

public class CustomHeaderModule : IHttpModule 
{ 
    public void Dispose() { } 

    public void Init(HttpApplication context) 
    { 
     context.PreSendRequestHeaders += OnPreSendRequestHeaders; 
    } 

    void OnPreSendRequestHeaders(object sender, EventArgs e) 
    { 
     HttpContext.Current.Response.Headers.Remove("ETag"); 
    } 
}' 

Init 함수에서 추가 한 새 이벤트를 제거해야합니까? 아니면 GC가 해결할 것인가?

와 나는이 많이 있습니다

Task.Factory.StartNew(() => 
{ 
    Add(...); 
}); 

을하지만 난 내 코드에서 그들을 버리지 않습니다. GC가 그 방법을 다른 방법으로 수정합니까?

관련 문제