효율적인 메모리를 관리하기 위한 방법?

geekforum의 이미지

제 서버는.. 램이 1기가에.. swap 가 1기가의 구성으로 메모리를 할당 하고 있습니다.

요즘 들어 메일 전송량도 많아지고..오라클 DB 도 많이 움직입니다.

현재 swap 는 거의 하나도 사용하고 있지 않지만..1기가의 램에서..top 를 해보면
Mem: 1036176K av, 952832K used, 83344K free, 171800K shrd, 568348K buff

이렇게 운영되고 있습니다. 약 20일전엔.. log 화일들을 지우고 다시syslog 를 start 시켰더니만..free 영역이.. 650 메가나 확보 됐는데..현재는..흐흐흘,,,
아무리 그런 작업을 해도.., free 가 100메가를 넘질 못합니다. 그렇다고.. 다른프로그램을 돌리는것도 아닌데 무슨 일일까요?? 현재 시스템이 버벅거립니다.
버퍼 용량이 너무 찬것 같은데 ls -R / 이런 명령을 주어도.. 이런 제길.. 아무 변동이 없습니다. 전문가님들. 제발 도와주세요.

다시 free 를 650 메가로 확보 하고 싶습니다. 제 시스템은.. 펜티엄3 866 듀얼 CPU 이며.. 램은 1기가.. 하드는 20기가..swap 를 1기가로 구성 되었고. 현재.. 오라클이 돌아가고 있으며(게시판 80개 정도가 돌아감.) www 서비스가 가동 되며.. 자원을 많이 먹어 버리는 jsp 서블릿으로 웹서비스를 제공 하고 있습니다. 그리고.. 메일 계정이.. 약 50개 이며 메일 서버가 돌아가고 있습니다.,참고로 스팸 relay 가 열려 있어.. 스팸 메일이 들어와서.. 부하도 엄청 났지만 현재는 relay 를 막아 놓아서.. 아무 문제 없습니다.

그리고.. dns 엔.. 총 4개의 도메인이 파킹 하고 있으며.. 4개의 도메인이.. 다 jsp , servlet 로 구성 되어.. 별도의 java 데몬이 뜨며.. 많은 부하가 걸리고 있습니다. 현재.. 시스템을 분산할 계획 중에 있습니다.

그런데 문제는.. 이렇게 똑같은상황에서.. 지난 20일 전엔.. free 가 650 메가 였다는 것이죠.. 지금은 free 가 90 메가..허걱......

현재 서비스 되고 있는 데몬은.. 필요한 몇가지 빼고 없으며. 포트도 필요한 10개이하만 열려 있습니다.
허거거..... 전문가님들... 의견좀. .. 제시해주십시요.

댓글

익명 사용자의 이미지

음.. 유닉스에 대해서 약
간의 공부를 해야할 분들
이 많이 계신듯 하군요.
잘 알고 계신분
들도 많지만..

비난을 할때는 좀더 자세
히 알고 논리적으로
해야 기분나빠도 수긍을
하지 않을까요?

아무리 geek지만 너무하
는 듯.

다타만의 이미지

야후메일이 또 죽었군엽.. ㅠ.ㅠ

ffsung@hanmail.net ㅠ.ㅠ

제 생각도 비슷합니다.

수치상 검증 해보진 못했지만..

서버가 느려진것은 메모리 문제라고 생각 되지는 않습니다.

메일서버가 시스템의 속도에 영향을 줄정도로 리소스를 많이 먹는다고 생각 되지 않는 상황이구요...

java 서블릿하고 오라클 둘중 하나가 많은 리소스(cpu 부하나.. disk i/o 부하응 일으키지 않을까 의심이 되는군요)

오라클은 자료 저장 패턴 및 빈도 또 양등 모든것을 고려해서 파티션및 물리적 disk 를 할당하라고 하더군엽..
가령 비슷한 싯점에서 읽혀지는 자료는 같은 디스크보다 다른 디스크에 넣는것이 병렬 처리에 더 용의하므로 그런식으로 나누라는것 같더군엽.
그래서 큰 하드 한나보다 몇개의 스카시로 RIAD 를 만드는 거맡나엽.. ?? ^^;;

free 메모리가 적은것 보다 버퍼가 많이 사용된다는 점은 중요한 문제인듯 해서요..

또 오라클측은 스왑을 메모리의 3배를 잡고 램이 1 GB 이상인 경우는 2 배 정도를 잡으라고 권고하고있던데..
스왑영역하고 상관 없는것 보이지만 ..

걍 2 GB 로 하쥐 그러셨어엽.. 기분상이라도..

디스크 I/O 나 속도 같은 문제로 시스템이 버벅거린다는거는.. 좀 이상한거 같아서엽..
버벅거린다고 말씀하신거는 처음엔 빨랐는데.. 이제는 버벅거린다.. (시간 개념이 들어간것이라 생각됩니다.)
하드웨어적 구성문제나 성능 문제라면 처음 부터 느려야 한다고 생각합니다. 분산 처리를 하여 서버를 한대 더 도입 한다 하여도 시간이 지나면 역시 같은 문제를 야기시킬수 있다는 생각입니다.
업무량과 서버의 능력을 평가해서 늘려야 생각한다면 당연히 늘여야 하고엽...

시간이 지나면서 느려졌다면 원인은...

1. 사용량이 늘어 났다..

2. 로그따위가 쌓여서 로그를 WRITE 하려는 일에 시간을 많이 뺐긴다.

여기서 2번의 경우 시스템 로그, JAVA 로그, 오라클 로그 등 종함적으로 생각해보아야 하지않나 하는 생각입니다.(로그 라는 표현니 적절하지 않은것 같습니다만 ^^;;)

또 좀비 문제(엄연한 좁비 프로세서는 아닙니다. 역시 뭐라 칭하는지 모를뿐입니다.)는 당연히 점검해보셨겠지엽.. ??
JSP 시스템에서 오라클이 그 DBMS 인경우 좀비 컨낵션이 남아있어서.. 고생한 기억이... ^^;;
서블릿 런너나 JSP 엔진 버전에 따라 자주 생기는것같습니다만.. 오라클과 웹을 같은 서버에서 돌리는경우 자주 발생하는듯....생각 되러라구엽..
EJB 환경인가엽.. 부러워라... ^^;;

익명 사용자의 이미지

relay를 막아놓으셨다 하더라도, 이미 spool밑에 발송되지 않은 스팸덩어리들이 존재할 가능성이 있다고 봅니다.

그에 대한 언급이 없길래 적어봅니다.

그리고, 만약 위의 경우라면 시스템의 파티션을, 실례지만 엉성하게 잡았다고 볼 수 밖에 없군요. var은 꼭 별도의 파티션으로 잡아서, var때문에 free영역이 모자라는 일이 없도록 하는게 바람직한 방법입니다.

그럼

익명 사용자의 이미지

spam relay를 허용하더라도

/var/spool/mail에는 안 남습니다.

서버에 있는 사용자 메일만 있습니다.

익명 사용자의 이미지

이봐요,..!! /var 를 잘못 잡았다구요??
카카카..
저기서 말하는 free 가 무슨 하드 디스크 용량인줄 아나요?
허허~~
저건.. 램 용량이라구요.
카카카.
/var 디렉토리는 분리했슴다..
그리고 로그 화일 다 지웟습니당..님이여~~~

익명 사용자의 이미지

쩝..원래 리눅스는
남는 메모리는 모두 캐쉬로 할당하기 때문에..
free가 안남아 있는게 정상인뎁쇼..
그거 메모리 2기가로 올려줘도..마찬가지 입니다.
free에 큰 의미 두지 말길...

초보가...

장수원의 이미지

하여간 잘은 모르지만...
free에 큰 의미 없다는건 확실합니다...
물리적 램은 항상 다 쓰고 있는걸로 압니다만..
제가 잘못 알고 있는건가요?

익명 사용자의 이미지

아니.. 님이 말슴하신 얘기는 전 처음 들어봅니다..
허허~
남는 메모리를 캐쉬에 할당 한다니...
그래도. 어차피.. 자원을 소비하는것은 마찬가지 아닐가요?
제가 알기론.. 지금.. 질문 하신 님.. 의 상황은.. 서버 분리 방법 밖에 없는것 같은데.
왜 그런데.. 20일전 하고 지금하고 차이가 많이 날까??
혹시. 해킹을 당했나??
어디 빽도어라도...냐하하.

익명 사용자의 이미지

리눅스는 캐쉬를 적극적으로
활용하는데..
처음 부팅시에야..하드에서 읽어들인게 없다보니 캐쉬 자체가 쩍고 그렇다 보면 free가 많이 남아 돕니다...
허나 컴퓨터 계속 켜고 있으면..그만큼 .하드로 부터 계속 데이터를 읽게 되는 꼴이므로..캐쉬크기는 기하급수적으로 늘어 갑니다..
메모리 힘 닿는데 까정....꽉꽉채우죠..캐쉬로.

리눅스는 항상 free를 없애기 위해 노력하는 os입니당..

그러다 보니..리눅스는 메모리가 많으면 많을수록 성능이 좋아진다..
이런말두 있음...

아무튼 free에 의미두지 말래두여..

초보가...

익명 사용자의 이미지

그럼여.. 아찌..
캐쉬를 꽉꽉 채운다 했는데..
이걸 보세용.
total used free shared buffers cached
Mem: 1036176 916972 119204 191120 568348 85804
이건 왜 그렇죠??
캐쉬를 꽉곽 채운게 아니라.. buffers 를 꽉곽 채웠네여..
어디. 말슴해 보세욧..

agolta_의 이미지

Cache랑 buffer를 굳이
구분할 필요는 없을 겁니다.
굳이 구분한다면
cache는 디스크를 한번
읽고 메모리에 저장해 놓
는 것이고, 버퍼는 응용
프로그램이 참조한 메모
리를 다른 응용프로그램
이 참조하도록 공유하는
것이죠.
보통 그냥 cache/buffer
라고 표시하고 그정도로
됩니다.
버퍼중에 가장 일반적인
것이 공유메모리(SHM)이고요.

리눅스는 처음 부팅했을
때 당연히 휘발성 메모리
인 캐쉬,버퍼가 비어있기
때문에 free메모리가 남
아 있죠.
하지만 응용프로그램이
실행되거나 디스크를 읽
게 되면 점차
cache/buffer가 차게 됩니다.

그렇기 때문에 처음에 부
팅해서 모질라 띄울때보
다 죽여버리고 다시띄울
때가 빠른 것이지요.
특히 버퍼같은 것은 기본
적으로 libc,X라이브러리
등이 올라가기 때문에 윈
도우보다 빠르게 움직이
는 특징이 됩니다.

다시 설명하자면 처음 X
를 띄울때 디스크에서 X
관련된 라이브러리등은
캐쉬에 올라가겠죠. 그리
고는 버퍼에 등록됩니다.
X를 하나 더 띄운다면 등
록된 버퍼의 공유라이브
러리를사용하여 최소한의
시간대기로 하나 더 뜨게
되지요.

만약 모든 X를 죽인다면?
X library가 cache에는
남아있지만 buffer에서는
사라지겠죠?

별 싸움거리가 되질 않네요.
어찌되었건 cache/buffer
굳이 구분할 필요는 없습
니다.

익명 사용자의 이미지

그럼여 아찌. 아찌 글 잘 읽어 보았는데..
그럼 현재 위의 시스템은.. 현제.. swap 는 널널하니..
아직 쓰지도 않고 있는것일테고..
1기가의 램은.. 현재.. 그런니까. 반이상이 남아 돈다 이말씀이 이시네요........
그런건가요??

님들의 의견 다 수용이 가지만..
이런건.. 이해가 안갑니당..
호기심. 의심이 많은 .. 궁금 왕짜가..
그리고.. shard 메모리는 무슨 영역인가요???
카카카.

익명 사용자의 이미지

shard 메모리는 무슨 영역인가요???
shared memory 겠죠....
말 그대로.... 여러 프로금이 공용으로 사용하는거죠?
/lib이나 /usr/lib에 있는 넘들 이죠....
windows 에선.... .dll file들이죠...
이런 넘들이 메모리에 올라가면...
한번 실행했다고 버리지 않습니다.
page fault가 발생할 때까지 남아 있죠.
여기선 메모리 문젠 없어 보이는데요.

더구나... swap영역을 거의 사용 하지 않는다면 절대
메모리 부족은 아님니다.

오라클을 사용하신 다면
Disk I/O 사용률을 첵크 해보는게 좋아 보임니다.
아무 문제 없는 메모리를 첵크하지 말고,,,

익명 사용자의 이미지

total used free shared Buffers cached
1036176, 916972, 119204, 191120, 568348 , 85804

이상하세 복사되서 다시 씁니당..
잘 보세용.. 이건.. cash 를 꽉꽉 채운게 아니라..
Buffers 를 꽉꽉 채운것이죠,..
이건 아무래도 문제가 있는게 아닐가요???????
제생각엔 문제가 있다고 봅니당..
뭔진 모르지만..
그래서..
지금 3일동안 책보고 있슴당.
이 삽질이 헛수고가 아님 좋겠습니당..

익명 사용자의 이미지


http://kldp.org/Translations/html/SysAdminGuide-KLDP/x1566.html

http://kldp.org/Translations/html/SysAdminGuide-KLDP/buffer-cache.html

여기를 참고해 보세요. 이 문서에서는 free를 옛날 버전을 쓰고 있어서 버퍼와 캐쉬를 따로 구분해 보여주지는 않는 것 같네요.

제 생각에, 캐쉬는 이미 디스크에 써넣었지만 다음에 다시 읽을 때를 위해 메모리에 보관하고 있는 부분인 것 같고
버퍼는 아직 디스크에 써넣지 않고 있는 부분인 것 같네요.

위의 문서에 비교적 개념이 잘 정리되어 있으니 보세요.( 위 문서에 의하면 버퍼 캐쉬를 많이 쓰는 것은 성능 향상이 도움이 된다는 군요 )

익명 사용자의 이미지


버퍼와 캐쉬를 거의 구분 안하고 그냥 "버퍼 캐쉬"라고 설명해 놓았군요
버퍼는 디스크에 기록할 내용들을 당장 써넣지 않고 메모리에 담아 두는 것이죠. 그랬다가 약 30초에 한번씩 디스크에 써넣는 것이구요. 캐쉬는 단순히 디스크에서 읽어들인 내용을 메모리에 임시 보관하고 있다가 담에 같은 내용을 읽을 때 대신 써먹는 것이에요. 어쨌든 둘 다 빈번한 디스크 억세스를 줄이기 위해 필요한 기능입니다.

익명 사용자의 이미지

total used free shared Buffers cached
1036176, 916972, 119204, 191120, 568348 , 85804

이 경우 실제로 가용한 여유 메모리를 계산하려면,
total - (used - buffers - cached) 가 되겠습니다.
따라서 1036176 - 262820 = 773356(kB) 이 실질적으로
사용가능한 메모리라고 볼 수 있습니다.

buffers 가 많은 것으로 보아 커널이 바쁘게 움직이고
있으며, 블럭 디바이스에 대한 입출력도 많이 일어나고
있다고 추측할 수 있겠습니다. 보통 널널한 기계의 경우,
buffers 가 10MB 를 넘는 일은 극히 드문 경우라고 알고
있습니다.

익명 사용자의 이미지

급하게 쓰느라 결론을 빼먹었네요.

오라클같은 수퍼 공룡 프로그램과 아파치와 센드메일 등등이
함께 돌아갈 때 이름을 알수 없는 님께서 제시한 Buffers의
숫자는 충분히 나올 수 있는 숫자라고 생각됩니다.

버벅거리는 문제는, 오라클이나 아파치 등등을 튜닝해 보는
방법과, 램을 증설하여 보다 많이 buffer/cached 에 메모리를
할당하는 방법, 그리고 하드가 SCSI 가 아니거나 SCSI 라도
저속의 하드라면 SCSI 에 RAID 를 사용하는 것도 방법이 될
수 있겠습니다.

그 밖에도 여러가지 요소가 시스템을 버벅거리도록 만들 수
있겠지만, 일단 보여주신 자료로는 지금 말한 정도로 추측이
가능하겠습니다. 자세한건 이름을 알 수 없는 님께서 직접
자료를 찾아서 해결하시기 바랍니다.

익명 사용자의 이미지

그냥..열심히 책 보세염..

댓글 달기

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