ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LINUX 특정 프로세스 CPU 점유율 확인하는 방법
    System of Infra/Linux System 2022. 12. 29. 20:18
    반응형

    LINUX 로고이미지

    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 설치 하는 방법

     

    LINUX NMON 설치 하는 방법

    LINUX NMON 설치하는 방법 [root@TEST01 /]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) -> NMON을 설치하기전에 해당 서버의 버전을 확인합니다. 버전에 따라서 다운로드 RPM의 버전이 다르기 때문에 해

    pinetreeday.tistory.com

     

    PS. 포스팅의 내용은 제 기준으로 작성한 것이기 때문에 참고해서 보시면 감사하겠습니다.

    포스팅 과정의 오류 및 오타 그리고 궁금한 점에 대해서는 댓글 남겨주세요.

    반응형

    댓글

Designed by Tistory.