-
LINUX 특정 프로세스 CPU 점유율 확인하는 방법System of Infra/Linux System 2022. 12. 29. 20:18728x90반응형
LINUX 특정 프로세스 CPU 점유율 확인하는 방법
LINUX#lscpu | grep -i socket Core(s) per socket: 8 Socket(s): 1
▶ 리눅스 시스템의 CPU와 소켓당 Core를 확인합니다. 테스트 환경에서는 1 CPU에 8 core라는 것을 확인할 수 있습니다.
LINUX#grep "cpu cores" /proc/cpuinfo | tail -1 8
▶ 마찬가지로 /proc/cpuinfo 항목에서 8core 인 것을 확인할 수 있습니다.
LINUX#grep -c processor /proc/cpuinfo 16
▶ 기본적으로 리눅스 시스템에서는 물리적인 Core 보다 하이퍼스레딩 개념으로 2배의 논리적 Core를 사용하도록 합니다. 물리적으로는 8 core지만 시스템에서는 논리적으로 2배인 16 core처럼 사용하게 됩니다.
LINUX#sar 1 14:30:42 PM CPU %user %nice %system %iowait %steal %idle 14:30:43 PM all 13.37 0.00 7.16 0.00 0.00 79.47 14:30:44 PM all 26.88 0.00 3.89 0.00 0.00 69.22 14:30:45 PM all 5.83 0.00 0.63 0.00 0.00 93.55 14:30:46 PM all 28.27 0.00 4.33 0.00 0.00 67.40
▶ sar 명령어를 통해서 1초당 CPU의 평균 사용률을 보게 되면 13.37 ~ 28.27까지 초당 가변적으로 변하는 것을 확인할 수 있습니다. 다만 특정 프로세스의 점유율이 높거나 과부하로 인한 시스템의 hang 증상이 발견할 경우 어떤 프로세스에서 많이 점유하고 있는지 확인이 필요한 경우가 있습니다.
LINUX#top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ 125331 oracle 20 0 32.6g 28.7g 10176 S 227.6 46.0 30354:36
▶ 리눅스 시스템에서 기본적으로 제공하는 top 명령어 입니다. 시스템의 전반적인 상태를 모니터링할 수 있습니다. top 명령어를 통해 shift + c 옵션을 사용하게 되면 현재 프로세스의 항목들이 나열되면서 PID 부분을 통해서 어떤 유저가 어떤 프로세스를 점유하고 있는지 확인할 수 있습니다.
LINUX#nmon CPU User% Sys% Wait% Idle Avg 20.6 2.1 0.0 77.3
▶ top 뿐만 아니라 IBM에서 제공하는 nmon 설치파일을 통해서 시스템의 전반적인 상태를 모니터링 할 수 있습니다.
nmon 명령어를 통해 c 옵션을 사용하게 되면 Avg의 User% 항목에서 20.6%를 전체적으로 사용하는것을 확인할 수 있으며, 2초당 가변적으로 나타내기 때문에 일부 차이는 있지만 sar 2 명령어와 동일하다고 보시면 됩니다.
현재 시점으로 전체 20.6%의 비율을 나타냅니다.LINUX#nmon PID %CPU Size Res Res Res Res Shared Faults Command Used KB Set Text Data Lib KB Min Maj 125331 267.1 33430m 29413m 57260 33295m 0 10176 305 0 oracle 141394 35.5 3106m 517m 24524 2963m 0 18328 67 0 java 28688 34.5 3257m 448m 24524 3114m 0 18372 0 0 java 28675 33.0 3047m 390m 24524 2904m 0 18312 291 0 java
▶ nmon 명령어를 통해서 +t 옵션을 사용하게 되면 oracle 커맨드를 통해서 %CPU Used의 값이 267.1%의 수치를 보여주게 됩니다. CPU의 %는 100% 이지만 앞서 말씀드린 것처럼 하이퍼스레딩으로 인한 논리 Core로 인해 실제 물리 CPU 기준으로 점유율을 확인하기 위해서는 백분율 계산이 필요합니다.
267%의 현재 CPU 사용률을 보이는건 논리적 CPU 스레드로 인해서 나타내는 %입니다LINUX#ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head PID PPID CMD %MEM %CPU 125331 1 /usr/Data/DB/oracle 46.0 73.7 ...(이하 생략)
▶ ps 명령어를 통해서 pid, ppid, cmd 등 특정 필드를 지정하여 head로 출력하게 되면 위에서부터 출력이 됩니다. cpu를 기준으로 sort를 통해 내림차순으로 출력이 됩니다.
그렇다면 앞선 과정에서 227%라고 했지만 ps 명령어를 통해 출력된 값을 보게 되면 73.7%의 점유율을 볼 수 있게 되는데 이 결과 값은 현재 시점으로 73%의 사용률을 나타내는 것을 의미하지는 않습니다.
오름차순: 작은 것부터 큰 것으로 가는 순서
내림차순: 큰 것으로부터 작은 것으로 가는 순서#ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head | awk '{print "ps -p",$1,"-o lstart"}' | sh -v ps -p 125331 -o lstart STARTED Thu Dec 1 02:18:02 2022
▶ oracle의 경우 12월 01일 기준으로 현재까지 지난 시간에 대한 %를 73% 점유를 했다는 것을 의미합니다.
★계산법★
1600% 중 267.1%라고 가정하면 16.68%가 해당 시점으로 oracle 프로세스를 사용하는 것을 의미합니다. 즉 전체 CPU의 상용량이 90%라고 한다면 그중 특정 프로세스가 16.68%를 점유한다는 것을 뜻합니다.
(267.1/1600)*100=16.68%
위와 같은 계산법으로 또 다른 프로세스의 %를 구하여 전체 CPU의 합계와 비교하면 어떤 프로세스에서 점유율이 높은지 추측할 수 있습니다.2021.09.16 - [System of Infra/LINUX] - LINUX NMON 설치 하는 방법
PS. 포스팅의 내용은 제 기준으로 작성한 것이기 때문에 참고해서 보시면 감사하겠습니다.
포스팅 과정의 오류 및 오타 그리고 궁금한 점에 대해서는 댓글 남겨주세요.
728x90반응형'System of Infra > Linux System' 카테고리의 다른 글
LINUX SSH 접속시 Redhat insight 문구 삭제 하는 방법 (0) 2023.07.10 LINUX Virbr0 어댑터 삭제하는 방법 (6) 2023.02.16 LINUX 본딩(Bonding) 네트워크 이중화 설정하는 방법 (17) 2022.08.11 LINUX Hostname 변경하는 방법 (6) 2022.08.09 LINUX DNS Primary IP -> Secondary IP 변경하는 방법 (4) 2022.08.04