CPU 시간을 많이 차지하는 프로세스를 비대화식으로 식별합니다.

CPU 시간을 많이 차지하는 프로세스를 비대화식으로 식별합니다.

이상한 문제가 있습니다. 가끔 모니터가 꺼지면 팬이 크게 돌아가는 경우가 있습니다. 제가 이해한 바로는 시스템의 CPU 사용량이 높지 않아도 됩니다.

그러나 마우스를 움직여 이 문제를 진단하기 시작하면 top어떤 활동이든 팬과 함께 중지됩니다.

그래서 나는 특정 시점에 시작할 수 있고 프로그램이 프로세스의 CPU 활동을 기록하는 동안 컴퓨터를 무인 상태로 둘 수 있는 스크립트/프로그램/방법을 원합니다. 그런 다음 컴퓨터 작동을 재개하면 프로그램을 읽을 수 있어야 합니다. 그것으로부터 팬들이 어떤 프로세스를 진행하고 있는지에 대한 보고서가 곧 제공될 예정입니다.

편집: chromium화면이 꺼졌을 때 팬이 크게 돌아가는 프로세스가 있습니다. 하지만 이유를 모르겠습니다.

답변1

검색을 단순화하기 위해 loadavg의 기본 덤프와 함께 "ps"를 몇 초마다 실행할 수 있습니다. "psdump.sh"로 저장하고 실행 가능하게 만듭니다 chmod +x psdump.sh.

#!/bin/bash

while true; do
    sleep 15
    date
    cat /proc/loadavg
    ps Swaux | awk '$3!=0.0 {print}'
done

터미널에서 스크립트를 실행하여 파일에 저장하고 백그라운드로 이동할 수 있습니다.

/home/lserni/psdump.sh > /home/lserni/psdump.log

그럼 기다리세요. 파일은 다음과 유사하게 나타납니다.

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  5.0  0.0 185412  5272 ?        Ss   Jan30 15340:14 /lib/systemd/systemd --system --deserialize 27
root        63  1.6  0.0      0     0 ?        S    Jan30 5042:59 [kswapd0]
root      1930  1.5  0.0  29008  2464 ?        Ss   Jan30 4816:50 /usr/sbin/cron -f
root      7446  0.1  0.0 3964564 60880 ?       Sl   Jan30 425:27 /opt/dell/srvadmin/sbin/dsm_om_connsvcd -run
mysql     7509  3.3 57.3 41322444 37757724 ?   Ssl  Aug17 599:39 /usr/sbin/mysqld
root      9634 17.1  4.9 6141588 3234672 ?     Ssl  Jan30 52154:34 /usr/local/bin/antani

로그 파일은 CPU 비율이 0이 아닌 프로세스(하위 프로세스 포함)만 보고합니다. 관심을 가질 수 있는 열은 %CPU 및 누적 시간(열 3 및 10)입니다.

답변2

이렇게 하면 트릭을 수행할 수 있습니다.

Top에는 를 전달하기 위한 "배치" 모드가 있습니다 -b. 따라서 이 스크립트는 10초마다 상단 출력을 기록합니다.

#! /bin/sh

set -u

recording=/tmp/top_recording.txt

top_interval_seconds=10

top -b -d "$top_interval_seconds" > "$recording"

안타깝게도 처음 몇 개의 프로세스/작업을 제외한 모든 프로세스/작업이 중복되므로 Tr 및 Sed를 사용하여 보고서를 확인하고 생성된 각 스냅샷에 대해 상위 3개 프로세스만 남겨 두었습니다.

#! /bin/sh

set -u

recording=/tmp/top_recording.txt

regexp_first_few_lines='top'\
'[^\x00]*\x00'\
'[^\x00]*\x00'\
'[^\x00]*\x00'\
'[^\x00]*\x00'\
'[^\x00]*\x00'\
'[^\x00]*\x00'\
'[^\x00]*\x00'\
'[^\x00]*\x00'\
'[^\x00]*\x00'\
'[^\x00]*\x00'

export LC_ALL=C

< "$recording" \
   tr '\n' '\0' | \
   sed -E -e 's/\x00top/\ntop/g' | \
   sed -E -e 's/^('"$regexp_first_few_lines"')(.|\x00)*$/\1/' | \
   tr '\0' '\n' | \
   less

Less에서 CPU 활동이 높은 프로세스를 찾으려면 다음을 사용하세요.

/[0-9] [A-Za-z] ([^ ]| [^ ]|  [987])

관련 정보