5

ANTS 메모리 프로파일 러를 사용하여 .NET 2.0 응용 프로그램 중 하나에서 발생하는 메모리 누수 증가를 진단하고 있습니다. 는 I 7.5 시간에 걸쳐 공정 7 스냅 가고, 여기에서 얻어진 데이터를 표 표현 -.NET 응용 프로그램 메모리 사용량 - 사용하지 않은 .NET 및 관리되지 않는 메모리 및 조각화

enter image description here

G1의 reprsents 생성 한 사이즈 G2 세대 2 크기. 비 관리 공간 및 개인 바이트를 제외하고 다른 모든 값은 MB입니다.

내 질문이 있습니다 -

  1. 왜 힙 크기가 낮은 경우에도 높은 사용되지 않는 .NET 공간이?

  2. 큰 개체 힙은 최대 2MB로 이동하고 마지막 3 개의 스냅 샷은 96KB로 유지됩니다. 그런데 왜 그렇게 큰 조각이 있고, 사용하지 않은 공간이 많은가?

  3. 관리되지 않는 공간이 계속 증가합니다. 시간이 지남에 따라 개인용 바이트 수가 증가 할 책임이 있습니까?

저는이 문제를 해결하기 위해 제 기지에서 왔으며 몇 가지 분석을 수행했지만 이에 대한 적절한 해결책을 찾지 못했습니다. 필요한 다른 데이터를 제공 할 준비가되었습니다.

+0

이는 개체가 메모리에 남아있는 결과 일 수 있습니다. 어쩌면 당신은 일정한 재인식이 더 많은 메모리 공간이 할당된다는 것을 의미하므로 사용 된 모든 객체가 잘 처리되었는지 확인해야합니다. 단편화의 원인이 될 수 있습니다 –

+0

LOH에는 개체가 거의 없습니다. 프로파일 러는 응용 프로그램이 시작된 이후에도 계속 유지되는 배열을 보여주고 다른 배열은 예상 된 일정한 간격으로 할당 및 할당 해제됩니다. – Cygnus

+0

두 번째 어레이가 올바르게 배치 되었습니까? LOH의 GC는 매우 드문 경우입니다.가능한 시나리오는 GC 앞에 두 번째 배열이 할당되므로 가능한 시나리오는 다음과 같이 보일 수 있습니다. [1,2] (앱의 시작) [1,2,2] (두 번째 배열의 재 할당) LOH에서 GC를 얻으면 LOH는 다음과 같이 보입니다 : [1,0,0,0,0,2] 그러면 두 번째 배열을 한 번 더 할당하기 시작합니다. [1, 2,0,0,0,2] 두 번째 배열의 길이가 일정하지 않으면 상황이 더욱 악화 될 수 있습니다. 이 아이디어는 LOH에서 많은 재 할당을 허용하지 않습니다. – Alex

답변

2

알렉스가 이미 문제 클래스 대형 개체 힙 단편화의 아주 좋은 설명을 지적 여기서 발견된다 :

https://www.simple-talk.com/dotnet/.net-framework/the-dangers-of-the-large-object-heap/

문제가 아니라 .NET FX 데브 팀으로 알려져 있으며, 지속적으로 일을하고 에서. 최근 FX 릴리스를 사용하면 증상이 사라질 가능성이 큽니다. 단지 힙 낭비 톤의를 닦아보다 LOHF의 근본 원인이 방법이 더 효과적 일 것입니다 발견, 그러나 http://blogs.msdn.com/b/mariohewardt/archive/2013/06/26/no-more-memory-fragmentation-on-the-large-object-heap.aspx : .NET 4.5.1 시작

심지어 컴팩트 LOH는 GC 메서드 호출이있을 것 of ms 's

이러한 효과를 분리하는 방법에 대한 자세한 내용이 필요하면 알려주십시오.

Seb

관련 문제