问题标签 [connection-leaks]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 注入的 JOOQ 上下文泄漏连接
我使用 jooq 在 Wildfly Web 应用程序中处理 PostgreSQL 数据库上的 SQL 查询。按照http://awolski.com/integrating-jooq-easy/上的示例,通过 CDI 将 DSLContext 注入到我的 bean 中。一个 bean 看起来像这样:
当我运行应用程序时,每个连接都会泄漏。我错过了什么?
java - okhttp客户端抛出连接泄漏警告
我看到response.body()
未关闭时会引发连接泄漏警告。
下面是引发警告的代码片段。
有人可以指出错误可能在哪里以及代码中的任何潜在错误吗?
设置日志级别为FINE后的错误日志如下:
javascript - 我可以使用 JS 获取客户端 DNS IP 地址吗?
我正在寻找一个获取用户 DNS 服务器 IP 的 JS。
就像:dnsleak.com、ipleak.net
但是,我知道这些是可以使用的在线服务,但我想要可以在我的服务器上运行的东西,并且谁访问过它,我会得到他/她的 DNS 服务器 IP。
谢谢你。
jetty - Jetty 9 泄漏线程和连接并停止响应
我们使用 Jetty 9 作为 Java 8 VM 中的嵌入式 Web 服务器。有时,会发生以下情况:
- (Windows) 进程的线程数开始以稳定的速度增加
- 此后一段时间,Jetty 停止响应 HTTP (TLS) 请求。
- 在此之后,线程仍会增加一段时间,然后在 300 左右停止增加(进程中大约有 100 个非码头线程)。
在响应停止的同时,类似以下的消息序列开始精确地每 2 分钟重复记录一次,并且永不停止:
2018-09-22 00:00:47 调试 [Scheduler-7519289] org.eclipse.jetty.io.IdleTimeout:156 - SelectChannelEndPoint@be1c72{/192.168.37.61:12421<->444,打开,输入,输出,- ,-,120001/120000,SslConnection@16ad018}{io=0/0,kio=0,kro=1} 空闲超时检查,经过:120001 ms,剩余:-1 ms
2018-09-22 00:00:47 调试 [Scheduler-7519289] org.eclipse.jetty.io.IdleTimeout:163 - SelectChannelEndPoint@be1c72{/192.168.37.61:12421<->444,打开,输入,输出,- ,-,120002/120000,SslConnection@16ad018}{io=0/0,kio=0,kro=1} 空闲超时过期
2018-09-22 00:00:47 调试 [Scheduler-7519289] org.eclipse.jetty.io.WriteFlusher:473 - 忽略:WriteFlusher@2527cb{IDLE} {}
2018-09-22 00:00:47 调试 [Scheduler-7519289] org.eclipse.jetty.io.AbstractEndPoint:186 - 忽略空闲端点 SelectChannelEndPoint@be1c72{/192.168.37.61:12421<->444,Open,in, out,-,-,120004/120000,SslConnection@16ad018}{io=0/0,kio=0,kro=1}
...
2018-09-22 00:02:47 调试 [Scheduler-7519289] org.eclipse.jetty.io.IdleTimeout:156 - SelectChannelEndPoint@be1c72{/192.168.37.61:12421<->444,打开,输入,输出,- ,-,120002/120000,SslConnection@16ad018}{io=0/0,kio=0,kro=1} 空闲超时检查,经过:120002 ms,剩余:-2 ms
2018-09-22 00:02:47 调试 [Scheduler-7519289] org.eclipse.jetty.io.IdleTimeout:163 - SelectChannelEndPoint@be1c72{/192.168.37.61:12421<->444,打开,输入,输出,- ,-,120002/120000,SslConnection@16ad018}{io=0/0,kio=0,kro=1} 空闲超时过期
2018-09-22 00:02:47 调试 [Scheduler-7519289] org.eclipse.jetty.io.WriteFlusher:473 - 忽略:WriteFlusher@2527cb{IDLE} {}
2018-09-22 00:02:47 调试 [Scheduler-7519289] org.eclipse.jetty.io.AbstractEndPoint:186 - 忽略空闲端点 SelectChannelEndPoint@be1c72{/192.168.37.61:12421<->444,打开,在, out,-,-,120003/120000,SslConnection@16ad018}{io=0/0,kio=0,kro=1}
为大约 200 个唯一的 SelectChannelEndPoint 对象(还有大约 200 个唯一的客户端 IP:端口组合)记录了像上面这样的序列。
版本:9.3.22 和 9.3.25。这些是 TLS 连接。
我们不会更改默认线程池大小。
似乎空闲连接的清理有一个错误,有时会出现 - 而不是从一开始 - 在上述问题序列开始之前,有许多一次性清除空闲连接。
请帮忙!这是一个已知的错误(我在互联网上找不到任何东西)?
还有哪些其他诊断信息可以帮助查明问题?
java - 使用HttpClient时如何完全释放连接?
我使用 HttpClient ( https://hc.apache.org/httpcomponents-client-4.5.x/index.html ) 来进行许多背靠背和并行的 http 调用。运行一段时间后,它得到这个异常:
我试图关闭我能看到的所有东西,但我仍然必须错过一些东西,因为它仍然有那个错误。
如何正确释放连接以避免这种连接泄漏问题?
这是重现该问题的测试用例,在 Windows 上以 Java8 运行:
jdbc - clojure 中的 jdbc 连接被过早地收集垃圾
我正在使用该[com.impossibl.pgjdbc-ng/pgjdbc-ng "0.7.1"]
库连接到 postgres 数据库。连接保存在原子内。然后我像这样武装多个听众:
f
在这种情况下是事件触发时调用的函数。出于某种原因,连接似乎被垃圾收集了不久,这显然使侦听器无法正常工作。
此警告之后是我在arm-listeners
方法中打开连接的堆栈跟踪。
我尝试了几件事,例如将连接存储在 a 中let
,但似乎都没有帮助解决这个特定问题。
建立连接并启动我使用的侦听器的完整功能是:https ://github.com/n2o/postgres-listener/blob/master/src/postgres_listener/core.clj
这就是我启动监听器的方式:
java - 使用 HttpClient 以状态 CLOSE_WAIT 泄漏的连接
我们正在使用 JDK11 java.net.http
HTTP 客户端从 API 获取数据。在我们收到响应后,连接在我们的服务器中仍然以 TCP 状态打开CLOSE_WAIT
,这意味着客户端必须关闭连接。
来自RFC 793术语:
CLOSE-WAIT - 表示等待来自本地用户的连接终止请求。
这是我们的客户端代码,它在 WildFly 16 上运行,在 Java 12 上作为无状态 REST API 运行。我们不明白为什么会这样。
我们得到“状态码”,表示 http 响应已处理。
当使用相同的代码调用其他端点时,连接很好。这似乎是我们正在调用的远程 API 的一个特殊问题,但我们仍然不明白为什么 Java HTTP 客户端保持连接打开。
我们尝试了 Windows 和 Linux 机器,甚至尝试了 WildfFly 之外的独立机器,但结果相同。在每次请求之后,即使是从我们的无状态客户端执行并接收响应,每个请求都将保持不变CLOSE_WAIT
并且永远不会关闭。
如果我们关闭 Java 进程,连接将消失。
HTTP 客户端发送的标头:
服务器返回带有标题的响应:Connection: close
更新 (1)
我们尝试微调实现类中的池参数jdk.internal.net.http.ConnectionPool
。
它没有解决问题。
更新 (2)
使用Apache HTTP时,连接会处于 CLOSE_WAIT 状态大约 90 秒,但在那之后它可以连接。
调用方法HttpGet.releaseConnection()
强制连接立即关闭。
并且使用OkHttp客户端,它可以按预期开箱即用,没有连接卡住。
我们仍在努力寻找如何让它在 java-http-client 中工作,这样我们就不必重写代码。
connection-pooling - 检测池化数据源中的连接泄漏
我正在编写代码以检测我的应用程序是否正在泄漏连接。我c3p0
用作连接池。
在我的单元测试中,我试图创建一个@Rule
在测试结束时检查没有挂起的连接。这将帮助我找到忘记关闭Connection
s 的代码。目前,这必须与 c3p0 池一起使用。
我写了以下代码:
但是,当将组件实例化为@Rule 时,它会随机检测一个挂起的连接(在我当前的测试中,我只使用一个)。
有些测试会挂起连接,有些则不会。如果我单独运行一个失败的测试,我通常不会再收到任何投诉。
我认为该getNumBusyConnectionsDefaultUser()
方法没有达到我想要的效果。
有人帮忙吗?
java - Hive JDBC - getConnection 失败时的连接泄漏
我正在使用 cloudera hive jdbc https://www.cloudera.com/downloads/connectors/hive/jdbc/2-6-2.html
有时,当 getConnection() 调用失败(并非总是如此,取决于服务器稳定性)时,它会显示此异常:
当我使用 netstat cmd 检查时:
建立了一个新的套接字连接,我必须等待大约 1 小时然后才能看到 tcp 连接消失了。
问题是:
- 为什么当我调用 getConnection() 时,会调用 closeSession()?
- 是不是因为closeSession()失败,导致tcp连接无法释放?是否视为连接泄漏?