最近,我在Java应用程序服务器安装上进行了分析/调整,以识别瓶颈并修复它们。 在此过程中(调整),最常见的操作是在系统加载时检索许多线程转储。 请记住,重载(在某些情况下)可能会产生副作用,可能会导致我们得出错误的结论。 因此,“控制”负载比实际重负载更可取。
当系统处于加载状态时,您会注意到许多Java线程处于RUNNABLE状态,但它们并未真正运行。 他们正在等待“ 某物 ”。
导致线程即使处于RUNNABLE状态也要等待的最常见原因如下:
  1. CPU资源不足 :当运行的线程多于虚拟CPU时,上下文切换,内核,OS作业和系统的其他进程会有延迟是正常的。
  2. RAM不足 :如果您的RAM不足,则您的系统将使用swap,这总是一个问题。
  3. I / O :当线程处于read()或write()调用中并等待数据写入或读取时,该线程处于RUNNABLE状态,但实际上并未运行。
  4. 网络慢 :这与#3有关,因为网络慢得多,它将导致与网络操作有关的“正在运行”线程的较长延迟。
  5. 流程优先级 :流程可以具有不同的优先级。 如果JVM进程以低优先级运行,则其他进程将在CPU中更频繁地运行。 您可以使用top (GNU Linux), prstat (Solaris), 任务管理器 (Windows)之类的工具来执行此操作。
  6. 垃圾收集(GC) :运行GC时,JVM的所有线程(GC线程除外)在某些地方(世界停止)都处于冻结状态。 在这些时候,GC正在删除无用的引用对象,因此释放了堆的可用内存大小(但仅限于此)。 我们必须使用这样的策略(例如CMS或G1),以最小化停靠点的频率和持续时间。
完全由JVM引起的唯一原因是最后一个(GC活动)。 所有其他方面主要取决于操作系统和硬件。 因此,我们还必须始终监视系统(操作系统和硬件),而不仅仅是JVM。
您必须记住,Java不使用/遵循其自己的线程模型。 此外,当前的JVM(热点)使用本机OS线程,并且线程调度由底层OS实现。
参考:处于Java集成和源博客的优点的 JCG合作伙伴 Adrianos Dadis并没有真正运行处于RUNNABLE状态的Java Thread 。

翻译自: https://www.javacodegeeks.com/2012/08/java-thread-at-runnable-state-is-not.html

处于RUNNABLE状态的Java线程未真正运行相关推荐

  1. java线程6种状态转换,Java线程的生命周期和各种状态转换详解

    在Java中,任何对象都有生命周期,线程也不例外,它也有自己的生命周期.当Thread对象创建完成时,线程的生命周期便开始了,当线程任务中代码正常执行完毕或者线程抛出一个未捕获的异常(Exceptio ...

  2. java线程未执行完成,java线程测试-一个奇怪的景况-执行未完成直接结束了

    java线程测试-一个奇怪的状况-执行未完成直接结束了 import org.junit.Test; /** * 同步线程测试 * @author jview * */ public class te ...

  3. Java 线程——创建和运行线程|| lambda表达式就是一个匿名内部类||Thread 与 Runnable 的关系||FutureTask 配合 Thread

    创建和运行线程 方法一,直接使用 Thread 方法二,使用 Runnable 配合 Thread

  4. java 线程的插队运行_Java线程插队

    当某个线程中调用其它线程的join()方法时,调用的线程将被阻塞,直到被join()方法加入的线程执行完成后才会继续运行. 示例: public class ThreadJoin { public s ...

  5. java线程runnable_Java 线程状态之 RUNNABLE

    在上一篇我们粗略谈到了 Java 的6种线程状态,并对其中较为简单的 NEW 和 TERMINATED 做了分析,现在我们具体来看下 State.RUNNABLE状态,即所谓的可运行状态.(以下简称 ...

  6. Java线程基础(5): 线程状态之 Runnable

    目录 什么是 RUNNABLE? 与传统的ready状态的区别 与传统的running状态的区别 当I/O阻塞时 如何看待RUNNABLE状态? 在上一篇我们粗略谈到了 Java 的6种线程状态,并对 ...

  7. 面试:为什么 Java 线程没有Running状态?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | my.oschina.net/goldenshaw/bl ...

  8. 为什么 Java 线程没有 Running 状态?一下被问懵!

    什么是 RUNNABLE? 与传统的ready状态的区别 与传统的running状态的区别 当I/O阻塞时 如何看待RUNNABLE状态? Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状 ...

  9. java 线程状态_Java线程为何没有Running状态?我猜你不知道。

    作者:国栋原文:https://my.oschina.net/goldenshaw/blog/705397 Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事.具体而言, ...

最新文章

  1. Mac设置信认任意来源应用
  2. Linux安装pecl和pear
  3. 假期不能错过的音视频领域技术进展
  4. java war目录_java war包 路径--解决war包中文件路径问题
  5. 「ruby/MiniMagick」用MiniMagick处理图片
  6. 彻底封杀讯雷下载,做好网络管理
  7. 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  8. 【12c】12c RMAN新特性之通过网络远程恢复数据库(RESTORE/Recover from Service)
  9. 容器的六大误区和八大正确场景(颠覆你的认知)
  10. Sopcast for linux更新至3.01!
  11. RabbitMQ(一)
  12. 软件工程_三层架构介绍
  13. 模拟电路实验 04 - | 恒流源式差动放大电路
  14. 意识比智力重要,选择比努力重要
  15. 解决VS在Release下编译程序报“应用程序无法启动,应用程序的并行配置不正确”的问题
  16. QQ群非管理员@所有人的方法
  17. VMware Workstation安装爱快
  18. jquery 下拉列表框 改变 动态 改变相应值
  19. Thinging in Java读后总结
  20. 托管代码和非托管代码

热门文章

  1. DevExperience(1712)
  2. java 拼图_拼图项目的诅咒:为什么Java 9一遍又一遍地延迟?
  3. java ee编译器_Java EE 8 MVC:控制器的详细介绍
  4. modbus调试时间超时_Java调试器和超时
  5. EA问题的JDK14实例
  6. javafx 8u40_JavaFX 8u20天的未来过去(始终在最前面)
  7. javafx canvas_JavaFX技巧2:使用Canvas API进行清晰绘图
  8. -javaagent:_从javaagent迁移到JVMTI:我们的经验
  9. 新的JEP草案将简化Java中的撰写
  10. JDK 12:实际中的切换语句/表达式