2012-06-05 4 views
1

메모리 누수와 관련된 쿼리가 있습니다.다른 프로세스에서의 메모리 누수의 영향

32 비트 Linux 기반 시스템이 여러 활성 프로세스 A, B, C, D를 실행 중입니다. 모든 프로세스는 힙에서 메모리를 할당/할당 취소하고 있습니다. 이제 프로세스 A가 많은 양의 메모리를 누설하고 있다면 프로세스 B는 일정 시간 후에 힙에서 할당 할 메모리를 찾을 수 있습니까?

필자가 이해 하듯이 각 프로세스에는 운영 체제에서 2GB의 unque VM이 제공됩니다. 그러나 VM과 실제 메모리 사이에 mappig가 있습니다.

+0

확인. 그러나 그것은 어떤 질문입니까? – dAm2K

+0

질문은 malloc이 프로세스 B, C, D에서 실패 할 수 있는지 여부입니다. – Bidyut

답변

0

Linux 커널은 메모리 오버 커밋을 기본적으로 수행합니다. 프로세스가 malloc()을 사용하여 메모리 세그먼트를 요청하면 메모리는 자동으로 할당되지 않습니다. 4 개의 프로세스 malloc()을 각각 2GB로 사용할 수 있으며 문제가없는 경우도 있습니다. 프로세스가 malloc() 메모리를 사용 (초기화, bzero, 복사) 할 때 문제가 발생합니다. 시스템은 malloc()을 사용하여 시스템이 예약 할 수있는 것보다 많은 메모리를 문제없이 사용할 수 있으며 malloc()은 NULL을 반환하지 않습니다.

+0

dAm2k, 나는 메모리 누수가없는 프로그램 충돌로 이어지는 B에서 malloc 실패를보고 있습니다. 그리고 분명히 메모리를 할당하는 프로세스는 데이터를 저장하는 데이를 사용하고 memset, memcopy 및 기타 문자열 연산이 사용됩니다. – Bidyut

+0

dmesg 명령을 실행하고 OOM 킬러가 프로세스 B를 죽이지 않는지 확인하십시오 – dAm2K

2

예, 프로세스 A에서 총 VM (RAM + 스왑 공간)이 모두 소모 된 경우 다른 프로세스에서 malloc이 실패 할 수 있습니다. 리눅스는 프로세스의 메모리 공간을 다른 프로세스로부터 숨기지 만, 당신의 컴퓨터에 여분의 메모리를 마술 적으로 생성하지는 않는다. (overcommit 동작으로 인해 그렇게 보일 수도 있지만

또한 Linux는 메모리가 부족할 때 OOM 킬러를 사용할 수 있습니다.

+0

감사합니다. larsmans 님, 답변 해주세요. 실제로 우리의 테스트 베드에서 우리는이 시나리오를 관찰하고 있습니다. – Bidyut

+1

메모리가 부족한 경우 리눅스는 악명 높은 OOM (Out Of Memory) 킬러를 해고하고 다른 프로세스를 죽일 수 있습니다. – dAm2K

+0

dAm2k,이 부분을 자세히 설명해 주실 수 있습니까? 우리는 리눅스 시스템에서 실행되는 콜 서버를 가지고있다. 서버를 지원하는 다른 공동 작업 프로세스가 있습니다. 이제 서버를 부하 테스트하에 놓으면 20 분의 지속 시간을 갖는 5000 개의 호출을 실행 한 후 malloc 장애로 인해 충돌이 발생합니다. – Bidyut

관련 문제