问题标签 [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.
java - 这是循环死锁还是循环等待?
我正在使用 JProfiler 检测 Restful Java 微服务,同时使用 JMeter 发送多个请求。我看到有很多阻塞的线程。微服务使用Spring、SpringBoot。当发送多个请求时,会以某种方式出现问题。
在 JProfiler 工具中,我可以看到:
- 在我阅读:循环死锁,哲学家就餐后,我认为存在循环死锁。这是正确的吗?
- 死锁和循环死锁有什么区别?在互联网上浏览了一下之后,我看到了另一个概念,循环等待。循环等待呢?
- 如果您查看 Monitor History 和 Overview 部分,您会看到很多阻塞的线程,还有一个线程等待其他线程完成。问题在于ReentrantLock.NonfairSync类。但是,如果您查看 Thread Dump,您会看到线程处于 Waiting 状态,并且在 stacktrace 的顶部您会看到sun.misc.Unsafe.park。使用方法 park 和 unpark 来实现线程锁。你知道它可以是什么吗?
- com.fasterxml 库可能再次出现问题吗?杰克逊项目
谢谢
java - Java线程转储中的“等待”与“等待锁定”与“锁定”
查看线程转储,我看到几个 BLOCKED 线程,但有些“等待锁定”,有些“等待”,而只有一个 RUNNABLE 线程可能获得了锁定。我的问题是为什么有些“等待锁定”而其他“等待”?此外,“等待”的线程似乎有锁,但不是实际持有锁的 RUNNABLE 线程,因为它说它锁定了堆栈跟踪中较低地址的对象,那么如果它有锁,为什么它会阻塞(或者它没有锁)?
以下示例: 锁定对象位于 0x00000000c2ad4be8
等待
等待锁定
最后是 RUNNABLE 线程
java - 使用 apache commons 打开连接时线程被阻塞
从我的应用程序中,许多线程正试图从 oracle 获得连接,但我看到一次只有一个线程能够获得连接。在此线程获得连接之前,其他线程被阻塞,这导致应用程序运行缓慢。我需要帮助确定其他线程被阻塞的原因。我的连接数是否比池中的可用连接数少?
持有锁的线程。
java - String.toUpperCase() 上的 Java 阻塞线程
查询 Oracle 数据库时,其中一个线程的锁定时间超过 3 秒。这会在访问 Oracle 数据库时导致许多线程阻塞,从而导致线程数量突然增加和应用程序无响应。我正在使用 Tomcat 8.5、Tomcat 连接池、Java 8。跟踪阻塞线程:
这是 10+ BLOCKED 线程之一的跟踪
我不知道为什么 toUpperCase() 会锁定某些东西(据我所知,它是一些被锁定的 Integer 对象)超过 30 秒,但这每天都会发生多次。线程转储分析器在转储中没有发现任何死锁。Tomcat 池化查询阻塞线程 http-nio-80-exec-433 的日志需要 5 分钟才能完成。
这可能是 jvm、内存或其他问题吗?比如jdbc驱动或者连接池配置问题?
jmeter - JMeter Threads Getting blocked after sometime in test
Using JMeter 5.4.1 and JDK 11 in Non-GUI mode, running at 40 Thread at 5 requests/sec.
- All Listeners Off
- Disabled all assertions, relying on application logs
- Groovy used as scripting language in JSR223, using to emulate Pacing between requests
- Heap Size increased to 12 GB
After around 40 mins or sometime 70 mins, JMeter stops generating load as seen on Web Server logs. I ran Visual VM on JMeter machine, hooked into JMeter process and took a Thread Dump.
Majority of my threads are in Monitor State
Log as below: '''
"Script11 - GetRequest 11-1" #61 prio=5 os_prio=0 cpu=13390.63ms elapsed=4266.73s tid=0x000001d1599d9800 nid=0xee0 waiting for monitor entry [0x000000ca924fe000] java.lang.Thread.State: BLOCKED (on object monitor) at java.io.PrintStream.println(java.base@11.0.11/PrintStream.java:881) - waiting to lock <0x0000000500857638> (a java.io.PrintStream) at org.apache.jmeter.reporters.Summariser.formatAndWriteToLog(Summariser.java:329) at org.apache.jmeter.reporters.Summariser.sampleOccurred(Summariser.java:208) at org.apache.jmeter.threads.ListenerNotifier.notifyListeners(ListenerNotifier.java:58) at org.apache.jmeter.threads.JMeterThread.notifyListeners(JMeterThread.java:1024) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:579) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) at java.lang.Thread.run(java.base@11.0.11/Thread.java:834)
"0x0000000500857638" is Locked on
"Script09 - GetRequest9 9-2" #55 prio=5 os_prio=0 cpu=13562.50ms elapsed=4266.74s tid=0x000001d1599d5000 nid=0x13e0 runnable [0x000000ca91efe000] java.lang.Thread.State: RUNNABLE at java.io.FileOutputStream.writeBytes(java.base@11.0.11/Native Method) at java.io.FileOutputStream.write(java.base@11.0.11/FileOutputStream.java:354) at java.io.BufferedOutputStream.flushBuffer(java.base@11.0.11/BufferedOutputStream.java:81) at java.io.BufferedOutputStream.flush(java.base@11.0.11/BufferedOutputStream.java:142) - locked <0x0000000500857660> (a java.io.BufferedOutputStream) at java.io.PrintStream.write(java.base@11.0.11/PrintStream.java:561) - locked <0x0000000500857638> (a java.io.PrintStream) at sun.nio.cs.StreamEncoder.writeBytes(java.base@11.0.11/StreamEncoder.java:233) at sun.nio.cs.StreamEncoder.implFlushBuffer(java.base@11.0.11/StreamEncoder.java:312) at sun.nio.cs.StreamEncoder.flushBuffer(java.base@11.0.11/StreamEncoder.java:104) - locked <0x00000005008577b8> (a java.io.OutputStreamWriter) at java.io.OutputStreamWriter.flushBuffer(java.base@11.0.11/OutputStreamWriter.java:181) at java.io.PrintStream.write(java.base@11.0.11/PrintStream.java:606) - locked <0x0000000500857638> (a java.io.PrintStream) at java.io.PrintStream.print(java.base@11.0.11/PrintStream.java:745) at java.io.PrintStream.println(java.base@11.0.11/PrintStream.java:882) - locked <0x0000000500857638> (a java.io.PrintStream) at org.apache.jmeter.reporters.Summariser.formatAndWriteToLog(Summariser.java:329) at org.apache.jmeter.reporters.Summariser.sampleOccurred(Summariser.java:208) at org.apache.jmeter.threads.ListenerNotifier.notifyListeners(ListenerNotifier.java:58) at org.apache.jmeter.threads.JMeterThread.notifyListeners(JMeterThread.java:1024) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:579) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) at java.lang.Thread.run(java.base@11.0.11/Thread.java:834)
Heap Utilization is around 1.5GB, allocation is 12 GB CPU Utilization on host machine is around 15% Any suggestions on how to avoid the JMeter threads getting blocked ?
Thanks.
locking - 当前线程在被阻塞并且在持有锁的同时切换上下文时如何释放锁
在这里,我有一个类信号量、等待和信号方法以及其他方法的实现。我的问题是,在查看等待方法时,当我们在该临界区阻塞当前线程时,何时释放等待方法内部的锁?我们可以看到阻塞方法是通过将当前线程放入阻塞队列,并从就绪队列中获取一些其他线程并发生上下文切换来实现的。如果发生上下文切换,则阻塞线程的上下文将保存在 ; 在 block() 方法之后,这意味着后面的行 (unlock()) 没有执行并且上下文被切换。因此,被阻塞的线程永远不会释放锁,还是我错过了什么?那么当我们在临界区切换上下文时,锁是如何释放的呢?这是实现: 类信号量的实现和类信号量的实现续 注意setContext方法和resume是通过setjmp和longjmp方法实现的。