리눅스 top virt res shr 명령어 옵션 정리해봤습니다

리눅스에서 자주 사용하는 명령어 중에 하나가 바로 top 명령어 입니다. 전반적인 시스템 프로세스의 사용량 및 부하 상태 등을 확인해볼 수 있는 툴 입니다.


하지만 자주 사용하는 명령어라고 할 지라도 명령어 옵션을 정확하게 기억하지 못하는 경우가 많습니다. 오늘은 그래서 저도 다시 한번 되짚어 보기위해서 리눅스 명령어 옵션에 대해서 정리했습니다.


일반적으로 리눅스 명령어중에서 기능이나 사용법을 잘 모르신다면, man top 이런식으로 명령어를 입력하게되면 top에 대한 메뉴얼을 확인해볼 수 있습니다.


1) man이라는 명령어는 manual 의 약어 입니다. 때문에 man top 이라고 터미널에 입력해 보도록 합니다. 그럼 그림과 같이 man의 이름, 기능, 명령어 등 다양한 설명이 적혀 있습니다. 물론 영어로 설명되어 있긴 하지만 정확한 내용들이기 때문에 참고하시면 좋겠습니다.



2) 자주 봐야되는 top의 옵션중 virt res shr 에 대한 명령어도 함께 보실수 있습니다. virt 명령어의 경우 Virtual Image라고 해서 가상메모리 입니다.


조금 더 설명을 드리면 자신이 사용 중인 메모리의 총량으로 자기 자신에게로 연결된 메모리, 자신에게 연결된 디스크의 파일(대부분은 공유 라이브러리입니다), 다른 프로세스와 공유 중인 메모리를 포함하고 있습니다. VIRT는 지금 순간에 프로그램이 얼마나 많은 메모리에 접근할 수 있는지를 표현하는 것입니다.



res 같은 경우에는 Resident Size의 약자로 프로세스가 점유 중인 실제 물리 메모리의 정확한 양을 뜻합니다. 이 때문에 %MEM과 직접적으로 연관 있는 명령어 입니다.


shr의 경우에는 virt 중 공유 메모리나 라이브러리가 차지하는 크기를 뜻합니다.



그밖에도 pid, user, pr, ni, %cpu, $men, time+, command 등 다양한 명령어가 있지만, 모두 설명하려면 지루해지고 길어지기 때문에 3가지만 설명드렸습니다.


3) 제가 예를 들어 top 사용량을 하나 설명드리겠습니다. 사진에 보이는 서버의 경우 889일동안 서버 리부팅을 진행하지 못했고, 총 506개의 프로세스가 동작중에 있습니다.



mysql라는 유저가 mysql라는 서비스를 대부분 사용하고 있는데, 평균부하량도 7점대 이상이어서 높은편에 속합니다. 위에서 설명드렸던 virt, res, shr 같은경우에도 굉장히 높은 편인데, 아마도 메모리를 오랜시간 점유하고 있다보니 평균부하량이 높아지고 있는거 같습니다.


이런 서버의 경우 어떤 특정 쿼리 작업을 반복적으로 실행하고 있기 때문에 그만큼 메모리 사용량이 줄어들지 않고, 지속적으로 쌓이고 있는 상황입니다. 다행이 리얼메모리가 32G이기 때문에 직접적인 서비스에는 큰 지장은 없을거 같습니다.


이러한 문제를 잠시나마 해결하려면, mysql 재시작을 통해서 메모리 초기화를 해주는게 좋습니다. TIME+시간을 보게되면 무려 304472분동안 동작중에 있는 모습입니다.


리눅스 시스템 환경에서 개발, 모니터링, 서버관리등을 하시는분들이라면 자주 사용하는 top명령어에 대해서 간단히 살펴봤습니다.