top에서 나온 결과는 어떻게 해석을 해야 할까요?
현재, 저희가 맡은 프로젝트 서버가 제온4cpu에 4기가 ram 을 가지고 있습니다. 그 서버에 사이트는 두곳 정도 돌고 있는 것으로 알고있구요.
저희사이트 쪽은 apache2 + tomcat4.1.27 이구요.
다른 쪽은 그냥 apache 만 돌고 있습니다.
일반 계정을 받아서 프로그램을 올리는것까지만 저희쪽 담당이고, 나머지 서버 관리같은건 다른쪽에서 담당하고 있는 상태입니다.
문제는 유저도 그리 많지 않은 사이트가 종종 죽는다는 것인데, 메모리 관련 에러가 몇번 나왔습니다. Out of memory Exception 같은거요.
top 를 해보니, 가용메모리가 (freed) 30~40M 정도만 남았더라구요. 톰캣을 stop 시키니까 150 정도로 늘어나더군요.
서버 담당쪽에 문의를 해봤습니다. 그랬더니
"리눅스는 캐쉬를 해서 필요할때 메모리를 할당해주기 때문에, free 로 남은 숫자는 신경쓰지 않아도 된다" 라고 하더군요.
Mem: 3874128k av, 3862368k used, 11760k free, 0k shrd, 207308k buff 2986084k actv, 40k in_d, 88060k in_c Swap: 1048568k av, 509388k used, 539180k free 1042092k cached
방금전에 top 해본 결과입니다.
이걸 어떻게 해석을 해야 될까요? 남은 메모리는 얼마인지, 실행될 프로그램이 사용할 수 있는 용량은 얼마나 되는지, 잘 모르겠네요.
그리고, 저희쪽 톰캣 말고 다른 사이트의 데몬중에 이런게 있는데,
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND 19309 ****** 15 0 978M 814M 5920 S 8.5 21.5 18:50 1 httpd
이건 그냥 그대로 978M의 메모리를 먹고 있다고 보면 되는건가요?
p.s. httpd 가 1기가 넘게 리소스를 먹는 경우가 자주 있을까요? 제가 볼때 저 사이트가 저정도로 크지는 않다고 보고 있거든요..
buffer/cache를 제외한 메모리 사용량은 free 명령어로 보실
buffer/cache를 제외한 메모리 사용량은 free 명령어로 보실 수 있습니다.
--feanor
메모리 에러 관련해서, JVM 버전이 무엇인가요?
메모리 에러 관련해서, JVM 버전이 무엇인가요?
----
I paint objects as I think them, not as I see them.
atie's minipage
.
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)
입니다.
WaitplzplzWait
혹시나 1.4.1이길 했는데, memory leak이 있다는 이야기가 있
혹시나 1.4.1이길 했는데, memory leak이 있다는 이야기가 있어서...
동일 프로그램을 windows나 linux가 깔려 있는 PC에 설치해 놓고 jprobe 같은 profiler를 써서 코드를 검사해 보는게 어디가 문제가 있는지 빠르게 찾을 수 있는 방법일것 같군요. jprobe에 대한 링크 이고요, 여러 다른 툴도 아래 사이트에서 찾아 볼 수 있습니다.
http://www.javaperformancetuning.com/tools/jprobe/index.shtml
메모리는, 코드에 rt=Runtime.getRuntime(), rt.freeMemory() 해서 찍어보면 될 것 같고, top이 보여주는 free memory는 cached가 많이 잡혀있는 것으로 보아 신경쓰지 않아도 될 듯 합니다.
----
I paint objects as I think them, not as I see them.
atie's minipage
댓글 달기