메모리 관련 문제에 대해 조언 부탁드려요.

익명 사용자의 이미지

레드헷 7.3에서 작업중입니다.

현재 개발중인 프로그램을 실행시키면 일정량의 메모리가 계속 소모되네
요..
sar -r 1 10000 명령으로 보면 1초에 약 8~16K 정도의 메모리가 소비되
고 있습니다.

프로그램 어딘가에 버그가 있는거 같은데. 워낙 다수의 프로세스로 이루어
져서 찾기가 힘들어요.. 소스도 여기저기 산재되어 있구요.

어떤 방법으로 이 버그를 해결할 수 있을까요? 현재 메모리를 계속 사용
하고 있는 프로세스에 대한 정보를 얻는 툴은 없나요?
많은 분들의 조언을 부탁드립니다.

익명 사용자의 이미지

C프로그램이라면 efence라는 라이브러리를 같이 링크해서, 컴파일 해 보세
요. (efence는 저도 테스트를 해본적이 없어서 잘 모르겠군요. man
efence 를 해보니, 된다고는 되어 있네요. ^^)
대강 보니 라이브러리 형태로 링크하면, malloc/free할때를 체크해서,

메모리 누수를 체크하는 듯 하군요. ^^;;

------------------------------------------------------------------

C++ 프로그램이라면 LeakTracer를 사용해보시구요.

http//www.andreasen.org/LeakTracer/

아래는 테스트해본 결과입니다.

================================================================
실행시 에러를 내지는 않는가?

메모리 누수 체크 => new/delete만 체크할 수 있다.

LeakCheck 스크립트에 실행파일 이름을 인자로 넣어주고 실행하면,
-----------------------------------------------------------------
[mjpark@jross77 memleak]$ ~/LeakTracer/LeakCheck ./memleak
Hello
-----------------------------------------------------------------

leak.out이라는 파일이 생성된다.
-----------------------------------------------------------------
[mjpark@jross77 memleak]$ ls
Makefile README leak.out memleak memleak.cpp memleak.o
-----------------------------------------------------------------
leak.out파일을 열어보면, 그 자체로 메모리 누수에 대한 정보를 알 수 있
다.
그리고 leak-analyze프로그램에 실행파일 이름을 인자로 넣어주면, 원인
을 알려준다.
-----------------------------------------------------------------
[mjpark@jross77 memleak]$ ~/LeakTracer/leak-analyze ./memleak
Gathered 1 (1 unique) points of data.
(gdb)
#-- Leak counted 1x / total Size 256 <== 전체 메모리 누수

0x80486df is in main (memleak.cpp11).
warning Source file is more recent than executable.

10 {
11 char* pchar = new char[256]; <== 메모리 누수
의 위치
-----------------------------------------------------------------

익명 사용자의 이미지

mpatrol
valgrind
efence

등등이 모두 메모리 릭에 관한 처리를 할수 있는 디버깅 툴들입니다. 툴
을 돌려 보시면 각각의 루틴 처리시 어떠한 함수시 얼만큼의 메모리가 설
정되었는데 해제 되지 않았다던지 하는것을 금방 아실수 있을겁니다. 특
히 본인이 직접 만드신 함수들 보다는 다른 함수를 가져다 쓸때 가장 많
이 발생하는것 같습니다. 보통 인터넷에 떠도는 유틸리티 함수들을 급하
게 막 가져다 쓰다 보면 나중에 메모리릭이 그런곳에서 주루루룩~

일단 한번 돌려 보시면 팍팍 아 요녀석이었구나 하고 느끼실수 있습니다.

즐거운 하루 되세요.

댓글 달기

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