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

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

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_msapi_cpu_ms ,每个都有两次略有不同的值。

另外,当我用GET请求下面的简单结构自己记录定时信息时,它会打印一个稍低的值。 在这种情况下,特别是182毫秒,对官方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_ms :根据App Engine文档 , “CPU时间以秒为单位报告”,相当于1.2 GHz Intel x86处理器在该时间内可以执行的CPU周期数。实际CPU数量根据App Engine内部的条件,花费的周期会有很大差异,因此使用此处理器作为参考测量,此数字会根据报告目的进行调整。

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

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