비 페이징 메모리가 누출되는 응용 프로그램을 어떻게 확인합니까?


8

최근 라이브 서버에 문제가 발생하여 웹앱의 응답이 중지되었습니다. 서버를 재부팅 할 때까지 503 오류가 발생했습니다. 결국 나는 그것을 httperr.log로 다시 추적하고 1_Connections_Refused 오류를 많이 발견했습니다.

추가 조사에 따르면 비 페이징 풀 제한에 도달 한 것으로 나타났습니다. 그 이후 우리는 Poolmon.exe를 사용하여 비 페이징 풀 메모리를 모니터링하고 있으며 문제를 일으키는 태그를 식별했다고 생각합니다.

Tag   Type    Allocs       Frees       Diff       Bytes      Per Alloc
Even  Nonp  51,231,806   50,633,533   684,922   32,878,688      48

poolmon.exe / g를 사용하면 매핑 된 드라이버가 [<unknown> Event objects]로 표시됩니다.

이것은 전혀 도움 이 되지 않습니다 . 우리 팀은이 문제를 연구하는 데 상당한 시간을 보냈으며 특정 응용 프로그램이나 서비스로 범위를 좁히는 프로세스를 찾지 못했습니다. 나는 대부분의 사람들이 비 페이징 메모리 재설정을 볼 때까지 컴퓨터에서 프로세스를 종료하여 문제를 해결하는 것처럼 보인다는 것을 알게되었습니다. 이것은 생산 기계에서 작업 할 때보 고 싶은 것이 아닙니다.

작업 관리자를 열고 프로세스 목록을 보면 NP 풀 값이 105K 인 MailService.exe가 두 번째로 나열된 프로세스 값보다 36K 더 높습니다. 과거에 메일 서버에 문제가 있었으므로 (이 문제와 관련이있을 수도 있고 아닐 수도 있음) 내 직감은 이것이 문제를 일으키는 것입니다.

그러나 서비스를 다시 시작하기 전에 "직감"보다 조금 더 확실합니다.

또한 poolmon.exe / c를 사용해 보았지만 항상 오류를 반환합니다.

unable to load msvcr70.dll/msvcp70.dll

localtag.txt를 만들지 않습니다. 내 동료가 인터넷에서 pooltag.txt를 다운로드해야했기 때문에 인터넷에서 찾을 수 없기 때문입니다. 우리는 win 디버거 또는 win DDK가 설치되어 있지 않습니다 (볼 수 있음). 어쩌면 위의 오류 중 하나가 설치되어 있지 않아서 발생했을 수도 있지만 모르겠습니다.

마침내 나는 시도했다 :

C:\windows\system32\driver\findstr /m /l Even *.sys

이것은 상당히 큰 크기의 .sys 파일 목록을 반환했으며 현재 문제에 전혀 도움이되지 않았습니다.

그래서 내 질문은 이것입니다 : 이 메모리 누수의 원인을 좁힐 다른 방법이 있습니까?

최신 정보:

아래에서 제안한 것처럼 마지막 날 풀 비 페이징 바이트를 로깅하여 프로세스가 추세를 확인하고 있는지 확인했습니다. 대부분의 경우 모든 프로세스는 사용법이 상당히 정적 인 것으로 보입니다. 그들 중 두 명은 약간 똑딱 거렸다. 앞으로 며칠 동안 계속해서 모니터링하겠습니다.

또한 프로세스 중 어느 것도 과도한 수의 핸들을 사용하지 않는 것 같습니다.

업데이트 2 :

지난 몇 주 동안 이것을 모니터링했습니다. 개별 프로세스에 대한 비 페이징 바이트 풀과 총 비 페이징 바이트 풀은이 시간 동안 비교적 안정적으로 유지되었습니다. 이 시간 동안 Windows가 업데이트되고 서버가 다시 부팅되었으므로 문제가 해결되었는지 궁금합니다. 나는 이것이 이전이기 때문에 Nonpaged Bytes Pool에서 꾸준한 성장을 보지 못하고 있습니다.


perfmon을 사용하여 모든 프로세스에 대한 풀 비 페이징 바이트를 모니터링하고 런 어웨이 비 페이징 풀 메모리가있는 프로세스를 찾으십시오.
joeqwerty

방금 Performance Monitor로 약간의 놀이를하고 제안한대로 설정했습니다. 그러나 실제로 작업 관리자를 보면 알지 못하는 내용이 없습니다. MailService의 비 페이징 풀 사용량이 가장 많지만 106K에 불과합니다. 내가 찾던 흡연 총이 아니에요
개발자

시간이 지남에 따라 프로세스에서 풀 비 페이징 바이트를 늘리십시오. 프로세스 별 사용 현황을 한 순간에 신속하게 파악하면 쉽게 알 수 없습니다. 카운터 로그를 설정하여 CSV 파일에 저장하고 Excel에서 파일을 열어 프로세스 당 에스컬레이션 사용량을 분석하여 시간이 지남에 따라 사용량을 쉽게 캡처 할 수 있습니다. 시스템 시동으로부터 풀 페이징 바이트에서 10 % 이상의 증가를 나타내는 상관 처리 문제를 일으키는 과정을 메모리 누수 가능성이다
joeqwerty

관련 카운터 데이터를 캡처하고 분석하는 데 유용한 도구는 pal.codeplex.com/releases/view/51623#ReviewsAnchor에 있는 PAL 도구 입니다. 이것은 내가 사용했던 것보다 새로운 버전이지만 x86 버전이 있으며 W2K3에서 사용할 수있는 것처럼 보입니다.
joeqwerty

NP 풀 바이트를 기록하기 위해 로그 파일을 설정했습니다. Poolmon은 이제 비 페이징 메모리 사용량이 68MB라고 말합니다. 내가 이것을 알아 내려고 몇 시간 동안 2-3MB 정도 성장했습니다. 그러나 프로세스의 NP 값에는 해당 성장이 없습니다. 실제로 개별 프로세스에 대한 NP 풀 값은이 숫자와 거의 일치하지 않습니다. 나열된 모든 np 풀 값을 합산해도 총 합계는 68MB가 아닌 1MB가됩니다. 그러나 어쩌면 나는 여기에 뭔가 빠져 있습니다.
개발자

답변:


6

나는 지금 약 6-7 주 동안 이것을 감시 해 왔으며 마침내 그 문제에 대한 결정적인 답을 줄 수있다.

첫째, 개별 프로세스에 대한 비 페이징 바이트는 실제로 사용에있어 상당히 정적 인 것으로 보이는 유용한 정보를 제공하지 못했습니다. 급등이 있었지만 사용량은 항상 기준선으로 돌아 왔습니다.

Nonpaged Bytes Memory의 총계는 한동안 정적으로 유지되었지만 점차 증가하여 급상승하기 시작했습니다. 약 절반 정도의 스파이크 후에 메모리가 해제 된 다음 패턴이 반복 될 때까지 잠시 동안 더 높은 수준으로 다시 고정 된 상태로 유지되었습니다. 그래프를 보면 이러한 스파이크가 상당히 규칙적으로 간격을두고있는 것으로 나타 났으며, 2 주 간격으로 항상 일요일에 발생하는 것으로 나타났습니다.

다음 질문은 일요일에 격주로 운영되는 것은 무엇입니까? 이벤트 뷰어를 살펴 보았고 스파이크가 발생할 때마다 McAfee가 실행 중이었습니다 . 또한 McAfee에 실시간 스캐너가 있기 때문에 실수로 문제를 악화시킨 문제를 모니터링하기 위해 서버에 자주 로그온하면 생각보다 작은 증가를 일으킨다 고 생각합니다.

예약 작업이었던 스캔에서 McAfee 특정 태그 대신 PoolMon의 이벤트 객체 태그에 NP 메모리 증가가 추가 된 이유도 설명합니다. 이것이 우리를 정원 길로 인도하게 만든 주요 원인이었습니다.

이제 누출의 원인을 알게되었으므로 이에 대해 무언가를 할 수 있습니다. 추적하는 데 시간이 오래 걸린다는 것은 놀라운 일입니다.

업데이트 : 마지막 메모입니다. 주말에 McAfee가 업데이트되어 비 페이징 메모리 문제가 완전히 해결되었습니다.

업데이트 2 : 방금 투표를 마쳤으므로 추가 업데이트를 추가 할 것입니다. 처음에는 McAfee 업데이트가 문제를 해결하는 것처럼 보였습니다. 즉, 더 이상 정기적으로 NP 메모리에 엄청난 스파이크가 표시되지 않습니다. 또한 업데이트 이후 McAfee에서 더 이상 기본적으로 이벤트 뷰어에 로그를 쓰지 않는 것으로 나타났습니다.

그러나 여전히 NP 메모리 사용량이 점차 증가하고 있습니다. 이제 2 주 정도마다 서버를 재부팅해야하는 시점에 도달했습니다. 업데이트 된 하드웨어 및 소프트웨어로 인해이 문제가 사라질 것이라는 희망으로 최근 새 서버를 구입 한 것은 나쁘지만 Windows Server 2008, SQL Server 2008 R2 및 McAfee 만 설치된 완전히 새로운 서버는 여전히 NP 메모리 누수를 보여줍니다. . McAfee가 완전히 제거 된 후에야 누수가 중단되었고 스위치를 전환 할 준비를하기 위해 모든 소프트웨어로 서버를 설정 한 후에도 정적으로 유지되었습니다.

그 이후로 읽었으며 이것이 사실인지 모르겠습니다. 문제는 McAfee의 문제가 아니라 McAfee가 사용하는 일부 Windows 루틴에서 NP 메모리가 누출되는 것입니다. 분명히 네트워크 활동은 누수의 원인입니다. 즉, 더 많은 네트워크 활동 => 더 큰 누수입니다. 이는 서버가 바 빠질수록 누출이 심해 졌다는 점에서 우리의 경험과 일치하는 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.