HDD 접근 메모리 누수. umount 시 메모리 리턴.
안녕하세요.
무쟈게 삽질 하다가 글을 올립니다.
영상장비를 녹화하고 재생하는 장비를 만들고 있어서, 영상데이타를 하드에 쓰고, 읽는 작업이 주가 됩니다.
녹화/재생 루틴을 라이브러리로 들고 있고, 이전 몇몇 프로젝트에 문제 없이 사용 해왔습니다. 그런데 이번에... ㅠㅠㅠㅠㅠ
현재 저수준 라이브러리를 사용하고 있고, read/write 시스템 콜을 사용하고 있습니다.
켜놓은 채로 퇴근한 후 연말 연초 잘 쉬고 오니까, 메모리 누수로 어플이 죽어 있더라구요..
그래서 아래 명령을 사용한 이후에 어플을 재실행 해봤습니다.
watch -n 5 cat /proc/meminfo &
read/write를 동시에 놓고 하룻밤 지나니까 free 메모리가 훌렁 깍여 있더라구요
그리고 나서, read 만도 해보고 write 만도 해본결과 양쪽에 다 문제가 있더라구요.
어플을 죽여도 메모리 반환이 안되길래 드라이버를 하나하나씩 내려봤습니다.
그래도 안되길래 혹시나 해서 마운트된 장비를 하나하나 내려보다보니
HDD 를 내리는 순간 무려 50MB 가까운 메모리가 리턴되더라구요 -__________________ㅠ
파일 시스템은 FAT32를 사용중입니다.
umount 전과 후의 메모리 내용입니다.
/nfs/olic $ cat /proc/meminfo
MemTotal: 127056 kB
MemFree: 43016 kB <<<
Buffers: 46116 kB
Cached: 27516 kB <<<
SwapCached: 0 kB
Active: 31752 kB
Inactive: 42716 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 856 kB
Mapped: 496 kB
Slab: 5248 kB
SReclaimable: 3368 kB
SUnreclaim: 1880 kB
PageTables: 72 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 63528 kB
Committed_AS: 5012 kB
VmallocTotal: 385024 kB
VmallocUsed: 76896 kB
VmallocChunk: 303672 kB
/nfs/olic $
/nfs/olic $ umount /mnt/hdd00/
/nfs/olic $ cat /proc/meminfo
MemTotal: 127056 kB
MemFree: 71408 kB <<<
Buffers: 46080 kB
Cached: 2160 kB <<<
SwapCached: 0 kB
Active: 30508 kB
Inactive: 18568 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 856 kB
Mapped: 496 kB
Slab: 2272 kB
SReclaimable: 392 kB
SUnreclaim: 1880 kB
PageTables: 72 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
CommitLimit: 63528 kB
Committed_AS: 5012 kB
VmallocTotal: 385024 kB
VmallocUsed: 76896 kB
VmallocChunk: 303672 kB
disk 캐쉬에 잡혀있던거 풀리고
Inactive 영역 풀리구요.
HDD 퍼포먼스 문제 일까요?
어디를 건드려야 할까요..
요즘의 커널은 남는 메모리를 최대한 활용합니다.
요즘의 커널은 남는 메모리를 최대한 활용합니다. 캐쉬로요.
물론 app가 요구하면 거기서 꺼내서 반환하지요.
그리고 언제 쓰일지 모르니까 계속 가지고 있습니다. app를 죽여도요.
umount할때 헤제된다는건 상황을 잘 모르지만 그게 유일한 filesystem이었거나
했다면 가능한 상황인거 같기도 하구요.
그러나 결국 메모리로 죽었다면 그거랑 상관없이 누수는 있는거 같습니다.
암튼 캐쉬를 생각해야 하니까 사용량이 늘어난다고해서 그게다 누수라고 판단하면 안됩니다.
메모리 부족현상이
다른 모듈의 메모리 할당 부분에서 문제가 있었나봐요,
메모리 할당 오류 처리 부분 체크하고 있습니다..
답변 감사드립니다 :)
댓글 달기