我在标准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任务。)
答案 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等)