OS [질문] free 메모리에서 Used가 너무 높게 나오는데, ps 명령어에는 사용율이 없습니다.
페이지 정보
작성자 OSworker 아이디로 검색 전체게시물 댓글 0건 조회 1,736회 좋아요 1회 작성일 24-02-19 22:06본문
안녕하세요
오늘은 얼마전 고객분에게로 부터 받은 질문을 여기에 쓰고자합니다.~
제가 리눅스를 했을때 부터 항상 듣던 메모리 사용량에 대해서입니다.
질문) Free로 볼때 사용량이 80% 이상인데, ps 명령어로 보면 그정도 사용양이 아닙니다. 왜그런건가요
메모리를 증설해야하나요?
참 쉬운 질문이면서도, 고객을 이해시키기 어려운 답변일수도있습니다~
그래서 오늘 메모리 사용량에 대해 알아보겠습니다~
# free -m
total used free shared buff/cache available
Mem: 128198 1907 126587 23 778 126291
Swap: 10239 0 10239
. total: 시스템의 전체 메모리 크기
. used: 현재 사용 중인 메모리
. free: 현재 사용 가능한 메모리
. shared: 공유 메모리 (일반적으로 사용되지 않음)
. buff/cache: 버퍼와 캐시 메모리로 사용되는 메모리 양
. available: 즉시 사용 가능한 메모리 (버퍼 및 캐시를 고려한 나머지 메모리)
이 출력에서 "used" 열은 현재 시스템에서 사용 중인 메모리 양을 나타내며, "free" 열은 현재 사용 가능한 메모리 양을 나타냅니다. "buff/cache" 열은 시스템에서 버퍼와 캐시로 사용되는 메모리 양을 보여줍니다.
따라서 "free" 명령어는 시스템의 메모리 사용량을 모니터링하고, 시스템 리소스 관리에 도움을 줄 수 있는 유용한 도구입니다.
=> 제 테스트 서버는 128G 메모리입니다. 현재 돌아가는 프로그램이 없어서 사용량이 적은데요.
현재 used 가 1.9G 정도로 보여집니다. 하지만 실제로 사용양을 계산하는 방법은
------------------------
# man free
used Used memory (calculated as total - free - buffers - cache)
------------------------
. free manpage에서 보여지는것처럼 total - free - buffers - cache 입니다. // 옛날 버전이라 available 이 없습니다. free를 빼고 나머지를 빼주시면됩니다.
> 참고링크 : https://access.redhat.com/solutions/58689
128198 - 23 - 778 - 126291 = 1,106 위 used 1907과 거의 2배 차이가 납니다.
그럼 이 값이 맞는지 확인 해보겠습니다.
# ps -aux | tr -s ' ' | awk 'BEGIN{sum=0}{ sum+=$6 }END{print sum}'
1393424 // 약 1.39G가 나옵니다.
- 아래의 물리적 실제 메모리 값인 RSS를 합한 값입니다.
# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
. VSZ: 가상 메모리 크기입니다. 이 값은 프로세스가 사용하는 모든 메모리(실제 메모리 및 스왑 공간)의 크기를 나타냅니다.
. RSS: 실제 메모리 사용량입니다. 이 값은 프로세스가 실제 메모리에서 사용하는 양을 나타냅니다.
# cat /proc/meminfo
MemTotal: 131275604 kB
MemFree: 129636148 kB
MemAvailable: 129333092 kB
Buffers: 5800 kB
Cached: 739268 kB
> total - free(or MemAvailable) - buffers - cache 계산법
131275604 - 129333092 - 5800 - 739268 = 1,197,444 약 1.19G
이렇게 계산을 하면 현재 실제로 사용하는 메모리 값을 계산할수있다.
하지만, 각 회사에서 사용하는 모니터링 솔루션에서는 대부분 Buffers+Cached 를 합하여 그래프로 보여줍니다.
그래서 명령어로 확인되는 메모리양과 모니터링 솔루션에서 보여지는 그래프와 차이가 있습니다.
(이부분은 모니터링 솔루션 업체에 메모리 계산법을 문의하셔야합니다.)
그런데~~~~~!!!!!
만약 물리서버를 사용하지 않고, VMWARE 같은 가상화 Hypervisor를 사용하신다면 말이 조금 달라집니다.
- 참고링크 : https://access.redhat.com/mt/ko/solutions/43729
-------------------------------------
위 내용을 보시면 VMWARE를 사용할 시 RHEL VMware 게스트의 메모리 사용량을 계산할 수 없다고 나와있습니다.
그 이유는 VMware 메모리 제어 드라이버로 인해 발생합니다.vmmemctl.ko " 또는 "vmware_balloon.ko " 모듈.
- ESX 서버의 메모리 로드가 과도한 경우와 같은 일부 상황에서는 서버가 vmmemctl 모듈을 제어하여 "물리적" 메모리에 게스트 메모리를 할당하고 고정합니다.
- 그러면 이러한 "물리적" 메모리 영역을 ESX 서버에서 회수할 수 있습니다. 이 기능을 "풍선 표시"라고 합니다. 풍선을 팽창시키면 메모리 압력이 증가하고, 메모리 압력이 증가하면 커널이 메모리 페이지를 스왑 공간으로 페이지 아웃할 수 있습니다. vmmemctl 모듈에는 게스트 OS 내에 외부 인터페이스가 없습니다. 개인 채널을 통해서만 ESX 서버와 통신합니다. 따라서 vmmemctl에 의해 할당된 메모리는 게스트 OS에서 계산할 수 없습니다.
-------------------------------------
> 확인 방법
# modinfo vmmemctl
or
# modinfo vmware_balloon
그러니 VMWARE 사용하시는 고객분들은 메모리 걱정을 많이 안하셔도 됩니다~~ 자연스러운 일이라고합니다~^^
혹, 운영중에 궁금한 사항들이 있으시면 댓글로 남겨주세요~
감사합니다.
댓글목록
등록된 댓글이 없습니다.