gpt4 book ai didi

java - 向 127.0.0.1 发送请求 :8084/(Tomcat) takes ~1000ms while to 127. 0.0.1/(Wamp) 需要 ~20ms

转载 作者:可可西里 更新时间:2023-11-01 17:11:05 25 4
gpt4 key购买 nike

    HttpParams params = new BasicHttpParams();
params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
HttpClient httpclient = new DefaultHttpClient(params);
HttpPost httppost = new HttpPost(address);

try {
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (IOException ex) {
logger.log(Level.SEVERE, null, ex);
}

我正在使用此代码片段向驻留在本地主机上的 Apache Tomcat 上的 servlet 发送 HTTP POST 请求。向 Tomcat 地址发送请求(不带任何参数),即 http://127.0.0.1:8084 大约需要 1000 毫秒。而将相同的请求发送到地址为 http://127.0.0.1 的 Apache(wamp 服务器)只需要 20 毫秒。

我已经尝试过两个 Http 版本 (1.0/1.1),但响应时间没有影响。

有什么地方出了问题的线索吗?或者如何提高这个性能?或者是 Tomcat 本身太慢了,我对此问题无能为力? (但是浏览器能够在没有任何显着网络延迟的情况下加载 servlet!)

附加信息:

此代码本身位于 Servlet 中,Servlet 基本上什么都不做,只是发出此请求。应该处理请求的 servlet 也是“空白的”。此外,整个场景中没有涉及 JSP。并且时间记录不适用于冷tomcat。第一次和(有时)第二次调用需要超过 2000 毫秒。但是连续请求被标准化为超过 1000 毫秒。所以,这肯定不是冷 tomcat 问题。

现在,这里的人也向我询问 servlet 代码。这是我正在研究的基本设计:

Servlet A 应该做一些工作并使用我编写的 AgniLogger 类记录它。该类在一个库中,计划在多个组件中使用。它反过来使用上面编写的代码将 POST 请求发送到 servlet B。Servlet B 将执行实际的日志记录。现在,这个 servlet B 还没有实现。 Servlet A 和 B 是不同 Web 应用程序的一部分。

Servlet A:http://pastebin.com/tQjtvG3g

烈火记录仪:http://pastebin.com/nGJypmCN

Servlet B:http://pastebin.com/psCxLCYY

P.S.:我是用Netbeans开发的,目前项目中没有web.xml。

解决方法(虽然很奇怪!)

如果我将 Servlet B 中 processRequest() 函数的定义从 {blank} 更改为:

    PrintWriter out = response.getWriter();
try {
//do nothing
} finally {
out.close();
}

问题解决了。响应时间减少到 20 毫秒左右,就像端口 80 上的 Apache (WAMP) 服务器一样。但是,无论如何,我不知道为什么它工作正常!

最佳答案

您不会提供任何关于您的 servlet 做什么的线索。例如,如果它在其响应中嵌入一个 jsp,则 jsp 可能需要在第一次访问时编译成一个 servlet(jsp 的实现方式)。在这种情况下尝试第二个请求,它应该比第一个快很多。

您也可以从“冷”tomcat 请求页面,例如尚未初始化所有内容 - 与第一个选项类似,这将执行一些不会出现在以后请求中的一次性操作。

我在过去也看到过这样的行为,当时 Web 或应用程序服务器被配置为解析客户端的 IP 地址(进入反向查找 DNS 地址)。如果失败,通常需要一段时间——并且此操作过去一直在阻止请求。

(对此的澄清:我已经看到网络服务器为其日志文件反向解析 IP 地址。这对于它成功的地方来说相对较快(但要付出代价),但是当无法解析请求的 IP 地址时,它仅记录为 IP(如您所料),但在请求的回答时间中也可以看到严重的滞后。我不希望任何应用程序服务器像这样开箱即用地配置,但我过去曾见过这个问题。缺点是,如果您仅在日志中看到滞后和 IP 地址,则可能很难判断您是否遇到此问题。只有当您看到 DNS 名称与各种请求主机的日志中的 IP 地址)

此外,您以“127.0.0.1”为例 - 如果这不是真实地址,请确保两种方式都访问相同的端点。例如。现在“localhost”解析为“::1”(本地 IPV6 地址)很常见,但不能解析为“127.0.0.1”(IPV4 本地地址)。并不是说我预计这两种访问 servlet 的方式会有显着差异,但如果您可以在这两种访问选项之间识别出不同的路径,您可能会更接近于找到潜在的问题。

关于java - 向 127.0.0.1 发送请求 :8084/(Tomcat) takes ~1000ms while to 127. 0.0.1/(Wamp) 需要 ~20ms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14155365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com