2011-05-13 75 views
0

我在幾個站點上找到了部分解決方案,所以我將幾個部分放在一起,但我仍然無法弄清楚。用於查找程序的平均運行時間的腳本

下面是我在做什麼:

我從終端運行一個簡單的Java程序,並需要找到該程序的平均運行。

我在做的是多次運行該命令,查找總時間,然後將總時間除以運行程序的次數。

我也想獲取程序的輸出,而不是在標準輸出中顯示它。

這是我目前的代碼和輸出。

Shell腳本:

startTime=$(date +%s%N) 
    for ((i = 0; i < $runTimes; i++)) 
    do 
      java Program test.txt > /dev/null 
    done 
    endTime=$(date +%s%N) 
    timeDiff=$(($endTime - $startTime)) 
    timeAvg=$(($timeDiff/$numTimes)) 
    echo "Avg Time Taken: " 
    echo $timeAvg 

輸出:

./run: line 12: 1305249784N: value too great for base (error token is "1305249784N") 

的行號12關閉,因爲這個代碼是一個較大的文件的一部分。 行號12是被評估的timeDiff的行。

我很感激任何幫助,如果這個問題是多餘的或無關緊要的,我很抱歉。

回答

1

在我的機器上,我沒有看到日期格式爲%N,因爲該值似乎爲7個零,但是它在數學上做出了一個更大的數字,即1305250833570000000。你真的需要納秒精度嗎?我敢打賭,如果你只用%s就可以了。

否則,你看起來是在正確的軌道上。

P.S.

噢,輕微點,

echo "Avg Time Taken: $timeAvg" 

是實現您所需的輸出;-)

選項2.你可以拿出日期計算都在一起,並把你的循環AA簡單的方法成小劇本。然後你可以使用shell

time myJavaTest.sh 

的內置功能會給你喜歡

real 0m0.049s 
user 0m0.016s 
sys  0m0.015s 

我希望這有助於細節。

+0

感謝您的提示。我沒有使用%s,因爲我需要超過幾秒的精度,因爲對java程序的調用需要8到15毫秒。無論如何,只需指定毫秒而不是納秒?我喜歡使用時間函數調用測試儀的方式。我可以使用它。再次感謝。 – 2011-05-13 04:30:40

+0

我的日期--help沒有列出任何毫秒選項。我會嘗試減少%s值的大小。你真的只需要字符串左邊的較小的6-8個值。模數還是隻是子串?或者你可以運行awk來進行數學運算,我不認爲它在數字範圍上會受到限制。祝你好運。 – shellter 2011-05-13 12:21:55

+0

doah ..可能最簡單的方法是將你的值轉換成浮點值%s。%N,然後用awk做數學運算。此外,你不能使用可用於Java的分析?最後,如果你打算做更多這樣的事情,可以通過標籤基準測試和測試來發布問題。有很多人可以幫助解決這些問題。祝你好運! – shellter 2011-05-13 13:31:37