BonCode 连接器、IIS 7.5 和 Tomcat 8,缓慢且间歇性请求超时错误
BonCode Connector, IIS 7.5 & Tomcat 8, slow & intermittent Request timed out errors
我在 Win 2008 R2 64 位上通过 BonCode AJP13 v1.0.26 在 IIS 7.5 和 Tomcat 8.0.30 上托管了一个 JSP 网络应用程序。
到目前为止,这已经运行了几个月。
我们有相同的环境:开发、暂存和生产。
在开发和暂存环境中,我们的响应突然变得非常缓慢,在某些情况下,间歇性 IIS 产生了超时错误:
Request timed out
Exception Details: System.Web.HttpException: Request timed out.
[HttpException (0x80004005): Request timed out.]
在生产环境上,性能似乎还可以。
已尝试重新启动服务器、重新启动 IIS、重新启动 Tomcat 等
有没有人遇到过这些问题?
是否有人使用大于 1.0.26 的已知可用 BonCode 版本?
详情
绕过 IIS 和 BonCode,即明确选择端口 8080,给出即时响应。
http://<domain>:8080/<path>
减速不是 JSP 页面特定的。
即使是非常简单的页面,例如获取日期和时间,仍然间歇性地给出缓慢的响应。
Tomcat/JSP 网络应用程序上没有身份验证。
Tomcat 的单个实例与 IIS 7.5 驻留在同一台服务器上
即没有负载平衡等
仅使用纯 HTTP
即不是 HTTPS,也没有关联的证书。
服务器诊断
- BonCode 日志
偶尔看到这个:
2016-02-29 15:59:01 1.0.26 ERROR
TCP Client level -- Server/Port:localhost/8009
Value cannot be null.
Parameter name: buffer
2016-02-29 15:59:01 One Connection raised an error
但通常不会显示相关的错误/警告
与旧日志比较
旧日志
2017-05-04 10:19:28 New Connection 46 of 0 to tomcat: 127.0.0.1:8009 ID: 46 [T-5]
2017-05-04 10:19:35 New Connection 47 of 0 to tomcat: 127.0.0.1:8009 ID: 47 [T-45]
2017-05-04 10:25:11 New Connection 48 of 0 to tomcat: 127.0.0.1:8009 ID: 48 [T-45]
2017-05-04 10:25:15 New Connection 49 of 0 to tomcat: 127.0.0.1:8009 ID: 49 [T-49]
2017-05-04 10:39:12 New Connection 50 of 0 to tomcat: 127.0.0.1:8009 ID: 50 [T-49]
2017-05-04 10:40:09 New Connection 51 of 0 to tomcat: 127.0.0.1:8009 ID: 51 [T-22]
2017-05-04 10:41:29 New Connection 52 of 0 to tomcat: 127.0.0.1:8009 ID: 52 [T-49]
2017-05-04 10:42:03 New Connection 53 of 0 to tomcat: 127.0.0.1:8009 ID: 53 [T-52]
2017-05-04 11:05:04 New Connection 1 of 0 to tomcat: 127.0.0.1:8009 ID: 1 [T-20]
2017-05-04 11:06:37 New Connection 2 of 0 to tomcat: 127.0.0.1:8009 ID: 2 [T-23]
2017-05-04 11:07:23 New Connection 3 of 0 to tomcat: 127.0.0.1:8009 ID: 3 [T-51]
2017-05-04 11:08:55 New Connection 4 of 0 to tomcat: 127.0.0.1:8009 ID: 4 [T-23]
2017-05-04 11:09:17 New Connection 5 of 0 to tomcat: 127.0.0.1:8009 ID: 5 [T-51]
新日志
2017-05-16 14:31:57 New Connection 200 of 0 to tomcat: 127.0.0.1:8009 ID: 200 [T-153]
2017-05-16 14:31:58 New Connection 201 of 0 to tomcat: 127.0.0.1:8009 ID: 201 [T-153]
2017-05-16 14:32:30 New Connection 202 of 0 to tomcat: 127.0.0.1:8009 ID: 202 [T-153]
2017-05-16 14:36:05 New Connection 204 of 0 to tomcat: 127.0.0.1:8009 ID: 204 [T-153]
2017-05-16 14:36:06 New Connection 205 of 0 to tomcat: 127.0.0.1:8009 ID: 205 [T-153]
2017-05-16 14:41:38 New Connection 206 of 0 to tomcat: 127.0.0.1:8009 ID: 206 [T-153]
2017-05-16 14:42:51 New Connection 207 of 0 to tomcat: 127.0.0.1:8009 ID: 207 [T-153]
2017-05-16 14:42:52 New Connection 208 of 0 to tomcat: 127.0.0.1:8009 ID: 208 [T-153]
2017-05-16 14:43:12 New Connection 209 of 0 to tomcat: 127.0.0.1:8009 ID: 209 [T-153]
2017-05-16 14:43:40 New Connection 210 of 0 to tomcat: 127.0.0.1:8009 ID: 210 [T-153]
在旧日志中,连接 ID 似乎在 ~20-80 之后重置,每个连接使用一系列线程,偶尔使用相同的线程。
在新日志中,随着速度变慢,连接 ID 高得多并且似乎在使用同一个线程。
- Tomcat 日志
没有错误,正如预期的那样 servlet/JSP 请求没有被转发。
配置文件
邦码 - BonCodeAJP13.settings
<Settings>
<Port>8009</Port>
<Server>localhost</Server>
<MaxConnections>0</MaxConnections>
<LogLevel>2</LogLevel>
<LogDir>E:\inetpub\logs\BonCode</LogDir>
<FlushThreshold>0</FlushThreshold>
<EnableRemoteAdmin>False</EnableRemoteAdmin>
<HeaderBlacklist>AUTHORIZATION,URL,SERVER_SOFTWARE,SERVER_NAME,SERVER_PROTOCOL</HeaderBlacklist>
<PacketSize>65536</PacketSize>
</Settings>
Tomcat - server.xml
...
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
packetSize="65536" />
...
备注
我知道 BonCode v1.0.26 现在已经更新到 v1.0.36,但是更新的版本才发布大约 10 天。
如果我没有任何进展,我会升级,但我在生产环境中可以做的事情是有限的。
长期:升级计划。您返回了 10 个版本。
很可能您正在耗尽 AJP 连接数。
我会调整 Tomcat 连接和超时参数以消除卡住的连接:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" keepAliveTimeout="-1" connectionTimeout="60000" maxThreads="1000" packetSize="65536" />
最好,
布莱恩
对于Tomcat,如果不指定maxThreads,则默认为200。
Tomcat 8 docs
对于 BonCode,如果 MaxConnections = 0,则不使用连接池,但 BonCode 将为每个请求创建一个新连接。
来自 BonCode 源代码:
...
p_Logger.LogMessage(String.Format("New Connection {0} of {1} to tomcat: {2} ID: {3} [T-{4}]", p_ConcurrentConnections, BonCodeAJP13Settings.MAX_BONCODEAJP13_CONCURRENT_CONNECTIONS, p_TCPClient.Client.RemoteEndPoint.ToString(), p_ThisConnectionID, AppDomain.GetCurrentThreadId()), BonCodeAJP13LogLevels.BONCODEAJP13_LOG_BASIC);
...
据此,我希望 BonCode 连接 ID 达到并达到峰值 200。
此外,AppDomain.GetCurrentThreadId()) 已弃用,不应依赖它来提供线程 ID。
查看更多 BonCode 日志:
2017-05-16 15:44:27 New Connection 190 of 0 to tomcat: 127.0.0.1:8009 ID: 190 [T-153]
2017-05-16 15:44:28 New Connection 192 of 0 to tomcat: 127.0.0.1:8009 ID: 192 [T-153]
2017-05-16 15:44:29 New Connection 194 of 0 to tomcat: 127.0.0.1:8009 ID: 194 [T-153]
2017-05-16 15:44:43 New Connection 196 of 0 to tomcat: 127.0.0.1:8009 ID: 196 [T-153]
2017-05-16 15:44:44 New Connection 198 of 0 to tomcat: 127.0.0.1:8009 ID: 198 [T-153]
2017-05-16 15:45:08 New Connection 200 of 0 to tomcat: 127.0.0.1:8009 ID: 200 [T-153]
2017-05-16 15:45:30 New Connection 201 of 0 to tomcat: 127.0.0.1:8009 ID: 201 [T-153]
2017-05-16 15:46:58 New Connection 203 of 0 to tomcat: 127.0.0.1:8009 ID: 203 [T-153]
2017-05-16 15:48:47 New Connection 204 of 0 to tomcat: 127.0.0.1:8009 ID: 204 [T-153]
2017-05-16 15:49:16 New Connection 205 of 0 to tomcat: 127.0.0.1:8009 ID: 205 [T-153]
2017-05-16 15:53:54 One Connection raised an error
2017-05-16 15:59:56 New Connection 206 of 0 to tomcat: 127.0.0.1:8009 ID: 206 [T-152]
2017-05-16 15:59:57 New Connection 207 of 0 to tomcat: 127.0.0.1:8009 ID: 207 [T-152]
2017-05-16 16:05:37 One Connection raised an error
不确定为什么没有在连接 201 上引发错误,但看起来 BonCode 连接已耗尽,未关闭和/或已达到 Tomcat 最大线程数。
将升级到 v1.0.36,看看会发生什么
我在 Win 2008 R2 64 位上通过 BonCode AJP13 v1.0.26 在 IIS 7.5 和 Tomcat 8.0.30 上托管了一个 JSP 网络应用程序。
到目前为止,这已经运行了几个月。
我们有相同的环境:开发、暂存和生产。
在开发和暂存环境中,我们的响应突然变得非常缓慢,在某些情况下,间歇性 IIS 产生了超时错误:
Request timed out
Exception Details: System.Web.HttpException: Request timed out.
[HttpException (0x80004005): Request timed out.]
在生产环境上,性能似乎还可以。
已尝试重新启动服务器、重新启动 IIS、重新启动 Tomcat 等
有没有人遇到过这些问题?
是否有人使用大于 1.0.26 的已知可用 BonCode 版本?
详情
绕过 IIS 和 BonCode,即明确选择端口 8080,给出即时响应。
http://<domain>:8080/<path>
减速不是 JSP 页面特定的。 即使是非常简单的页面,例如获取日期和时间,仍然间歇性地给出缓慢的响应。
Tomcat/JSP 网络应用程序上没有身份验证。
Tomcat 的单个实例与 IIS 7.5 驻留在同一台服务器上 即没有负载平衡等
仅使用纯 HTTP 即不是 HTTPS,也没有关联的证书。
服务器诊断
- BonCode 日志
偶尔看到这个:
2016-02-29 15:59:01 1.0.26 ERROR
TCP Client level -- Server/Port:localhost/8009
Value cannot be null.
Parameter name: buffer
2016-02-29 15:59:01 One Connection raised an error
但通常不会显示相关的错误/警告
与旧日志比较
旧日志
2017-05-04 10:19:28 New Connection 46 of 0 to tomcat: 127.0.0.1:8009 ID: 46 [T-5]
2017-05-04 10:19:35 New Connection 47 of 0 to tomcat: 127.0.0.1:8009 ID: 47 [T-45]
2017-05-04 10:25:11 New Connection 48 of 0 to tomcat: 127.0.0.1:8009 ID: 48 [T-45]
2017-05-04 10:25:15 New Connection 49 of 0 to tomcat: 127.0.0.1:8009 ID: 49 [T-49]
2017-05-04 10:39:12 New Connection 50 of 0 to tomcat: 127.0.0.1:8009 ID: 50 [T-49]
2017-05-04 10:40:09 New Connection 51 of 0 to tomcat: 127.0.0.1:8009 ID: 51 [T-22]
2017-05-04 10:41:29 New Connection 52 of 0 to tomcat: 127.0.0.1:8009 ID: 52 [T-49]
2017-05-04 10:42:03 New Connection 53 of 0 to tomcat: 127.0.0.1:8009 ID: 53 [T-52]
2017-05-04 11:05:04 New Connection 1 of 0 to tomcat: 127.0.0.1:8009 ID: 1 [T-20]
2017-05-04 11:06:37 New Connection 2 of 0 to tomcat: 127.0.0.1:8009 ID: 2 [T-23]
2017-05-04 11:07:23 New Connection 3 of 0 to tomcat: 127.0.0.1:8009 ID: 3 [T-51]
2017-05-04 11:08:55 New Connection 4 of 0 to tomcat: 127.0.0.1:8009 ID: 4 [T-23]
2017-05-04 11:09:17 New Connection 5 of 0 to tomcat: 127.0.0.1:8009 ID: 5 [T-51]
新日志
2017-05-16 14:31:57 New Connection 200 of 0 to tomcat: 127.0.0.1:8009 ID: 200 [T-153]
2017-05-16 14:31:58 New Connection 201 of 0 to tomcat: 127.0.0.1:8009 ID: 201 [T-153]
2017-05-16 14:32:30 New Connection 202 of 0 to tomcat: 127.0.0.1:8009 ID: 202 [T-153]
2017-05-16 14:36:05 New Connection 204 of 0 to tomcat: 127.0.0.1:8009 ID: 204 [T-153]
2017-05-16 14:36:06 New Connection 205 of 0 to tomcat: 127.0.0.1:8009 ID: 205 [T-153]
2017-05-16 14:41:38 New Connection 206 of 0 to tomcat: 127.0.0.1:8009 ID: 206 [T-153]
2017-05-16 14:42:51 New Connection 207 of 0 to tomcat: 127.0.0.1:8009 ID: 207 [T-153]
2017-05-16 14:42:52 New Connection 208 of 0 to tomcat: 127.0.0.1:8009 ID: 208 [T-153]
2017-05-16 14:43:12 New Connection 209 of 0 to tomcat: 127.0.0.1:8009 ID: 209 [T-153]
2017-05-16 14:43:40 New Connection 210 of 0 to tomcat: 127.0.0.1:8009 ID: 210 [T-153]
在旧日志中,连接 ID 似乎在 ~20-80 之后重置,每个连接使用一系列线程,偶尔使用相同的线程。
在新日志中,随着速度变慢,连接 ID 高得多并且似乎在使用同一个线程。
- Tomcat 日志
没有错误,正如预期的那样 servlet/JSP 请求没有被转发。
配置文件
邦码 - BonCodeAJP13.settings
<Settings>
<Port>8009</Port>
<Server>localhost</Server>
<MaxConnections>0</MaxConnections>
<LogLevel>2</LogLevel>
<LogDir>E:\inetpub\logs\BonCode</LogDir>
<FlushThreshold>0</FlushThreshold>
<EnableRemoteAdmin>False</EnableRemoteAdmin>
<HeaderBlacklist>AUTHORIZATION,URL,SERVER_SOFTWARE,SERVER_NAME,SERVER_PROTOCOL</HeaderBlacklist>
<PacketSize>65536</PacketSize>
</Settings>
Tomcat - server.xml
...
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
packetSize="65536" />
...
备注
我知道 BonCode v1.0.26 现在已经更新到 v1.0.36,但是更新的版本才发布大约 10 天。
如果我没有任何进展,我会升级,但我在生产环境中可以做的事情是有限的。
长期:升级计划。您返回了 10 个版本。
很可能您正在耗尽 AJP 连接数。 我会调整 Tomcat 连接和超时参数以消除卡住的连接:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" keepAliveTimeout="-1" connectionTimeout="60000" maxThreads="1000" packetSize="65536" />
最好, 布莱恩
对于Tomcat,如果不指定maxThreads,则默认为200。 Tomcat 8 docs
对于 BonCode,如果 MaxConnections = 0,则不使用连接池,但 BonCode 将为每个请求创建一个新连接。
来自 BonCode 源代码:
...
p_Logger.LogMessage(String.Format("New Connection {0} of {1} to tomcat: {2} ID: {3} [T-{4}]", p_ConcurrentConnections, BonCodeAJP13Settings.MAX_BONCODEAJP13_CONCURRENT_CONNECTIONS, p_TCPClient.Client.RemoteEndPoint.ToString(), p_ThisConnectionID, AppDomain.GetCurrentThreadId()), BonCodeAJP13LogLevels.BONCODEAJP13_LOG_BASIC);
...
据此,我希望 BonCode 连接 ID 达到并达到峰值 200。
此外,AppDomain.GetCurrentThreadId()) 已弃用,不应依赖它来提供线程 ID。
查看更多 BonCode 日志:
2017-05-16 15:44:27 New Connection 190 of 0 to tomcat: 127.0.0.1:8009 ID: 190 [T-153]
2017-05-16 15:44:28 New Connection 192 of 0 to tomcat: 127.0.0.1:8009 ID: 192 [T-153]
2017-05-16 15:44:29 New Connection 194 of 0 to tomcat: 127.0.0.1:8009 ID: 194 [T-153]
2017-05-16 15:44:43 New Connection 196 of 0 to tomcat: 127.0.0.1:8009 ID: 196 [T-153]
2017-05-16 15:44:44 New Connection 198 of 0 to tomcat: 127.0.0.1:8009 ID: 198 [T-153]
2017-05-16 15:45:08 New Connection 200 of 0 to tomcat: 127.0.0.1:8009 ID: 200 [T-153]
2017-05-16 15:45:30 New Connection 201 of 0 to tomcat: 127.0.0.1:8009 ID: 201 [T-153]
2017-05-16 15:46:58 New Connection 203 of 0 to tomcat: 127.0.0.1:8009 ID: 203 [T-153]
2017-05-16 15:48:47 New Connection 204 of 0 to tomcat: 127.0.0.1:8009 ID: 204 [T-153]
2017-05-16 15:49:16 New Connection 205 of 0 to tomcat: 127.0.0.1:8009 ID: 205 [T-153]
2017-05-16 15:53:54 One Connection raised an error
2017-05-16 15:59:56 New Connection 206 of 0 to tomcat: 127.0.0.1:8009 ID: 206 [T-152]
2017-05-16 15:59:57 New Connection 207 of 0 to tomcat: 127.0.0.1:8009 ID: 207 [T-152]
2017-05-16 16:05:37 One Connection raised an error
不确定为什么没有在连接 201 上引发错误,但看起来 BonCode 连接已耗尽,未关闭和/或已达到 Tomcat 最大线程数。
将升级到 v1.0.36,看看会发生什么