3

我正在使用 JProfiler 检测 Restful Java 微服务,同时使用 JMeter 发送多个请求。我看到有很多阻塞的线程。微服务使用Spring、SpringBoot。当发送多个请求时,会以某种方式出现问题。

在 JProfiler 工具中,我可以看到: 概述 主题历史 监控使用情况 监控历史 线程转储

  • 在我阅读:循环死锁哲学家就餐后,我认为存在循环死锁。这是正确的吗?
  • 死锁和循环死锁有什么区别?在互联网上浏览了一下之后,我看到了另一个概念,循环等待。循环等待呢?
  • 如果您查看 Monitor History 和 Overview 部分,您会看到很多阻塞的线程,还有一个线程等待其他线程完成。问题在于ReentrantLock.NonfairSync类。但是,如果您查看 Thread Dump,您会看到线程处于 Waiting 状态,并且在 stacktrace 的顶部您会看到sun.misc.Unsafe.park。使用方法 park 和 unpark 来实现线程锁。你知道它可以是什么吗?
  • com.fasterxml 库可能再次出现问题吗?杰克逊项目

谢谢

4

1 回答 1

0

在我阅读:循环死锁,哲学家用餐后,我认为存在循环死锁。这是正确的吗?

根据证据不能说。

死锁和循环死锁有什么区别?

我以前从未见过循环死锁这个词,但在那篇文章的上下文中,“循环”似乎意味着有两个以上的线程死锁。在我看来,这并不是一个特别有用的区别。

在互联网上浏览了一下之后,我看到了另一个概念,循环等待。循环等待呢?

我在 Wikipedia Deadlock页面中找到了这个术语。在这种情况下,它指的是您有 N 个代理(例如线程)A 1到 A N的任何情况,并且:

  • A 1等待 A 2
  • A 2等待 A 3
  • ...
  • A N等待 A 1

在依赖项中创建一个“圆圈”或循环。请注意,它N可以小到 2。(这在 Wikipedia 页面中有清楚的解释。)

使用方法 park 和 unpark 来实现线程锁。你知道它可以是什么吗?

这就是在 JVM 中实现锁和等待的方式。

可能com.fasterxml.jackson又是图书馆的问题?

这是可能的。您使用库的方式也可能存在问题。然而,这是猜测。根据您提供的信息,没有足够的证据表明问题出在哪里。


我建议你停止寻找答案。相反,戴上你的思考帽,开始阅读代码和 javadocs。

如果我猜的话,可能是您有多个线程试图共享某种 XML 解析器对象,而该对象并非旨在共享

于 2018-03-02T11:15:24.217 回答