首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用HTTP-Kit驻留的线程

使用HTTP-Kit驻留的线程
EN

Stack Overflow用户
提问于 2017-08-11 00:33:58
回答 1查看 240关注 0票数 0

我有几个正在运行的线程,每个线程都对HTTP Kit进行阻塞调用。我的代码一直在工作,但最近在大约30分钟后就冻结了。我的所有线程都卡在下面这一点上:

代码语言:javascript
复制
    sun.misc.Unsafe.park(Native Method)
    java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
    java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
    java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
    java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
    clojure.core$promise$reify__7005.deref(core.clj:6823)
    clojure.core$deref.invokeStatic(core.clj:2228)
    clojure.core$deref.invoke(core.clj:2214)
    my_project.web$fetch.invokeStatic(web.clj:35)

Line my_project.web.clj:35类似于:

代码语言:javascript
复制
(let [result @(org.httpkit.client/get "http://example.com")]

(我使用普通Java线程而不是core.async,因为我正在运行一组并发Apache Kafka客户机的上下文,每个客户机都在各自的线程中。Kafka客户端确实启动了很多自己的线程,特别是当我运行它几次时,例如5次并行运行)。

事实上,我的所有线程都像这样停放在HTTP Kit中,这表明资源泄漏,或者HTTP Kit中的一些代码在它有机会交付之前就死了,或者可能是资源匮乏。

另一个线程似乎被卡住了。有可能它阻止了所有的promise交付。

代码语言:javascript
复制
sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:850)
sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781)
javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
org.httpkit.client.HttpsRequest.unwrapRead(HttpsRequest.java:35)
org.httpkit.client.HttpClient.doRead(HttpClient.java:131)
org.httpkit.client.HttpClient.run(HttpClient.java:377)
java.lang.Thread.run(Thread.java:748)

有没有什么想法可能是问题,或者如何诊断它的建议?

EN

回答 1

Stack Overflow用户

发布于 2017-08-14 18:54:49

一种常见的做法是设置一个DefaultUncaughtExceptionHandler。这至少会给你一个指示,如果你的线程中有异常。

代码语言:javascript
复制
(defn init-jvm-uncaught-exception-logging []
  (Thread/setDefaultUncaughtExceptionHandler
    (reify Thread$UncaughtExceptionHandler
      (uncaughtException [_ thread ex]
        (log/error ex "Uncaught exception on" (.getName thread))))))

Stuart Sierra在这方面写得很好:https://stuartsierra.com/2015/05/27/clojure-uncaught-exceptions

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45619098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档