2009-10-09 3 views
2

어딘가에 메모리 누수가 있습니다. 내 프로그램과 관련이없는 것으로 보입니다. 나는 일단 내 프로그램이 일단 정상적인 방법으로, seg-faulting 또는 aborting에 의해 종료되면, 메모리는 회복되지 않는다는 사실에 기반하여이 대담한 진술을하고있다. 내 프로그램이 범인이라면 MMU가 모든 것을 복구한다고 가정 할 것이지만, 그렇다고 볼 수는 없습니다.stdio를 리디렉션 할 때 Linux BASH 메모리 누수가 발생했습니다.

이 괜찮 같이 내가 (BASH 버전 2.05 또는 4) 표준 출력을 리디렉션 파일에 때 누출은 활동하기 시작

:

# my-program 

을하지만이되지 않습니다 :

# my-program > /mnt/sda1/log-output.txt 

화면에 인쇄하는 속도는 < 2Kb/sec입니다. (파일이 USB 키에 있음).

아이디어가 있으십니까?

관련 질문은 here입니다.

+1

누출이 정확히 얼마나되는지 아십니까? – EFraim

+0

처음에는 세그먼트 오류가 발생했을 때 알았고 45 메가의 RAM 중 40 개가 누락되었습니다 (임베디드 시스템). 나는 재부팅하고 프로그램을 relauched하고이 명령을 사용하여 메모리를 모니터했다. for ((c = 1; c;)) do cat/proc/meminfo && sleep 1; 완료 | awk '/ MemFree :/{if ($ 2 max || max == 0) max = $ 2; \ n ", $ 1, $ 2, min, max)} '' ' – Jamie

+0

캐시 된 필드의 수치를 확인 했습니까? 파일에 쓰기가 확실히 캐시에 추가 될 수 있습니다. 이렇게하면 MemFree가 줄어들지 만 필요에 따라 교정 할 수 있으므로 메모리를 잃어 버리지는 않습니다. –

답변

2

MemFree만으로는 거의 아무것도 말하지 않습니다.

리눅스의 블록 계층은 많이 캐시합니다.

언급 한 동일한/proc/meminfo에서 파일 시스템 (및 기타) 캐시에 사용되는 용량을 볼 수 있습니다.

+0

Alllll righty then! 나는/proc/meminfo의 다른 필드를 살펴보고 "Active :"및 "Cached :"필드가 크게 올라간 것을 보았습니다. 나는 아마도 메모리 누수가 없다. – Jamie

관련 문제