HDD 접근 메모리 누수. umount 시 메모리 리턴.

badcodek의 이미지

안녕하세요.
무쟈게 삽질 하다가 글을 올립니다.

영상장비를 녹화하고 재생하는 장비를 만들고 있어서, 영상데이타를 하드에 쓰고, 읽는 작업이 주가 됩니다.
녹화/재생 루틴을 라이브러리로 들고 있고, 이전 몇몇 프로젝트에 문제 없이 사용 해왔습니다. 그런데 이번에... ㅠㅠㅠㅠㅠ

현재 저수준 라이브러리를 사용하고 있고, 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 퍼포먼스 문제 일까요?
어디를 건드려야 할까요..

doraq의 이미지

요즘의 커널은 남는 메모리를 최대한 활용합니다. 캐쉬로요.
물론 app가 요구하면 거기서 꺼내서 반환하지요.
그리고 언제 쓰일지 모르니까 계속 가지고 있습니다. app를 죽여도요.
umount할때 헤제된다는건 상황을 잘 모르지만 그게 유일한 filesystem이었거나
했다면 가능한 상황인거 같기도 하구요.
그러나 결국 메모리로 죽었다면 그거랑 상관없이 누수는 있는거 같습니다.

암튼 캐쉬를 생각해야 하니까 사용량이 늘어난다고해서 그게다 누수라고 판단하면 안됩니다.

badcodek의 이미지

다른 모듈의 메모리 할당 부분에서 문제가 있었나봐요,
메모리 할당 오류 처리 부분 체크하고 있습니다..

답변 감사드립니다 :)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.