2012-01-03 8 views

答えて

111

、あなたはその後、top-pオプションに渡すプロセス名でPIDのリストを取得するためにpgrepを使用することができます。たとえば:

top -p $(pgrep -d',' http) 

注:-d','オプションがtop -pによって予想されるものである、カンマでPIDを区切ります。 注2:pgrepで指定した名前と一致する実行中のプロセスがない場合は、エラーメッセージを返します。top

topの結果をファイルに書き込むには、-n 1オプションを使用します(1回の反復のみ)。出力をログファイルにリダイレクトします。 sleepと毎秒、おそらくwhileループが何であろうと

top -p $(pgrep -d',' http) -n 1 >> your_log_file 

を行うには?

while :; do top -p $(pgrep -d',' http) -n 1 >> your_log_file; sleep 1; done 

各エントリをタイムスタンプに、あなたはdateの出力を追加することができます。例えば。

while :; do top -p $(pgrep -d',' http) -n 1 >> log.txt; date >> log.txt; sleep 1; done 
+0

どのように特定のプロセスで使用されたCPUとどのくらいの時間に私が分離するのに役立つように、ショーン、1秒ごとに日付と時刻を記録する方法。 – BalaB

+0

@bala答えの更新を参照してください。 –

+0

エレガントで非常に便利です。ありがとう! –

5

別のオプションは次のとおり

top -b -d 1 -p $(pgrep -d',' java) -n 120 > log.txt 
  • データをリフレッシュするためにトップによって使用される周波数を設定することを可能にする-dオプション。
  • オプション-bは、従来のtopのインターフェイスが使用されていないことを意味します。 代わりに、すべてを標準出力に送信し、パイプ(|)またはリダイレクト(>)を使用できます。
  • オプション-nは、topが実行する反復回数を通知します。

その後は次のように入力します。

cat log.txt | grep USER_OF_PROCESS 

あなたは、プロセスの実行時間とも%のCPU、メモリおよびすべてのことを見ることができます。

2
#You can run following script as ./cpurecorder.sh pid filename 
#It will generate output file with memory usage and cpu utilisation. 
#You can log other variable by searching man for ps. 

`enter code here`filepath=/home/rtcsadm    # modify as desired 
interval=20       # reports per minute 
timelimit=6000      # how long to run, in seconds 

mydate=`date "+%H:%M:%S"`   # the timestamp 
freq=$((60/$interval))    # for sleep function 

while [ "$SECONDS" -le "$timelimit" ] ; do 
    ps -p$1 -opid -opcpu -opmem -ocomm -c | grep $1 | sed "s/^/$mydate /" >> $filepath/$2.txt 
    sleep 3 
    mydate=`date "+%H:%M:%S"` 
done