在Java中,线程可以有不同的状态:
新建、可运行、阻止、等待、定时等待、终止
但是,当线程被IO阻塞时,其状态为“RUNNABLE”。我如何判断它是否被IO阻止?
您可以检查线程的statckTraces,然后确定最后一个堆栈是否位于与i/o阻塞相关的特定方法中(例如:java.net.SocketInputStream.socketRead0)
这不是一个聪明的方法,但它是有效的。
JProfiler支持您需要的功能,详细信息显示在:JProfiler 3.1的新增功能
另见http://architects.dzone.com/articles/how-analyze-java-thread-dumps
线程转储
转储java线程堆栈你可以找到这样的东西
java.lang.Thread.State: RUNNABLE
at java.io.FileInputStream.readBytes(Native Method)
或
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
您可以理解java正在等待响应。
我建议这个工具Java线程转储分析仪或这个插件TDA
ThreadMXBean
Yu可以使用ThreadMXBean获取更多信息
http://docs.oracle.com/javase/7/docs/api/java/lang/management/ThreadMXBean.html
问题内容: 我有一个在后台运行的线程正在以阻塞方式从输入设备读取事件,现在当我退出应用程序时,我想正确清理线程,但是我不能只运行pthread_join(),因为该线程由于IO阻塞而永远不会退出。 我如何正确解决这种情况?我应该发送一个pthread_kill(theard,SIGIORM)还是一个pthread_kill(theard,SIGALRM)来中断该块?那两个信号是否正确?还是有另一种
在服务器端,内存消耗正常,线程量约为250个,看起来一切正常。我没有看到任何问题,所以我决定解决服务器端标记为严重的所有问题。 我遇到的第一个是: 检测到阻塞的系统关键线程。这可能导致群集范围内的未定义行为[threadname=tcp-comm-worker,blockedfor=13s] https://yadi.sk/d/mme0xrgi3k6lka 补充:这个问题似乎不是无关紧要的,这个消
我有一个quarkus应用程序,我正在尝试使用Restasured进行测试,但在测试时出现了以下错误: 如果我运行这个应用程序并使用postman手动测试,这似乎不会发生,所以这似乎是一个测试设置的问题。 我的测试如下: 控制器内部: 我的服务: 我的存储库: 我也尝试将完整的测试内容包装在
我在使用https域和https套接字io时收到此警告。 我的代码是这样的: 希望有答案来解决这个问题。我已经从其他人那里搜索过,但我申请时发现不起作用。
我们有一个由2个节点a和B组成的集群。 如果我们在节点a上阻止线程的执行(我是通过远程连接到我的VM并放置断点来执行的),那么节点B认为节点a被分段(这是预期的行为)。 在执行上述场景后,节点A上的任何缓存查找都会被卡住,我们永远不会从IGniteCache中获得结果。 我已经编写了一个测试应用程序来重现这个问题。复制这个问题并不困难,但我已经尽力在readme.md中提供了指导 如果你仍然不清楚
夸克有一件事我很难理解。我在Oracle中使用JPA。因此,我有错误IllegalStateExcema:您试图在IO线程上执行阻塞操作。这是不允许的,因为阻塞了IO线程,我在QUUKUS文档中查看了如何在没有这个困难的情况下进行JPA调用。但是所有的例子和文档都使用PostgreSQL或MariaDB与响应客户端。但是我没有找到任何用于经典JDBC客户端的客户端。 我找到了一个部分有效的解决方案