[긴급] 메모리 사용량.. 증가이 원인..

leolo의 이미지

메모리 사용량이 계속해서 증가하고 있습니다.
발생할 수 있는 원인이 무엇이 있을까요.
현재 리눅스에서 TOP 해보면,
아래와 같습니다. 여기서, SIZE, RSS, SHARE가 무엇을 의미하는 지요?
그리고, TOP 명령이 정확히 프로세스의 메모리 사용량을 나타내는지도 궁금합니다.

2004. 11. 17. (수) 09:43:09 KST
09:42:45 up 11:58, 5 users, load average: 0.00, 0.00, 0.00
66 processes: 64 sleeping, 2 running, 0 zombie, 0 stopped
CPU states: 0.2% user 0.6% system 0.0% nice 0.0% iowait 99.1% idle
Mem: 1030352k av, 570804k used, 459548k free, 0k shrd, 99644k buff
246904k actv, 154012k in_d, 15336k in_c
Swap: 2040212k av, 6556k used, 2033656k free 286532k cached

PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
2878 ering 15 0 14104 10M 2588 S 0.0 1.0 0:01 0 mysqld
4427 root 25 0 10052 9.8M 880 S 0.0 0.9 0:00 0 pscp
3513 root 15 0 10040 9.8M 2392 S 0.0 0.9 0:01 0 ctdaemon
4429 root 25 0 9252 9252 592 S 0.0 0.8 0:00 0 omp
4426 root 15 0 8088 8088 1288 S 0.2 0.7 0:04 0 ivr
4425 root 16 0 7984 7984 1232 S 0.2 0.7 0:04 0 ivr
4430 root 23 0 5160 5160 824 S 0.0 0.5 0:00 0 sgp
2992 xfs 15 0 2600 2600 276 S 0.0 0.2 0:00 0 xfs
3517 root 15 0 2024 2024 960 S 0.0 0.1 0:00 0 cfbm
5295 ering 15 0 1480 1480 1128 S 0.0 0.1 0:00 0 bash

또한, free -m 해서 보면,
[root@u237 init.d]# free -m
total used free shared buffers cached
Mem: 1006 569 436 0 97 290
-/+ buffers/cache: 180 825
Swap: 1992 6 1985
와 같이 나타나는 데요, 여기서, free 가 계속 줄어들고 있습니다.
이 경우 free가 0이 되면, swap 을 메모리로 잡아서 사용하게 되는지도 알고 싶습니다.

마지막으로, 메모리 증가의 원인에서 malloc 이외에, 특정한 함수가 malloc와 같은 동적 메모리 할당을 하는 함수가 있다고 하는데, 이런 함수에는 어떤 것들이 있는지도 알고 싶습니다.

또한, while 루프에서 만약, 계속해서 돌게된다면, 즉,
char buf[256];
while(1)
{
buf에 데이터 저장..
}
cpu 부하량이 증가되는데요, 여기서도 메모리 사용량이 증가하는지도 알고 싶습니다.

부탁드립니다.

leolo의 이미지

들리는 소문에 의하면, 리눅스에서는 프로그램 상에 이상이 없을 경우, 메모리는 계속해서 증가할 수 있다고 하는데 사실인가요..

제 프로그램에서는 처음에 malloc해서, 메모리를 잡고, 프로세스가 죽지 않는 한, 계속해서 그 부분을 사용하는 형식으로 되어있어서요..

그런데도, TOP나 free로 보면 메모리가 계속해서 증가하니,
저도 참 힘듭니다..

실력이 있으면 삶이 편하다... 영차 영차...

cdpark의 이미지

버퍼와 캐쉬에 사용되고 있는 메모리도 실질적으로 free 메모리입니다.

Linux에서는 하드디스크에서 읽어온 내용을 메모리가 남아있는 한 끝까지 가지고 있습니다.

이미 몇차례 다뤄진 내용입니다. "검색"으로 뒤져보세요.

leolo의 이미지

만약, 함수에서 리턴되면, 메모리는 해제되겠죠..

참, 무엇으로 검색하면 되죠..
^^

func();

int func()
{
char buf[200];
//DB에서 데이터 가져와서, buf에 저장하고,
내용을 확인하고, 체크하고 성공 여부를 알림.
return 1;
}

실력이 있으면 삶이 편하다... 영차 영차...

ㅡ,.ㅡ;;의 이미지

맨위에 함수내부에서 루프돌면서 메모리사용하는건 증가하지 않습니다.
또한 재사용하기때문에 메모리의 내용도그대로남아 있을리는 없겠죠

함수의 오토변수때문에 메모리가 증가하는일은 재귀함수,상호호출등으로 불려지면 계속적으로 증가합니다.

또한 메모리할당함수사용할때 해제를 재대로안해주는경우가 있겠죠


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

ssoo76의 이미지

DW 직원인가 보네요....

메모리가 증가하는게 어떤 프로세스인지 확인했나요?

top을 계속 보면서 증가하는 프로세스를 확인하는게 순서겠네요...

만약 프로세스의 메모리가 계속 증가하는게 아니라면

리눅스에 특성이겠죠....

리눅스에서 Mem의 free 영역은 의미가 없습니다. 부팅하고 좀지나면 0에 가까워 집니다.

Swap의 free가 의미가 있겠죠... Swap의 free가 계속 감소한다면 메모리 누수가 있는거겠죠..

세상은 하나..........

leolo의 이미지

소식은 들었습니다. 리눅스의 특성이라는 하지만, 잘모르면, 사람 간 떨어지게 하죠.. 어제와 오늘 상황은 이렇습니다.... 특별히, Swap 메모리의 free 영역이 만히 줄어든거 같지는 않습니다만,
TOP로 %MEM을 보면, 프로세스의 누수는 없습니다. 그의 0.7% 정도에서 항상 유지됩니다.

어제 오전(9), 오후(6) 상황을 보면, Swap 부분에서는 변동이 없었습니다.
그런데, 오늘 오전 부터, 조금시 free 영역이 줄고 있습니다.
어제와 오늘의 다른점은 어제는 web서버를 돌리지 않았고, 오늘은 돌렸습니다.
들리는 소식에 의하면, web 서버(jdk1.3+apache+tomcat)에서 메모리 누수가 발생할 소지가 많다고들었습니다.
금일 오전 부터 조금씩 Swap영역의 free가 줄어들고 있습니다. 계속 모니터링 할 예정이지만, 현재로써는 web 서버를 돌린 상태에서 Swap영역의 변동 추이를 지켜볼 예정이고, 계속해서 줄어든다면, Web 서버를 중지시킨 이후, 변동 추이를 지켜볼 예정입니다....

어제 상황.. (오전 9)
total used free shared buffers cached
Mem: 1006 514 491 0 94 226
-/+ buffers/cache: 193 812
Swap: 1992 6 1985

어제 상황.. (오후 6)
total used free shared buffers cached
Mem: 1006 989 16 0 107 727
-/+ buffers/cache: 154 851
Swap: 1992 6 1985

금일 오전 상황...
# date
2004. 11. 18. (목) 09:01:38 KST
# free -m
total used free shared buffers cached
Mem: 1006 997 8 0 60 803
-/+ buffers/cache: 134 871
Swap: 1992 11 1980

# date
2004. 11. 18. (목) 09:51:00 KST
# free -m
total used free shared buffers cached
Mem: 1006 997 8 0 57 807
-/+ buffers/cache: 132 873
Swap: 1992 12 1979

실력이 있으면 삶이 편하다... 영차 영차...

leolo의 이미지

아래에서 실제로 Application Program에서 사용하고 있는 메모리는 488336 가 아니라 124224이다는 내용인거 같습니다.
나머지는 OS 레벨에서 사용되는 것이고 APP에서 필요시 할당 받을 수 있는 메모리이다로 보입니다만...

-----------------------------------------------------------------------
Re: Increasing Memory Usage

_____

From: Jeremy Portzer <jeremyp pobox com>
To: shrike-list redhat com
Cc: Jeff Grossman <jeff stikman com>
Subject: Re: Increasing Memory Usage
Date: 12 May 2003 09:22:53 -0400

_____

On Sun, 2003-05-11 at 21:14, Jeff Grossman wrote:
> I never knew about the "free" command. But, I still don't understand
> how the system can start only using about 100M and now it is using
> almost all of the built in memory. And starting to use swap space.
>
> total used free shared buffers
> cached
> Mem: 513852 488336 25516 0 137064
> 227048
> -/+ buffers/cache: 124224 389628
> Swap: 650552 6708 643844
>
>

To simplify what Roberto said, you're looking at the wrong line in the
output of "free." You should read the line marked "-/+ buffers/cache".
This shows that 124 MB of RAM is being used by your programs, and 389 MB
is available if the programs need it. The extra RAM being used for
cache will speed up your system overall and is NOT a problem -- it's a
big feature of the Linux kernel!

Also, the small amount of swap being used is not anything to be worried
about. The only time you're "really" using swap is when that "free"
column in the -/+ buffers/cache line becomes zero (or very small).

Hope this helps,

Jeremy Portzer

--
/=====================================================================\
| Jeremy Portzer jeremyp pobox com trilug.org/~jeremy |
| GPG Fingerprint: 712D 77C7 AB2D 2130 989F E135 6F9F F7BC CC1A 7B92 |
\=====================================================================/

Attachment: signature.asc
Description: This is a digitally signed message part

Re: Memory Usage under Linux

_____

From: "Brent R Brian" <BrentRBrian prodigy net>
To: redhat-install-list redhat com
Subject: Re: Memory Usage under Linux
Date: Mon, 1 Oct 2001 22:37:03 -0400

_____

Linux will use an "un-allocated" ram for disk buffering. When the ram is
needed, the buffers are reduced.

This is normal.

B

In article
<2C08D4EECBDED41184BB00D0B7473342055E0A49 cf-bay-exch-03 cacheflow com>,
"Chan, Eddie" <eddie chan cacheflow com> wrote:

> Hi,
> It seems that the top always shows the memory nearly 100% usage
> regardless machine load. I tried to plot the memory graph out of sar but
> it didn't reflect any real situation. Can any comment or do we have a
> better tool to tell the memory usage?
> Thanks,
> EDDIE
> _______________________________________________ Redhat-install-list
> mailing list
> Redhat-install-list redhat com
> <https://listman.redhat.com/mailman/listinfo/redhat-install-list>

실력이 있으면 삶이 편하다... 영차 영차...

댓글 달기

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