CPU時間列の「ps aux」の奇妙な動作

CPU時間列の「ps aux」の奇妙な動作

定期的に「ps aux」を実行し、次の形式で値を出力します。

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

わかったら時間累積CPU時間は、累積がプロセスに費やされた合計CPU時間を表すことを意味します。ここでは、この値が時間の経過とともに増加する可能性があると仮定します。しかし、私は実際の価値があります落ちる(PIDは変更されていないため、プロセスが再起動されなかったことを意味します)。

生成されたデータ(最後の列の前に問題がある)の例は次のとおりです。

2017-08-04T07-05-01 user  16493  0.3  0.4  59536 28416 ?        Sl   Aug01  15:33 /usr/local/myprocess
2017-08-04T07-10-01 user  16493  0.3  0.4  59536 28416 ?        Sl   Aug01  15:34 /usr/local/myprocess
2017-08-04T07-15-01 user  16493  0.3  0.4  59536 28416 ?        Sl   Aug01  15:35 /usr/local/myprocess
2017-08-04T07-20-01 user  16493  0.3  0.4  59536 28416 ?        Sl   Aug01  15:37 /usr/local/myprocess
2017-08-04T07-25-01 user  16493  0.3  0.4  59536 28416 ?        Sl   Aug01  15:38 /usr/local/myprocess
2017-08-04T07-30-01 user  16493  0.3  0.4  59536 28416 ?        Sl   Aug01  15:39 /usr/local/myprocess
2017-08-04T07-35-01 user  16493  0.3  0.4  59536 28416 ?        Sl   Aug01  15:40 /usr/local/myprocess
2017-08-04T07-40-01 user  16493  0.0  0.4  60560 29608 ?        Sl   Aug01   1:21 /usr/local/myprocess
2017-08-04T07-45-01 user  16493  0.0  0.4  60560 29608 ?        Sl   Aug01   1:21 /usr/local/myprocess
2017-08-04T07-50-01 user  16493  0.0  0.4  60560 29608 ?        Sl   Aug01   1:21 /usr/local/myprocess
2017-08-04T07-55-01 user  16493  0.0  0.4  60560 29608 ?        Sl   Aug01   1:22 /usr/local/myprocess
2017-08-04T08-00-01 user  16493  0.0  0.4  60560 29608 ?        Sl   Aug01   1:22 /usr/local/myprocess
2017-08-04T08-05-01 user  16493  0.0  0.4  60560 29608 ?        Sl   Aug01   1:22 /usr/local/myprocess
2017-08-04T08-11-01 user  16493  0.0  0.4  60560 29608 ?        Sl   Aug01   1:22 /usr/local/myprocess
2017-08-04T08-15-01 user  16493  0.0  0.4  60560 29608 ?        Sl   Aug01   1:22 /usr/local/myprocess
2017-08-04T08-20-01 user  16493  0.0  0.4  60560 29608 ?        Sl   Aug01   1:22 /usr/local/myprocess

cronjobで実行され、私のデータを生成するスクリプト全体は次のとおりです(実際のプロセス名のみ)。

#!/usr/bin/env bash

proc_names="MyProcessToWatch1 MyProcessToWatch2 MyProcessToWatch3"
current_date=$(date "+%Y-%m-%dT%H-%M-%S")
hostname=$(hostname)

for proc_name in ${proc_names}
do
    procs_to_watch=$(ps -ef | grep "${proc_name}" | grep -v grep | grep -v vi | grep -v tail | grep -v less | grep -v "ps -" | awk '{print $2}')
    for proc_id in ${procs_to_watch}
    do
        proc_start_ts=$(ls -ld --time-style=+"%Y-%m-%dT%H-%M-%S" /proc/${proc_id} | awk '{ print $(NF-1) }')
        log_file="/tmp/performance_data/performance_${proc_name}_${proc_start_ts}_${hostname}_${proc_id}.log"
        echo -n "${current_date} " >> ${log_file} 2>&1
        ps aux | grep "${proc_name}" | grep ${proc_id} >> ${log_file} 2>&1
    done
done

関連情報