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

Java GAE日志字段中时间值的确切含义是什么?,java,google-app-engine,logging,Java,Google App Engine,Logging,我在标准的谷歌应用程序引擎日志中看到一些神秘的时间域,这让我很好奇: 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.c

我在标准的谷歌应用程序引擎日志中看到一些神秘的时间域,这让我很好奇:

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
特别是:mscpu\u-msapi\u-cpu\u-ms,它们各两次,数值略有不同

此外,当我自己用下面一个简单的结构为GET请求记录定时信息时,它会打印一个稍低的值。在这种情况下,特别是182msec,与官方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任务。)

211ms:响应时间到了,请求页面的用户会感觉到。为了提高网站的速度,你会尽量减少它

775cpu\u ms:根据“CPU时间报告单位”秒,“这相当于1.2 GHz Intel x86处理器在该时间段内可以执行的CPU周期数。实际使用的CPU周期数因应用程序引擎内部条件的不同而有很大差异,因此,为了便于报告,使用此处理器作为参考测量值来调整此数字。”

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

589api\u cpu\u ms:它是API使用(数据存储、用户API等)所花费的调整cpu时间