문제가 발생한 시점에 성능 데이터를 확인하는 것은 어렵기 때문에 성능을 기록하는 도구를 사용하게 됩니다.

Linux에서는 sysstat를 사용하고 Windows 에서는 Perfmon을 사용합니다.


-------------------------------------------------------- Linux 도구 --------------------------------------------------------

SAR

리눅스에서는 sysstat 패키지를 설치하고 sysstat을 활성화 하면 /var/log/sysstat 또는 /var/log/sa에 성능을 기록합니다.

Install

sudo apt-get install sysstat


enable

sudo vi /etc/default/sysstat

ENABLED="false"를 ENABLE="true" 로 변경


수집 주기를 10 분에서 2분으로 변경

sudo vi /etc/cron.d/sysstat

5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1 을

*/2 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1 로 변경


sysstat 재시작

sudo service sysstat restart


정보 수집

sar 


제 시스템의 경우 /var/log/sysstat/sa16 이라는 파일에 데이터가 저장되었는데 cat으로 내용이 보이지 않는 것으로보아 바이너리로 저장되는 것 같습니다.

블로그를 작성하는 날짜가 16일 이어서 sa16으로 기록되었습니다. 로그 파일이 어느 정도 오랬동안 저장되는지? 한달이 지나면 숫자가 반복되면서 overwrite 되는 것인지는 아직 확인하지 못했습니다.


sar 명령을 실행하니 CPU의 상태 정보가 기록되어 있습니다. 2분 단위로 자료 수집이 된것을 확인할 수 있습니다.


sar -r을 사용하면 메모리의 상태를 확인할 수 있습니다. 


sar -b를 사용하면 IO 상태를 확인할 수 있습니다.


sar에 -s 와 -e 인자를 사용해서 시작, 끝 시간을 지정할 수 있습니다. 


sar 옵션은 아래와 같습니다.




-------------------------------------------------------- Windows 도구 --------------------------------------------------------

Perfmon

Linux에 Sar이 있다면 Windows에는 perfmon이 있습니다.

시작 - 실행 - perfmon - 성능 모니터를 실행하면 아래 그림과 같이 Memory, Network Interface, PhysicalDisk Processor Information에 대한 정보를 보여 줍니다. (성능 모니터로 CPU 정보를 확인하실 때 Processor 가 아니고 Processor Information을 선택 하셔야 합니다. Processor 는 NUMA를 지원하지 않기 때문에 CPU 가 많이 장착된 시스템에서는 올바른 정보를 보여주지 못합니다.)


주기적으로 정보를 수집하고 저장하기 위해서는 사용자 정의 데이터 수집기 집합을 사용해야 합니다. (logman 명령을 사용해서 데이터 수집기 집합을 만들수도 있으니 다음 블로그를 참고 하세요 https://blogs.technet.microsoft.com/yongrhee/2015/05/16/setting-a-local-perfmon-in-a-windows-client-or-windows-server/) 

성능 로그 보다 더 상세한 정보 수집을 위해 System Diagnostics를 선택 합니다. 


데이터 파일이 저장될 위치를 확인할 수 있습니다. 수집된 데이터 파일을 다른 장비로 가져가서 분석 가능 합니다.


기본적으로 수집되던 성능 로그 이외에 많은 항목들이 추가 되어 있습니다. NT Kernel은 커널 정보를 추적하는 것이고 Performance Counter는 전통적인 성능 로그 그리고 구성 유형은 시스템의 각종 구성 정보를 수집하는 것입니다.


전체 자료 수집 시간은 10분 이고 1분에 한 번씩 정보를 수집 합니다.


10분이 지나면 아래와 같이 보고서 - 사용자 장의 - [정의한 이름] 아래에 시스템 성능 구성 정보를 보여줍니다. 각 구성 요소에 대한 점검을 진행하고 구성  또는 성능에 문제가 있는지를 확인해줍니다.


디스크 항목을 자세히 확인해보니 입축력이 가장 많은 파일, 디스크에 대한 IO 정보, NTFS 성능에 영향을 주는 구성 정보를 보여줍니다.


템플릿을 사용하면 시스템 구성 정보 등 더 많은 정보를 보여주는데 데이터 수집기 집합을 만들 때 수동으로 만들기를 선택 한 후 성능 카운터를 수집하도록 하면 sar와 비슷하게 성능 정보만 수집할 수 있습니다.


sar와는 다르게 perfmon은 어떤 데이터를 수집할지 선택할 수 있습니다. 각 카운터에 대해서 잘 알지 못한다면 아래 "설명 표시"를 클릭하면 해당 카운터에 대한 설명을 확인할 수 있습니다.


주의) 성능 로그가 3일 이상 수집이 되지 않을 경우 Task Scheduler - Task Scheduler Library - Microsoft - Windows - PLA의 설정에 "다음 시간 이상 실행되면 중지 3일" 이 설정되어 있는지 확인해야 합니다. Windows Server 2012에서는 이 옵션이 설정되어 있어 3일 이상 실행되면 자료 수집이 멈추는 이슈가 있었습니다.


sar와 perfmon에 대한 비교를 마칩니다. 두 도구가 완전히 동일하다고 할 수는 없겠지만 주기적으로 시스템 성능 정보를 수집할 수 있다는 점에서 유용합니다.








'Windows & Linux' 카테고리의 다른 글

디스크가 가득 차는 경우  (0) 2018.12.15
부팅 과정 및 복구 (Grub)  (0) 2018.06.17
성능 모니터링 (sysstat, sar)  (0) 2018.06.16
IO 부하 (iostat, iotop)  (0) 2018.06.06
시스템 부하 (top)  (0) 2018.06.03
시스템 부하 확인 (uptime)  (2) 2018.06.02

오늘은 IO 부하에 대한 도구를 살펴보도록 하겠습니다.

성능 저하 현상이 발생하면 디스크에 어느 정도 부하가 걸려 있고 응답 속도는 어떻게 되는지, 어떤 프로세스가 많은 IO를 발생시키고 있는지 확인해야 합니다. 

-------------------------------------------------------- Linux 도구 --------------------------------------------------------

iostat  

iostat을 사용하면 CPU 사용률과 디스크 장치 및 파티션에 대한 IO 통계 정보를 보여 줍니다.

tps 는 초당 전송량, KB_read/s 는 초당 읽힌 KB, KB_wrtn/s 는 초당 쓴 KB, KB_read는 해당 장치에서 읽혀진 전체 KB, KB_wrtn은 해당 장치에 쓰여진 전체 KB 입니다. Windows 에서는 성능 모니터를 실행하지 않으면 시스템 시작 부터 현재까지의 IO 정보를 저장해 놓지 않는다는 점이 다른것 같습니다.

IO가 많이 발생한 장치에 어떤 파일들이 있고 Read 요청이 많이 발생하는지 Write 요청이 많이 발생하는지를 확인해서 문제 분석을 위한 방향을 잡을 수 있습니다.


iotop

iostat이 장치 단위로 정보를 보여 주었다면 iotop으로 모든 프로세스의 IO 통계를 볼 수 있습니다.

iotop을 실행했더니 보안 이슈 때문에 root 또는 NET_ADMIN capability가 있어야 한다고 되어 있습니다. Windows로 따져본다면 관리자 권한으로 실행 하거나 특정 user right이 있어야 한다는 의미로 보입니다. Linux에서 capability 라는 것은 Windows의 User right 라고 보면 될것 같습니다.

키보드 왼쪽, 오른쪽 키를 이동해서 헤더를 이동하면 해당 헤더 값으로 정렬이 됩니다.

--only 옵션을 사용하면 현재 IO를 하고 있는 프로세스만 보여주게 됩니다.

# sudo iotop --only 


-------------------------------------------------------- Windows 도구 --------------------------------------------------------

리소스 모니터

윈도우 에서는 perfmon /res 명령을 사용하거나 작업 관리자를 통해서 리소스 모니터를 실행할 수 있습니다.

iostat 과는 달리 장치별 Read/Write 값을 보여주지 않고 디스크 활성 시간, 큐 길이를 보여주고 iotop과 같이 각 프로세스의 Read/Write 값을 볼 수 있습니다.  어떤 파일에 Read/Write를 하고 있는지, 각 파일에 대한 IO 응답시간은 어떻게 되는지를 볼 수 있다는 점이 장점입니다. 파일에 대한 응답시간을 확인할 수 있기 때문에 특정 프로그램이 사용하는 파일에 IO 응답 시간에 문제가 있는지 확인할 수 있습니다.


성능 모니터

iostat, iotop과 같은 정보를 보려면 성능 모니터를 실행해야 합니다. 명령줄에서 perfmon을 실행하면되고 보기에서 보고서를 선택하면 기본 값인 선형 그래프가 아닌 숫자로 결과를 볼 수 있어 편리 합니다.


성능 모니터에는 아래 보이는 것과 같이 많은 데이터를 한 눈에 볼 수 있습니다. PhysicalDisk를 선택하면 물리 디스크에 대한 정보를 확인할 수 있습니다.


iotop과 같이 각 프로세스별 IO를 확인하려면 Process를 선택하면 됩니다. 아쉬운 것은 보고서 형식을 선택할 경우 프로세스 들이 가로로 나열되어 스크롤바를 이동해서 정보를 확인하는 것이 좀 불편합니다. 








'Windows & Linux' 카테고리의 다른 글

디스크가 가득 차는 경우  (0) 2018.12.15
부팅 과정 및 복구 (Grub)  (0) 2018.06.17
성능 모니터링 (sysstat, sar)  (0) 2018.06.16
IO 부하 (iostat, iotop)  (0) 2018.06.06
시스템 부하 (top)  (0) 2018.06.03
시스템 부하 확인 (uptime)  (2) 2018.06.02

첫 번째 글을 올리고 나서 이 블로그 내용은 리눅스 전문가 분들이 PC를 사용할 때 도움이 될거라고 생각 됩니다. Linux 전문가 분들께서 Linux를 사용할 때는 수많은 도구를 사용해서 문제 해결을 하실 수 있는데 업무를 위해서 PC를 사용하다가 문제가 발생하면 해결하는 것에 어려움을 느끼시는 것을 봤습니다. 여기 소개드리는 도구들을 사용하시면 Linux의 문제 해결 방법을 Windows의 도구를 사용해서 적용해 보실 수 있습니다.


지난번 블로그에 올렸던 uptime 보다는 top 명령을 더 많이 사용하는 것 같습니다. (uptime에서 보여주었던 동작시간, load average 도 top에서 보여주고 있습니다.) 


top (Linux)

top을 실행하면 시스템 정보를 한번에 살펴볼 수 있습니다. 시스템이 얼마나 오랫동안 실행되고 있는지, 평균 부하는 얼마나 되는지, 실행중인 프로세스에 대한 정보, 메모리 상태는 어떤지를 보여줍니다. Windows 에서는 이러한 정보를 보려면 Process Explorer 같은 도구를 설치해서 봐야 하지만 Linux에서는 OS에 포함되어 있는 도구로 한 눈에 보여주는 것이 좋은 것 같습니다. 각각의 정보에 대한 설명은 나중에 운영체제 커널을 비교하면서 설명하려고 합니다.

top 에는 wa 값이 있어서 CPU가 IO를 기다리면서 소비한 시간의 비율을 보여주고 있는데 Windows 에서는 해당 값을 보여주는 도구가 없습니다. (제가 못 찾은 것일수도 있습니다.) 그리고 st (steal time) 도 가상머신을 위해 다른 task에서 사용된 CPU 사용량이라고 되어 있는데 이 값 또한 Windows에는 없습니다.


top을 실행할 때 -c 옵션을 주면 프로세스의 전체 경로를 보여줍니다.


top에서는 여러가지 명령어를 제공하는데 

1) k를 입력하면 특정 프로세스를 종료할 수 있습니다.

2) 여러가지 키를 이용해서 프로세스 리스트를 정렬할 수 있습니다. (M은 메모리 사용량, P는 CPU 사용량, N은 프로세스 ID, T는 실행 시간)

3) V를 입력하면 프로세스의 부모 자식 관계를 보여 줍니다.

   

4) h를 입력하면 도움말을 보여 줍니다.

   



Taskmgr (Windows)

Linux에 Top 이 있다면 Windows 에는 taskmgr이 있습니다. taskmgr 를 실행하면 우선 시스템 전반적인 성능 정보를 한 눈에 볼 수 있습니다. Taskmgr은 운영체제 버전마다 조금씩 다르기 때문에 이 글에서는 Windows 10을 사용했습니다. 


성능 탭에서는 각각의 프로세스에 대한 정보를 보여주지 않기 때문에 세부정보 탭을 클릭해서 세부 정보를 볼 수 있습니다. 


Taskmgr 에서도 여러가지 추가 정보를 볼 수 있는데 컬럼 헤더를 마우스 오른쪽 클릭하면 열 선택 메뉴가 나오고 확인하고자 하는 정보를 선택하면 됩니다. 이전 Windows를 사용한다면 메뉴에서 보기 - 열선택 을 사용할 수 있습니다. 열 선택에서 명령줄을 선택하면 위에 보이는 것 처럼 프로세스의 전체 경로와 어떤 파라미터가 전달 되었는지 알 수 있습니다. svchost나 java 처럼 하나의 실행 파일이 다양한 방법으로 실행될 수 있을때 유용합니다.


top에서 프로세스를 종료 시킬 수 있는 것처럼 Taskmgr에서도 작업 끝내기로 프로세스를 종료할 수 있습니다. 그리고 덤프 파일 만들기로 프로세스의 덤프 파일을 만들 수 있고 서비스로 이동을 클릭하면 해당 프로세스의 서비스로 이동 합니다. svchost 처럼 하나의 실행 파일이 많은 서비스에 사용되고 있을때 유용하게 사용할 수 있습니다.


리소스 모니터(Windows)

메모리에 대한 좀 더 자세한 정보를 확인 하려면 리소스 모니터를 사용할 수 있습니다. 실행 방법은 두 가지가 있는데 하나는 taskmgr를 실행한 후 성능 탭을 클릭하면 아래쪽에 리소스 모니터 열기 버튼이 있습니다. 명령 줄로 실행하는 방법은 perfmon /res 명령을 실행하면 됩니다.


리소스 모니터의 CPU 탭을 선택하면 Process 들의 정보를 확인할 수 있습니다. 특정 프로세스를 선택하면 해당 프로세스에서 사용하고 있는 핸들 정보를 보여줍니다. (한글화의 문제인지 "연결된 핸" 이라고만 나오네요 TT) 여기서 핸들은 Linux의 FD라고 생각하시면 됩니다. 

핸들 검색에 파일명이나 핸들 정보 등을 넣어서 검색하면 해당 핸들을 사용하는 프로세스를 찾을 수 있습니다. 예를 들면 특정 디렉토리나 파일을 삭제 하려고 할때 다른 프로세스가 사용중이라고 하면 리소스 모니터의 핸들 검색을 통해서 해당 디렉토리나 파일을 사용하는 프로세스를 찾을 수 있습니다.


메모리 탭을 눌러보면 물리 메모리에 대한 정보를 보여주는데 사용중, 대기모드, 여유 등의 메모리 상태를 확인할 수 있습니다. 수정한 날짜는 잘못된 한글화 인데 실제로는 Modified 메모리로 수정된 메모리 입니다. 여유는 Free 메모리 입니다. 

Windows 에서도 가능한한 물리 메모리를 많이 사용하려고 캐시를 많이 사용하고 있습니다. 하지만 캐시 메모리는 언제든지 제거할 수 있는 것이기 때문에 사용 가능한 메모리로 계산 됩니다.


마지막으로 네트워크 탭을 누르면 각 프로세스별로 네트워크의 사용률, 보내고 받기를 하고 있는 주소, 포트 정보 등을 확인할 수 있습니다.




'Windows & Linux' 카테고리의 다른 글

디스크가 가득 차는 경우  (0) 2018.12.15
부팅 과정 및 복구 (Grub)  (0) 2018.06.17
성능 모니터링 (sysstat, sar)  (0) 2018.06.16
IO 부하 (iostat, iotop)  (0) 2018.06.06
시스템 부하 (top)  (0) 2018.06.03
시스템 부하 확인 (uptime)  (2) 2018.06.02

+ Recent posts