java732_java – 如何诊断泄漏的http连接(org.apache.ht...

本文讨论了一个在Amazon EC2上运行的多线程Java程序遇到的HTTP连接泄漏问题。该问题表现为org.apache.http.conn.ConnectionPoolTimeoutException异常,疑似由HttpEntity.consume()或S3ObjectInputStream.close()未被正确调用引起。作者寻求一种方法来监控和诊断连接池的状态,以便及时发现并修复连接泄漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个在Amazon的EC2上运行的多线程java程序.它使用org.apache.http.impl.client.DefaultHttpClient通过HttpPost和HttpGet从供应商查询和获取数据项.同时,它使用AWS的Java SDK将检索到的数据项推送到S3.

运行几天后,我得到通常伴随http连接泄漏的症状:

org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection

at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:417)

at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:300)

at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:224)

at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:391)

at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)

at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)

at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)

由于AWS和我对数据供应商的请求都使用Http连接,我不太确定我究竟忘记了HttpEntity.consume()或S3ObjectInputStream.close()(除非它还有其他东西……).

所以这是我的问题:有没有办法监控org.apache.http.impl.conn.tsccm.ConnPoolByRoute,这样至少我可以检测到什么时候我开始泄漏连接/实体未正确消耗/ http流未关闭? (我感觉它只在某些条件下发生,例如当抛出某些异常时,绕过我的代码中消耗HttpEntities的逻辑,关闭流等等.)关于如何诊断最终导致我所有http的任何想法使用ConnectionPoolTimeoutException失败的连接将是最受欢迎的.我不想在尝试解决问题的根本原因之间等待4天.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值