memory leak이 발생하는 것을 실시간으로 알고 싶은데 가능하나요?

munhoney의 이미지

프로세스별로 memory leak이 발생하는 것을 실시간으로 Byte단위로까지 보고 싶습니다.

처음 생각은 /proc//status 를 통해 vmRSS의 정보를 보면 되겠다 생각했는데,
보니깐. KB단위이고, 특히 업데이트가 4KB 배수로 나가는 것 같네요..

좀더 정밀하게 알 수는 없을까요?

camera7의 이미지

해당 내용이 memory leak인지는 어떻게 판단 가능할까요?

/proc/status 의 VmRss 도 virtual memory 할당량을 만을 나타내는 지표일테구요.

munhoney의 이미지

/proc/status 의 VmRSS의 문제는 메모리 할당 시에는 정확하게 할당된 것을 나타내주긴 하는데

1. KB 단위라 정밀하게는 알수가 없네요
2. 그리고 메모리 해제시 값이 즉시즉시 변화하지 않고요..

이를 해결할 수 있는 방법은 없을까요?

---------------------------------
http://blog.naver.com/munhoney
---------------------------------

camera7의 이미지

커널 입장에서는
1. 4KB 단위로 메모리를 할당하고
2. User 영역에서 free() 할때도 곧바로 메모리를 해제 하지는 않기 때문이지요.

valgrind, mpatrol, memwatch, 같은 메모리 leak 툴을 써보시는게 어떨지요.

peccavi의 이미지

mtrace(3)는 어떠신가요?

memory leak이 의심되는 부분을 mtrace()와 muntrace() 블럭으로 묶으면
실시간으로 memory leak을 체크할 수 있습니다.
MALLOC_TRACE 환경변수를 이용하면 파일로 로그를 남길수도 있구요.

쓰고보니.. 소스코드가 없으면 안되겠네요.
프로그래밍 QnA 게시판인지라.. 소스코드와 연관지어 생각이 났네요.

----
jai guru deva om...

----
jai guru deva om...

munhoney의 이미지

mtrace와 muntrace란게 있었군요

그런데 manual봐보니 둘다
void mtrace(void)
이던데요

제가 원하는 것은 제 프로그램 내에서 특정 프로세스의 사용한 메모리 영역을 보고 싶거덩요.

이렇게는 안될까요?

---------------------------------
http://blog.naver.com/munhoney
---------------------------------

a287848의 이미지

런타임도중에 어떤 Address 가 Leak 다 아니다를 판단할수는 없습니다.

프로그램이 종료가 되야 Heap에 어느 부분이 free 되지 않았다는걸 알 수 있을테니깐요.

Looping이 프로그램의 핵심이라서 다른 툴을 찾으시는거라면

간단하게 Malloc을 다른 함수로 대체해서 메모리 할당 해제 기록을 파일로 기록하는 방법도 있을 수 있습니다.

__FILE__, __LINE__ 메크로를 이용해서요

sprintf(str,"[MEMLOG]Allocating memory: 0x%x, filename: %s, line: %d, size: %d, time %lu\n"
, malloc받은 Address, __FILE__, __LINE__, size, time);

이런 자료 구조를 linked list 나 array로 가지고 있다가 free쪽에서 address를 보고 빼주는 식으로 해주고

대략 5분 주기로 파일로 쓰게끔 해주고 읽어보면,

Leak 이 발생할 경우 패턴이 보입니다...

그리고 debugging ..........

저는 ARM용으로 쓸만한 leak-tracer 가 없어서 이방법을 사용해 봤습니다.

Dig it.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.