bashスクリプトによる出力の解析方法


2

ネットワークストレージの読み取り/書き込みパフォーマンスをテストするスクリプトを作成していますが、スクリプトを完了するには少し助けが必要です。

スクリプトは簡単です:

  1. キャッシュをクリアするためにNFSマウントをリロードします
  2. nfsにテストファイルを書き込む
  3. 記録タイム
  4. nfsからテストファイルを読み取ります
  5. 記録タイム

解決すべき問題が1つあります。timeコマンドの出力を解析し、テキストファイルに保存します。

時間コマンドは次の3つの値を出力します。実0m0.000sユーザー0m0.000s sys 0m0.000s

リアルタイムが欲しいだけです。読み取り用に1ファイル、書き込み用に1ファイル。

これは私がこれまでに持っているものです:

#!/bin/bash
for i in [`seq 1 20`]; 
echo "remounting autofs"
/etc/init.d/autofs reload;
wait 5;
echo "write test"
#for write perf
do time dd if=/dev/zero of=/home/nfs_perf_testing/samplefile$i bs=1M count=1024 oflag=direct;

echo "write test done";

wait 5;
echo "read test";
#for read perf;
do time dd if=/home/nfs_perf_testing/samplefile of=/dev/null bs=1M count=1024 iflag=direct;

echo "read test done";
done;

皆さん、ありがとうございました

回答:


1

time(1)stderrに出力するため、その出力をstdout にリダイレクトし2>&1、それをgrepにパイプして必要な行を見つけますgrep real。最後に、awkを使用して目的の列を印刷しますawk '{ print $2 }'

これは次のようにまとめる必要があります。

(time command_to_time) 2>&1 | grep real | awk '{ print $2 }'

1

右。簡単です。

waitあなたが期待することをしません。sleepここで使用します。

for i in `seq 1 20` 

括弧を省略します-ここでシェルを混乱させます。

ところで:次回はiozoneまたはbonnie ++の使用を検討してください。iozoneテストの間にNFSパーティションをアンマウント/再マウントするオプションがあることは知っています。また、EXCELにインポートして3Dチャートを作成できるデータも生成します。また、さまざまなブロックサイズをテストすることも行います。

また、RAMキャッシュが問題になる場合があります。大量のRAM(1MBなど)のみでブートするための特別なブート構成(grub)が必要な場合があります。https://stackoverflow.com/questions/13484016/setting-limit-to-total-physical-memory-available-in-linuxを参照してください


iozoneから始めましたが、システムはautofsを使用するようにセットアップされており、アンマウントできないというエラーが表示された場合
-D.Zou

waitコマンドを修正し、それらをに置き換えましたかsleep。ベンチマークに不安がある場合は、一時的に無効にするautofsか無効にせずに、iozoneを使用して同じソースを別のポイントにマウントできます。autofsサーバー上ではなくクライアント上でのみ動作し、「手動」マウントと並行して動作させることができます。
オテウス

0

シンプル、grepを使用:

{ time command >/dev/null; } |& grep real

これは、「コマンド」を実行するリアルタイムを出力します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.