거의 동시에 거의 매일 메모리가 갑자기 해제됩니다.


10

전자 상거래 웹 사이트를 실행하는 Windows Azure에 몇 개의 VM이 있으며 요즘 Telegraf, InfluxDb 및 Grafana를 사용하여 이러한 컴퓨터를 감시하기 시작했습니다. 몇 주 동안 데이터를 수집 한 후 Memory Available ( 메모리 사용 가능) 메트릭 과 관련된 이상한 패턴을 발견했습니다 .

거의 항상 하루 중 거의 같은 시간에, 매우 제한적인 메모리가 확보되어 매우 제한적인 DevOp 기술로 인해이 원인을 파악할 수 없습니다.

이 패턴을 보여주는 차트는 다음과 같습니다.

홀수 패턴

내 질문은 : 무엇이 이런 일로 이어질 수 있습니까? 메모리 누수가 책임이 있다고 생각하는 경향이 있지만 여유 메모리는 70 % 미만으로 떨어지지 않으며 트래픽이 가장 많은 두 VM에서만 발생합니다!

이와 같은 것을 볼 때 걱정해야합니까?

추신 : 우리가 실행중인 각 Windows 서비스 및 w3wp 프로세스에 대한 개인 e 가상 바이트에 대한 메트릭 수집을 별표로 표시했습니다 ...하지만이 메트릭이 메모리 누수가 있는지 알아내는 것이 매우 신뢰할 수는 없지만, 그러나 적어도 나는 일종의 추세를 얻으려고 노력하고 그것이 위에 표시된 패턴과 관련이 있는지 확인합니다.


2
일반적인 가비지 수집기 또는 캐시 청소 IMHO가 표시됩니다. 어떤 언어로 당신의 웹 사이트는 끝났습니까? (이것은 앱, 웹 서버, 심지어 정리 작업을 수행하는 시스템 일 수도 있습니다)
Tensibai

그것은 내가 의심했던 것입니다 ... ASP.NET MVC 4에서 이루어 지므로 가비지 수집 이론이 의미가 있습니다. 또한, 참고로 w3wp 프로세스 및 Windows 서비스에서 수집 한 메트릭은 절대적으로 정상으로 보입니다.
António Sérgio Simões

ASP에서는 거의 아무것도 모르지만 Java와 같이 메모리 소비 및 가비지 수집을 그래프로 표시하는 방법이 있다고 가정합니다. 이것이 근본 원인인지 확인하는 데 도움이됩니다.
Tensibai

답변:


7

다른 시스템, 특히 Java 기반 데이터 도구에서 이와 동일한 "톱니"패턴을 보았습니다. 설명에 따르면 .NET 가비지 수집을 보고 있다고 생각합니다 (이것은 .NET 응용 프로그램이라고 가정). Java와 .NET은 메모리 관리 언어 및 가비지 수집을 사용하는 프레임 워크입니다.

메모리 누수는 일반적으로 무시하거나 가비지 컬렉터를 혼동하는 메모리 관리 프레임 워크에 메모리 관리 부족, 또는 프로그램의 프레임 워크에서 발견된다.

이것이 가장 트래픽이 많은 서버라는 사실이 합리적입니다. .NET 프레임 워크에서 필요에 따라 메모리를 할당 한 다음 가비지 수집기가 정기적으로 시작하여 가비지 수집 알고리즘을 사용하여 사용하지 않는 메모리를 회수합니다. 특정 성능 문제를 추적하지 않는 한이 메모리 사용 패턴이 문제라고 생각하지 않습니다.


그것은 실제로 .NET 응용 프로그램이며 지난 며칠 동안의 연구에서 귀하와 @Tensibai가 작성한 것을 이해하는 것이 좋습니다.
António Sérgio Simões

7

이 그래프가 왜 이런지 알았습니다.

또한 ASP.NET 응용 프로그램 / 오류 총 성능 카운터에 대한 메트릭을 수집하고 있으며 사용 가능한 메모리 서지가 발생하는 동시에 총 오류 메트릭이 0으로 다시 설정되는 것을 알았습니다.

msdn에 따르면이 카운터는 응용 프로그램 재시작 / 종료가 발생할 때마다 0으로 재설정됩니다.

이 메모리 사용 가능 톱니 패턴의 원인은 응용 프로그램이 다시 시작 되었기 때문이라고 생각합니다.

내 차트 모양은 다음과 같습니다.

총 ASP.NET 응용 프로그램 오류 메모리 서지

최신 정보

이는 W3WP 프로세스의 프라이빗 바이트가 재활용 한계에 도달했기 때문에 발생합니다 (앱 풀에 프라이빗 바이트 제한이 구성되어 있음). 그리고 Private Bytes 차트를 자세히 살펴보면 메모리 사용량이 650MB에서 3.2GB로, 몇 시간 후에 3.6GB에서 16.6GB로 도약하기 때문에 비정상적인 일이 발생하고 있음을 알 수 있습니다! 이것은 재활용이 일어날 때입니다.


2
이것은 훨씬 더 그럴듯한 설명입니다. 갑작스러운 메모리 해제는 거의 독점적으로 프로세스 재시작으로 발생합니다. 실행중인 프로세스의 메모리를 비우는 메커니즘은 사전 할당 된 힙에서 일부 공간을 비우는 것보다 결코 날카 롭고 실제로 메모리를 비우는 것은 아닙니다.
Jiri Klouda
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.