我正在使用time命令在Linux中运行一个jar文件。下面是执行后的输出。
15454.58s real 123464.61s user 6455.55s system
以下是执行的命令。
time java -jar -Xmx7168m Batch.jar
但是执行该过程所需的实际时间是9270秒。
为什么实际时间(挂钟时间)和实际时间不同?
任何人都能解释一下吗?它运行在多核机器(32核心)上。
答案 0 :(得分:2)
也许这可以解释您遇到的偏差。来自time
Wikipedia article:
因为程序可能会分叉CPU时间(用户和用户)的子项 sys)被添加到time命令报告的值,但是在a上 多核系统这些任务是并行运行的,总CPU时间 可能比实时更大。
除此之外,您对实时的理解符合time(7)
:
实时定义为从某个固定点开始测量的时间,从过去的标准点(参见下面的纪元和日历时间的描述),或者从生命中的某些点(例如,开始)开始。一个过程(经过的时间)。
另请参阅bash(1)
(尽管其time
命令的文档并不过于全面。)
如果秒对您来说足够精确,那么这个小包装器可以提供帮助:
#!/bin/bash
starttime=$( date +"%s" )
# run your program here
endtime=$( date +"%s" )
duration=$(( endtime-starttime ))
echo "Execution took ${duration} s."
注意:如果在程序运行时更改系统时间,结果将不正确。
答案 1 :(得分:0)
从我记忆中,用户时间是用户空间花费的时间,系统是在内核空间中运行的时间(例如系统调用),而实际也称为挂钟时间(实际时间是你)例如,可以用秒表测量。不确切知道如何在SMP系统上计算它。