우리는 다양한 종류의 서비스를 위해 서버라는 녀석을 사용한다. 그리고 그 서버를 많드는 많은 벤더들이 존재하며, 그 서버를 유지보수하고 최적의 상태를 만들기위해 튜닝하기도한다. 게다가 평소에는 수시로 cpu와 메모리의 사용량을 모니터링하여 서버가 힘들어하지 않는지 제대로 퍼포먼스가 나오고 있는지를 주시하고 있다.
자, 그럼 좋은 성능을 내기위해 서버에서 우리가 관심을 가지고 봐야하는 부분은 무엇인가?
사실 우리는 많은 명령어들을 알고 있고 그 명령어를 다룰줄 안다. 하지만 무엇을 중점적으로 봐야하는지 알지 못하는 상태에서는 그저 모니터링 도구의 하나일 뿐 그 정보를 통해 서버의 성능을 향상시키거나 최적화 시킬수는 없다. 쉽게 말해 cpu사용량이 높으면 서버가 일을 많이 하는구나~ 이렇게 생각할 뿐이고, cpu 사용량이 높을 이유가 없는데 높으면 어떤 프로세스가 cpu 사용량을 잡아먹고 있구나~ 정도로만 생각을 한다.
음.. 무언가 너무 막연하지 않은가? 좀 더 명확히, 좀 더 직관적으로 볼 수 있어야 하지 않을까?
지금부터 좀 더 직관적으로 서버를 볼 수 있도록 가장 핵심적인 부분에 대해서 언급하려한다.
우리가 봐야할 정보들
1. CPU
- 총 CPU사용률, 시스템 모드 사용률, 사용자 모드 사용률, Run Queue, Pri Queue, 사용자수 등
2. 메모리
- 총 메모리 사용률, 시스템 버퍼 캐쉬, Page In/Out, Swap 공간 사용률 등
3. 디스크
- Disk 사용률, Disk I/O Busy, Disk Queue
4. 프로세스
- CPU를 집중적으로 사용하는 프로세스, Zombie 프로세스
5. 커널
- 커널 파라미터 설정을 통한 자원의 적절한 분배
6. 파일시스템
- 파일시스템 I/O Rate, 파일시스템 공간 사용률
7. 네트워크 I/O
- In 패킷률, Out 패킷률, Collision율, Error율
먼저 각각의 항목이 의미하는게 무엇인지를 알아야겠지?
각각의 항목을 측정할 수 있는 도구마련 혹은 명령어가 있는지 확인해야겠지?