问题标签 [blocked-threads]

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.

0 投票
4 回答
1317 浏览

asynchronous - 检测阻塞线程

我有一个关于解决异步应用程序故障的理论(我正在使用 CCR),我想知道是否有人可以确认我的逻辑。

如果使用默认线程数(即每个内核一个)的基于 CCR 的多线程应用程序比指定双倍线程的同一应用程序慢 - 这是否意味着线程在代码中的某处被阻塞

怎么想?这是检测线程是否被无意阻塞的快速有效的方法吗?

0 投票
1 回答
2177 浏览

delphi - Delphi - 终止阻塞的线程

可能重复:
如何优雅地停止长时间执行的线程?

你好。

我有一个需要执行操作的后台线程,它一直工作正常,除了在一种情况下:当资源损坏时。当发生这种情况时,线程在 Execute 方法中的 Load(对该资源)调用中被阻塞。

发生这种情况时,线程不会响应 Terminate 方法(从主线程调用)并被阻塞。

所以,我的问题是:如何正确终止被阻塞的线程(从主线程)。不,我不能修改加载资源的类,或者从以前也不知道资源是否损坏。

0 投票
1 回答
12969 浏览

java - Java ThreadPoolExecutor 在使用 ArrayBlockingQueue 时卡住

我正在开发一些应用程序并使用 ThreadPoolExecutor 来处理各种任务。ThreadPoolExecutor 在一段时间后卡住了。为了在更简单的环境中模拟这一点,我编写了一个简单的代码来模拟这个问题。

尝试执行此代码几次。它通常会在控制台上打印出数字,当所有线程结束时,它就存在。但有时,它完成了所有任务,然后没有被终止。线程转储如下:

在我的实际应用程序中,ThreadPoolExecutor 线程进入此状态,然后停止响应。

问候, 拉维·拉奥

0 投票
3 回答
2924 浏览

java - 为什么我的 PipedOutputStream 死锁了?

我正在尝试使用 PipedInputStream 和 PipedOutputStream 实现一个线程循环缓冲区,但是每次当我在 Decoder 可运行中到达 mHead.write 时它都会锁定。我认为使用单独的线程时不会出现死锁。

编辑:这是我的服务的完整来源http://pastie.org/1179792

logcat 打印出来:

想读
想写

0 投票
1 回答
922 浏览

performance - UnInvertedField.getUnInvertedField() 和 SegmentReader$CoreReaders.getTermsReader 上的多个阻塞线程

我们正在从 Solr 1.3 升级到 Solr 1.4.1。在使用 Solr 1.3 时,我们在“org.apache.lucene.store.FSDirectory$FSIndexInput.readInternal()”上看到了多个阻塞的活动线程。

为了利用 NIO 的优势,在升级到 Solr 1.4.1 时,我们在 "org.apache.solr.request.UnInvertedField.getUnInvertedField() &

SegmentReader$CoreReaders.getTermsReader”。因此,QTimes 从几百毫秒飙升到几千毫秒。单个查询甚至高达 30-40 秒。

  • 数千个查询后会出现多个阻塞线程。
  • 我们没有对相同字段进行分面和排序。
  • 我们的构面字段是多值文本字段,但不存在大文本值。
  • 索引大小 - 大约 10 GB
  • 我们没有在 schema.xml 中指定任何分面方法。
  • 我们的字段值缓存设置是:

有人可以告诉我们为什么我们会看到这些被阻止的线程吗?

此外,如果它们与我们的字段值缓存相关,那么大小为 175 的缓存将被很少的初始查询填满,然后我们应该看到多个阻塞线程?

如果我们有 "facet.method = enum" 会有什么不同?

这是否都与 fieldValueCache 相关,还是我们需要设置一些其他配置来避免这些阻塞线程?

谢谢,

拉奇塔

缓存值示例:

facetField1_27443 :
{field=facet1_27443,memSize=4214884,tindexSize=52,time=22,phase1=15,nTerms=4,bigTerms=0,termInstances=6,uses=1}

facetField1_70 :
{field=facetField1_70,memSize=4223310,tindexSize=308,time=28,phase1=21,nTerms=636,bigTerms=0,termInstances=14404,uses=1}

facetField2:{field=facetField2,memSize=4262644,tindexSize=3156,time=273,phase1=267,nTerms=12188,bigTerms=0,termInstances=1255522,uses=7031}

“org.apache.solr.request.UnInvertedField.getUnInvertedField() - BLOCKED”的堆栈跟踪

在 org.apache.solr.request.UnInvertedField.getUnInvertedField (UnInvertedField.java:837) 在 org.apache.solr.request.SimpleFacets.getTermCounts (SimpleFacets.java:250) 在 org.apache.solr.request.SimpleFacets.getFacetFieldCounts (SimpleFacets.java:283) 在 org.apache.solr.request.SimpleFacets.getFacetCounts (SimpleFacets.java:166) 在 org.apache.solr.handler.component.FacetComponent.process (FacetComponent.java:72) 在 org. org.apache.solr.handler.RequestHandlerBase.handleRequest (RequestHandlerBase.java:131) 中的 apache.solr.handler.component.SearchHandler.handleRequestBody (SearchHandler.java:195) org.apache.solr.core.SolrCore.execute ( SolrCore.java:1316) 在 org.apache.solr.servlet.SolrDispatchFilter.execute (SolrDispatchFilter.java:338) 在 org.apache.solr.servlet.SolrDispatchFilter.doFilter (SolrDispatchFilter.java:241) 在 com.caucho。server.dispatch.FilterFilterChain.doFilter (FilterFilterChain.java:87) 在 com.caucho.server.webapp.WebAppFilterChain.doFilter (WebAppFilterChain.java:187) 在 com.caucho.server.dispatch.ServletInvocation.service (ServletInvocation.java: 266) 在 com.caucho.server.http.HttpRequest.handleRequest (HttpRequest.java:270) 在 com.caucho.server.port.TcpConnection.run (TcpConnection.java:678) 在 com.caucho.util.ThreadPool$Item .runTasks (ThreadPool.java:721) 在 com.caucho.util.ThreadPool$Item.run (ThreadPool.java:643) 在 java.lang.Thread.run (Thread.java:595)handleRequest (HttpRequest.java:270) at com.caucho.server.port.TcpConnection.run (TcpConnection.java:678) at com.caucho.util.ThreadPool$Item.runTasks (ThreadPool.java:721) at com.caucho .util.ThreadPool$Item.run (ThreadPool.java:643) 在 java.lang.Thread.run (Thread.java:595)handleRequest (HttpRequest.java:270) at com.caucho.server.port.TcpConnection.run (TcpConnection.java:678) at com.caucho.util.ThreadPool$Item.runTasks (ThreadPool.java:721) at com.caucho .util.ThreadPool$Item.run (ThreadPool.java:643) 在 java.lang.Thread.run (Thread.java:595)

org.apache.lucene.index.SegmentReader$CoreReaders.getTermsReader() - 阻塞

在 org.apache.lucene.index.SegmentReader$CoreReaders.getTermsReader (SegmentReader.java:170) 在 org.apache.lucene.index.SegmentTermDocs。(SegmentTermDocs.java:52) 在 org.apache.lucene.index.SegmentReader.termDocs (SegmentReader.java:987) 在 org.apache.lucene.index.IndexReader.termDocs (IndexReader.java:1102) 在 org.apache。 lucene.index.SegmentReader.termDocs (SegmentReader.java:981) 在 org.apache.solr.search.SolrIndexReader.termDocs (SolrIndexReader.java:320) 在 org.apache.solr.search.SolrIndexSearcher.getDocSetNC (SolrIndexSearcher.java: 640) 在 org.apache.solr.search.SolrIndexSearcher.numDocs (SolrIndexSearcher.java:1422) 在 com.askme.solrenhancements.facet.ExtendedFacet .getCustomFacetCount (ExtendedFacet.java:132) 在 com.askme.solrenhancements。

0 投票
2 回答
7877 浏览

semaphore - 等待/信号(信号量)实现伪代码如何“工作”?

如果block(thread)停止 athread执行,它如何、在何处以及何时返回?

哪个线程在 ? 之后启用中断Wait()?在另一个线程调用之前thread,被调用的block()不应该返回wakeup(thread)

  • 但是其他线程如何运行?
  • 线程切换到底发生在哪里?
0 投票
1 回答
1245 浏览

java - Java Stack Dump - 等待锁定

我们在 JSP Web 应用程序上使用 java 1.4,有时我们的 Web 应用程序会完全停止。当用户尝试访问主页时,他们得到的页面找不到。

发生这种情况时,我们运行堆栈转储并使用 samurai 我可以看到多个阻塞线程具有相同的消息

我怎样才能确定是什么阻碍了这个线程。有什么工具可以用来识别吗?

谢谢


嗨,Mprivat,非常感谢。我也会把它带给我们的建筑师,看看我们是否可以完成这个升级。由于这只是每隔一段时间才会发生一次,因此需要一些时间才能确定这是否是原因。我会在几个月后反馈,因为只有时间才能告诉我们。多谢

0 投票
5 回答
28622 浏览

c# - 取消阻塞 AcceptTcpClient 调用

大家可能已经知道,在 C# 中接受传入 TCP 连接的最简单方法是循环 TcpListener.AcceptTcpClient()。此外,这种方式将阻止代码执行,直到获得连接。这对 GUI 极为有限,因此我想在单独的线程或任务中监听连接。

有人告诉我,线程有几个缺点,但是没有人向我解释这些是什么。所以我没有使用线程,而是使用了任务。这很好用,但是由于 AcceptTcpClient 方法阻止执行,我找不到任何处理任务取消的方法。

目前代码看起来像这样,但我不知道当我希望程序停止侦听连接时如何取消任务。

首先关闭任务中执行的函数:

二、启动和停止监听服务的功能:

我只需要一些东西来替换 listenTask.Abort() 调用(我将其注释掉,因为该方法不存在)

0 投票
1 回答
152 浏览

java - 如何避免多线程程序因线程等待而阻塞

我有一个模块,可以处理数千个要处理的事务。每笔交易都有多个阶段要经历。该模块以多线程模式执行。我们已经为它可以创建的线程数定义了限制(硬编码)(根据服务器利用率进行限制)。

现在我们遇到了一种情况,线程可能需要等待一段时间(可能超过 24 小时)。由于我们的线程数量有限,并且如果所有线程都等待超过 24 小时,这将完全阻塞应用程序。

我在这里需要的是,我应该如何重用等待等待 24 小时的线程。如果线程处于等待模式,我需要将该线程重用于另一个事务,当原始等待结束时,从它被搁置的位置重新启动原始事务。

我希望上面的描述能帮助你理解问题。

0 投票
1 回答
266 浏览

ssl - 使用 Glassfish 2.1.1、Liferay 5.2 和 SSL 运行的门户收到太多阻塞线程

我有一个在 Glassfish 上运行 SSL 并使用 Liferay 的门户。上次我们发送了一封电子邮件,让大约 200 人同时访问已发布的信息,我们的 Glassfish“停滞不前”。

从服务器我们可以看到系统资源没问题。- Glassfish 最多可使用 8 GB,但使用的是 5 GB - 服务器有 4 个 CPU,总体使用率约为 30% - Glassfish 配置了多达 400 个 HTTP 线程。

一旦我们检测到我们的服务器没有回答用户,我们就启动了一个分析器以了解发生了什么。

线程概述显示了太多被阻塞的线程: HTTPS 线程阻塞其他 HTTPPS 线程
在此处输入图像描述

从堆栈中看不到除了 sun、grizzly、catalina 类之外的代码: 在此处输入图像描述

我想解决这样的问题,但现在我可以判断我是否应该处理我们的代码,我们应该替换一些组件,比如禁用 SSL。

任何想法将不胜感激。

谢谢。