GAE日志字段中时间值的确切含义是什么?

时间:2011-05-10 05:24:51

标签: java google-app-engine logging

我在标准Google应用引擎日志中看到一些神秘的时间字段让我很好奇:

2011-05-09 21:56:00.577 /whatever 200 211ms 775cpu_ms 589api_cpu_ms 
0.1.0.1 - - [09/May/2011:21:56:00 -0700] "GET /whatever HTTP/1.1"
200 34 - "AppEngine-Google; (+http://code.google.com/appengine)"
"****.appspot.com" ms=212 cpu_ms=776 api_cpu_ms=589 cpm_usd=0.021713
queue_name=__cron task_name=dc4d411120bc75ea8bbea773d23eaecc

特别是: ms cpu_ms api_cpu_ms ,每次都有两次,值略有不同。

此外,当我使用下面针对GET请求的简单结构自行记录时间信息时,它会打印一个稍低的值。在这种情况下,特别是 182 msecs,对官方 775

protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
  long t0 = System.currentTimeMillis();
  //Do the stuff
  long t1 = System.currentTimeMillis();
  log.info("Completed in " + (t1-t0) + " msecs.\n");
}

所以,我的问题是:为什么我的测量时间结果和cpu_ms值之间的差异以及如何降低它? GAE日志字段中时间值的确切含义是什么?

我想优化我的代码,并且我基于上述事实意识到,大多数时间(接近600毫秒!)不会在 doGet 请求期间直接使用。 (我使用JPA,URLFetch,这是一个cron任务。)

1 个答案:

答案 0 :(得分:4)

211ms :这是响应的时间,因为请求该页面的用户会感觉到它。您将尝试减少它,以提高您网站的速度。

775cpu_ms :根据App Engine documentation“CPU时间以”秒“报告,这相当于1.2可以执行的CPU周期数在这段时间内使用的是Intel x86处理器。实际使用的CPU周期数取决于App Engine内部的条件,因此使用此处理器作为参考测量值来调整此数字以用于报告目的。

然后,没有“真实”时间是正常的:它应该与您使用System.currentTimeMillis()测量的时间不同,因为它已经过调整。相反,您应该使用 Quota API 来监控CPU使用情况:请参阅文档here。 CPU时间是可计费的(免费配额是每天6.5 CPU小时,您可以支付更多的CPU时间)。然后,你会尝试减少它,以便减少支出。

589api_cpu_ms :这是API使用所花费的CPU时间(数据存储,用户API等)