我正在使用GAE / Java。我记录了我的代码执行所需的时间 在代码内部并将其作为调试消息输出到日志中。它的时间 我的代码执行通常只是时间的一小部分 在日志上显示为响应请求的总时间。
例如,在我的代码中,我的调试消息会说我的代码花了58毫秒
跑。但是日志行将显示:/ 421ms 130cpu_ms 20api_cpu_ms
,
表示需要421ms才能返回响应。
这是典型的 每个请求,这不是由于加载请求。而且,我是唯一的 现在访问我的应用程序的人,并且日志不显示pending_ms值,所以这不是因为它正在等待另一个请求首先完成处理。
导致这种额外延迟的原因是什么?有什么办法可以解决吗?
编辑:
我从头开始创建了一个全新的应用引擎项目,试图看看它是我的应用程序的问题,还是只是应用程序引擎发生的事情。新项目有一个映射到/*
的servlet,该servlet的代码是:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
long time = System.nanoTime();
long x = 5;
for (int i = 0; i < 1234567; i++) { x += i % 3 == 0 ? -i : i; }
response.getWriter().write(request.getRequestURI().toLowerCase() + x);
log.fine(getTime(time, "Total Time"));
}
static String getTime(long origtime, String id) {
long diff = System.nanoTime() - origtime;
long ret = diff / 100000;
return id + ": " + ((double)ret / 10) + " ms";
}
结果:即使有这个超级简单的应用程序引擎项目,我也看到了相同的行为。将会有Total Time: 7.8 ms
之类的日志输出,但日志行会显示存在明显更高的延迟,例如159ms 23cpu_ms
。它并不总是这么糟糕,有时日志行将显示仅约40毫秒的延迟,而调试消息将显示约7毫秒的时间。