![Apache 服务器上的首次 REST 调用速度缓慢](https://linux22.com/image/722230/Apache%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E9%A6%96%E6%AC%A1%20REST%20%E8%B0%83%E7%94%A8%E9%80%9F%E5%BA%A6%E7%BC%93%E6%85%A2.png)
我在一些请求上遇到了这个问题。用户的所有第一次调用(或一段时间后)需要长达 60 秒才能完成。之后需要几毫秒的时间。无论我在互联网浏览器上还是使用 SOAP UI 调用它,结果都是一样的。我在 Apache 上运行一个 Java 应用程序。我用 Fiddler 运行它,以查看调用花费最多时间的地方,看起来它位于服务器收到请求和开始应答之间,每次都需要 61 秒。Fiddler 还显示 SSL 握手在两种情况下都需要几毫秒的时间
我不知道还能去哪里找。如果有人能提供一些信息,我将不胜感激。
第一个请求(耗时 1 分 01 秒)
Request Count: 1
Bytes Sent: 683 (headers:683; body:0)
Bytes Received: 846 (headers:347; body:499)
ACTUAL PERFORMANCE
--------------
This traffic was captured on Friday, May 18, 2018.
ClientConnected: 16:21:17.244
ClientBeginRequest: 16:21:17.465
GotRequestHeaders: 16:21:17.465
ClientDoneRequest: 16:21:17.465
Determine Gateway: 0ms
DNS Lookup: 0ms
TCP/IP Connect: 0ms
HTTPS Handshake: 0ms
ServerConnected: 16:21:17.275
FiddlerBeginRequest: 16:21:17.466
ServerGotRequest: 16:21:17.466
ServerBeginResponse: 16:22:18.597
GotResponseHeaders: 16:22:18.597
ServerDoneResponse: 16:22:18.599
ClientBeginResponse: 16:22:18.599
ClientDoneResponse: 16:22:18.599
Overall Elapsed: 0:01:01.133
RESPONSE BYTES (by Content-Type)
--------------
application/json: 499
~headers~: 347
后续请求(耗时 0.120 分钟)
Request Count: 1
Bytes Sent: 683 (headers:683; body:0)
Bytes Received: 846 (headers:347; body:499)
ACTUAL PERFORMANCE
--------------
This traffic was captured on Friday, May 18, 2018.
ClientConnected: 16:22:38.582
ClientBeginRequest: 16:22:38.607
GotRequestHeaders: 16:22:38.607
ClientDoneRequest: 16:22:38.607
Determine Gateway: 0ms
DNS Lookup: 0ms
TCP/IP Connect: 0ms
HTTPS Handshake: 0ms
ServerConnected: 16:22:38.589
FiddlerBeginRequest: 16:22:38.607
ServerGotRequest: 16:22:38.607
ServerBeginResponse: 16:22:38.726
GotResponseHeaders: 16:22:38.726
ServerDoneResponse: 16:22:38.727
ClientBeginResponse: 16:22:38.727
ClientDoneResponse: 16:22:38.727
Overall Elapsed: 0:00:00.120
RESPONSE BYTES (by Content-Type)
--------------
application/json: 499
~headers~: 347
这是另一个第一次通话的样子浏览器 Chrome 网络分析
谢谢!!
答案1
我终于找到了根本原因。看起来 Windows 会在 15 分钟后关闭 LDAP 连接,但默认的 Apache 行为似乎是尝试无限期地重新使用该连接。如果 Apache 在 Windows 关闭连接后尝试重新使用它,则需要 60 秒的延迟才能等待连接超时。这就是为什么每 15 分钟就会发生一次 60 秒的延迟。
许多论坛报告称,在 Apache 配置中将 LDAPConnectionPoolTTL 降低到低于 MaxConnIdleTime 的值可以解决他们的问题,但对我来说唯一有效的方法是将其设置为 0,从而完全禁用对现有连接的重用。
以下帖子引导我找到了答案: https://serverfault.com/a/825869/470949