[linux] 리눅스 top 명령어 (활용 예)
- 2 minstop
리눅스에서는 top 명령어를 통해 시스템의 다양한 자원 상황을 모니터링 할 수 있다.
CPU 점유, 메모리 누수, 좀비 프로세스, 과도한 Disk I/O 등등 여러 방면으로 활용 가능하다.
그리고 top 명령으로 문제를 파악한 이후, 문제 해결을 위해 활용해야하는 다양한 명령어 또한 존재한다.
이를 모두 알고있을 필요는 없고, 본인의 상황에 맞게 적절하게 찾아서 사용하면 된다.
이렇듯 top 명령어로 할 수 있는 일은 너무 많기때문에,
주로 내가 겪는 특정 상황을 예로 들어 활용 예시를 정리하도록 하겠다.
상황 및 활용 예시
실무 상황을 예로 든 것이라 다소 생소한 용어들이 등장할 수 있는데,
최대한 간결하게 설명하도록 노력해보겠다.
나는 주로 분산 DB를 관리하며, 대용량 데이터를 서버에 적재하는 작업을 할 때가 종종있다.
분산 DB이므로 대용량의 데이터를 다수의 데이터 노드가 나누어 적재 작업을 하게 된다.
(HDFS 동작 매커니즘을 아시는 분은 그것을 생각하면 된다)
적재 작업을 시작했는데, 좀처럼 작업이 끝나지 않는다.
마스터노드에서 각 데이터노드의 상태를 모니터링 해보니,
특정 데이터노드의 자원 사용량이 좀처럼 떨어지지 않는다.
그럼 해당 데이터노드에 접속해서 top 명령어를 입력한다.
위에 빨간 색으로 표시한 부분이 내가 유심히 관찰하는 부분들인데,
%CPU와 %MEM은 말그대로 해당 프로세스의 CPU와 MEM 사용률이고, wa는 Disk I/O wait을 의미한다.
단순히 CPU와 MEM 사용률이 높아졌을때는 뭔가 열심히 일하고 있다는 뜻이므로 조금 기다린다.
하지만 wa 수치가 올라갔을때는 이야기가 다르다.
Disk I/O Wait이 발생한다는 것은 다음과 같은 상황일 가능성이 높기 때문이다.
대용량 데이터를 여러 데이터 노드에 나누어서 적재하게 되는데,
특정 데이터 노드의 저장 공간이 가득 차버려서 데이터가 더이상 적재되지 못하는 상황이 발생할 수 있다.
그럼 데이터를 적재하는 프로세스는 여유 공간이 생길때까지 계속 대기를 하게되고,
이 대기가 지속되면 결국 메모리 swap이 발생한다.
메모리 swap이란,
특정 시간 이상 메모리를 점유한 프로세스가 존재할 경우,
CPU가 스케줄링 정책에 의해 이 프로세스를 잠시 보조 메모리로 내리는 현상을 말한다.
근데 여기서 말하는 ‘보조 메모리’는 주로 ‘하드 디스크’를 의미하므로,
프로세스가 RAM과 하드디스크를 왔다갔다 하는 과정에서 자연스럽게 Disk I/O Wait이 발생할 수 밖에 없다.
즉, top 명령어에서 ‘wa(I/O Wait)’ 수치가 올라간다는 것은 swap이 발생했다는 뜻이고,
swap이 발생했다는 뜻은 해당 노드에 문제가 있다는 것을 의미하므로,
나의 경우 top 명령어에서 ‘wa’는 시스템을 모니터링하는데 있어서 매우 중요한 지표이다.
물론 무조건 swap이 발생할 경우에만 wa 수치가 올라가는 것도 아니고,
어떤 시스템에서는 wa 수치와 상관 없이 CPU, MEM 점유율이 가장 크리티컬한 지표가 될 수도 있다.
중요한건,
- 본인이 관리하는 리눅스 시스템 환경과 작동하는 프로세스를 정확히 파악하고 있고,
- top 명령어의 각 요소와 특정 프로세스 동작간의 상관관계를 이해하고 있다면,
이런식으로 top 명령어를 활용해 빠르고 효율적인 시스템 자원 관리가 가능하다는 것이다.