“catalina-exec-681”守护进程prio=10 tid=0x00007f530442c800 nid=0x16f7在条件[0x00007f51b9a7b000]java.lang.thread.state:waiting(parking)在sun.misc.unsafe.park(本机方法)-在java.util.concurrent.locks.locks.locks.slocksupport.park(locksupport.186)在java.util.concurrent.locks.abstractQueuedSynchronizer er.java:2043)在java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)在org.apache.tomcat.util.threads.taskQueue.take(taskQueue.java:104)在org.apache.tomcat.util.threads.taskQueue.take(taskQueue.java:104)在olexecutor.java:615)位于org.apache.tomcat.util.threads.taskthread$wrappingrunnable.run(taskthread.java:61)at java.lang.thread.run(thread.java:745)
锁定的可拥有的同步器:-无
我断定没有线程状态是等待状态,所有这些线程都是由tomcat创建的,但50%是等待状态。
嗯,也许是因为你检查的时候他们没有什么可做的-马丁·詹姆斯
这似乎是tomcat线程池。如果他们没有被使用,他们什么也不做。您应该能够将池大小设置为更小的值,但我不认为这会有什么不同。--彼得·劳里
谢谢你的回答,一切都好,没有什么问题。
我们在其中一个模块中使用了Hystrix-断路器模式[library]。usecase是:-我们正在从kafka轮询16个消息,并使用pararllel流处理它们,因此,对于工作流中的每条消息,它需要3个rest调用,这些调用由hystric命令保护。现在,问题是当我尝试运行单个实例时,CPU显示尖峰,线程转储显示许多线程处于等待状态,等待所有3个命令。如下所示:-
用例:每次我需要处理一个作业时创建一个新线程。 目前的实现:我使用的执行器服务与固定大小的线程池,例如50。对于每个作业,我都向executor服务提交一个新线程。 我试图实现的行为更像是自动伸缩。在高峰时间跨越更多的服务器(在本例中是线程)。并在负载不是很高的时候终止额外的服务器并保持最小的服务器计数。
我用绝地武士连接redis服务器。Redis ip值在一个单独的文件中配置,我试图在初始化期间加载该文件 我从redis获取多个密钥的方法如下 当我在属性文件中给出了不正确的ip值时,访问它的请求线程等待了很长一段时间。我的请求不应该因为池中资源不可用而停止。 在这里,我附加了停顿线程的线程转储(即;处于等待状态的线程) 我怎样才能做到这一点?非常感谢您的帮助。提前感谢:-)
我还发现这个帖子在sun.misc.unsafe.park(本地方法)等待,但它对我的情况没有帮助。 在这种情况下,我还可以调查什么来获得更多细节?
无法启动边缘驱动程序,我得到下面提到的错误和代码,我使用的是下面。请帮忙
我只想使用notify方法恢复所有进入等待状态的线程。我不想使用notifyAll()恢复所有处于等待状态的线程。 调用 wait() 将释放内部锁,以便队列中的其他线程可以获取它。我希望最后一个线程直接调用 notify(),这将通知任何处于等待状态的线程再次恢复。等待线程唤醒并调用 notify(),这将再次恢复处于等待状态的线程。