用于查找程序的平均运行时间的脚本

问题描述:

我在几个站点上找到了部分解决方案,所以我将几个部分放在一起,但我仍然无法弄清楚。用于查找程序的平均运行时间的脚本

下面是我在做什么:

我从终端运行一个简单的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的行。

我很感激任何帮助,如果这个问题是多余的或无关紧要的,我很抱歉。

在我的机器上,我没有看到日期格式为%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