Linux top命令如何确定Java进程的状态?【JAVA教程】

!
也想出现在这里? 联系我们
信息

Linux top命令如何确定Java进程的状态?,第1张

概述Linux top命令如何确定Java进程状态

[更新:在top ,按Shift + H,它显示线程,而不是进程,然后显示Java线程为R,并使用100%的cpu时间,这是我希望发布此问题之前。

由于Java进程有多个线程,每个线程可能处于不同的状态,那么linux top命令如何确定Java进程状态?

如果我运行下面的代码,

public class Test{ public static voID main(String[] args){ while (true){ int n = (int)(Math.random() * 1000); } } }

然后,运行top显示进程状态是S,它使用100%的cpu时间。

如何在linux上运行无限的脚本?

我如何运行长期(无限)的Python进程?

运行给定目录中的所有batch file

如何在循环中使用更less的cpu?

redirecthtaccess的图像到另一台服务器没有redirect循环

此外,运行strace显示,只显示:

futex(0x7f6ba759c9d0,FUTEX_WAIT,26060,NulL

但是,运行Jstack显示主线程是RUNNABLE:

\”main\” prio=10 tID=0x00007fd7ec007800 nID=0x669b runnable [0x00007fd7f5754000] java.lang.Thread.State: RUNNABLE at Test.main(Test.java:5)

Jstack还显示,WAITING状态下只有两个线程:

\”Finalizer\” daemon prio=10 tID=0x00007fd7ec080000 nID=0x66a6 in Object.wait() [0x00007fd7f0252000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) – waiting on <0x00000007ad001310> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133) – locked <0x00000007ad001310> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:177) \”Reference Handler\” daemon prio=10 tID=0x00007fd7ec07e000 nID=0x66a5 in Object.wait() [0x00007fd7f0353000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) – waiting on <0x00000007ad0011e8> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:502) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133) – locked <0x00000007ad0011e8> (a java.lang.ref.Reference$Lock)

如何创build一个非冻结的无限循环?

当windows进入可怕的100%cpu使用僵尸模式时该怎么办

如何处理永远不会执行的代码

在按下键时停止C ++中的无限循环

一个JVM有很多线程在运行,像垃圾回收等那样“管家”,大部分时间处于睡眠状态。

然后,运行顶部显示进程状态是S,它使用100%的cpu时间。

我认为这个问题很有可能与最top决定进程状态的方式有关。 在 *** 作系统级别,单个线程具有运行/等待/休眠状态。 我的猜测是, top命令的启发式算法是为这个过程计算一个名义上的运行/等待/睡眠状态是一种误导。

(和Jstack的输出…和常识…支持这个理论。)

这个线程忙于使用一个cpu,它不睡觉。

\”main\” prio=10 tID=0x00007fd7ec007800 nID=0x669b runnable [0x00007fd7f5754000] java.lang.Thread.State: RUNNABLE at Test.main(Test.java:5)

这表明顶部的信息是不正确的。

有很多关于“为什么你有多个线程,以及他们在Java中做什么”的解释,但是没有太多的解释。 top命令本身非常简单,只需要通过系统调用收集信息,例如使用getrusage来获取cpu使用率。

通常,正如所解释的, top看起来是整个过程,所有的线程一次。 你可以在top按“H”,它将显示单个线程,而不是整个过程,然后你将能够看到所有的Java线程[如果你的屏幕足够高],主要的是使用所有的cpu你的无限循环,其他线程主要是无所事事。

总结

以上是内存溢出为你收集整理的Linux top命令如何确定Java进程的状态?全部内容,希望文章能够帮你解决Linux top命令如何确定Java进程的状态?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞158 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容