【问题标题】:How to measure execution time of request without network transfer time?如何在没有网络传输时间的情况下测量请求的执行时间?
【发布时间】:2011-11-15 11:33:40
【问题描述】:

在我的阀门中,我得到了我的 http 查询的执行时间:

public void invoke(Request request, Response response) 
throws IOException, ServletException {
long t1 = System.currentTimeMillis();
getNext().invoke(request, response);
long t2 = System.currentTimeMillis();
long time = t2 - t1;
...
}

我怀疑我这样得到的时间,不仅给了我服务器端的执行时间,还给了我网络时间?有可能吗?

(因为根据发出请求的客户端,测量的平均时间与一个 ip 的平均时间不同,我有 70 毫秒的平均时间和另一个 270 毫秒的 ip)

我在过滤器中编写了完全相同的代码:

long before = System.currentTimeMillis();
chain.doFilter(request, response);
long after = System.currentTimeMillis();

,但在我的测试中,Valve 和过滤器中的执行时间是相同的...

我更感兴趣的是只获取我的 servlet 的执行时间。 但如果我能得到最后一个字节的发送时间,我会很感兴趣。

非常感谢您让我了解有关阀门和过滤器的知识。

【问题讨论】:

    标签: tomcat servlets servlet-filters tomcat-valve


    【解决方案1】:

    我怀疑我这样得到的时间,不仅给我服务器端执行时间,还给我网络时间?有可能吗?

    没错。这样,总时间中至少包含了一部分涉及传输请求体的网络时间。一旦请求 headers 被完全读取和解析,valve/filter/servlet 代码就会被直接调用。请求 body 不一定在此时被完全读取。请求正文包含客户端作为请求的一部分通过网络发送的任何内容(例如提交的表单数据)。仅当过滤器/servlet 开始读取和解析完整的请求主体时,例如getParameter()getReader()getInputStream()等,那么请求体的所有字节实际上都会被传输。

    您可能希望以仅在完全读取请求正文后开始执行时间测量的方式重写执行时间测量。这意味着您确实必须在 servlet 内部对其进行测量。

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Read the request body.
        String foo = request.getParameter("foo");
        String bar = request.getParameter("bar");
        // ...
    
        // Now, start the stopwatch.
        long startTime = System.nanoTime();
    
        // Now, do the business job.
        someService.process(foo, bar, ...);
        // ...
    
        // Now, stop the stopwatch.
        long elapsedTime = System.nanoTime() - startTime;
    
        // I don't think that you want to include JSP rendering in total time, right?
        request.getRequestDispatcher("/WEB-INF/some.jsp").forward(request, response);
    }
    

    (请注意,我使用了System#nanoTime(),因为它的准确性要好得多

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2013-12-15
    • 2022-01-22
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多