ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java线程:解释正在运行的JVM的线程状态

2019-06-07 07:00:02  阅读:370  来源: 互联网

标签:java multithreading stack-trace performance jstack


Java线程始终处于以下十种状态之一:

NEW: Just starting up, i.e., in process of being initialized.
NEW_TRANS: Corresponding transition state (not used, included for completness).
IN_NATIVE: Running in native code.
IN_NATIVE_TRANS: Corresponding transition state.
IN_VM: Running in VM.
IN_VM_TRANS: Corresponding transition state.
IN_JAVA: Running in Java or in stub code.
IN_JAVA_TRANS: Corresponding transition state (not used, included for completness).
BLOCKED: Blocked in vm.
BLOCKED_TRANS: Corresponding transition state.

列表中省略了未使用状态(UNINITIALIZED).

虽然上面给出了状态的定义,但我正在寻找用于解释正在运行的应用服务器的给定线程状态设置的“经验法则”.而且,更具体地说:

假设在不同时间点使用以下线程统计信息(使用jstack获取)的实时应用程序服务器:

> 100个主题:35个已阻止,65个IN_NATIVE
> 113个线程:35个阻塞,77个IN_NATIVE,1个IN_VM
> 52个主题:38个BLOCKED,1个IN_JAVA,6个IN_NATIVE,7个IN_VM
> 120个主题:39个BLOCKED,1个IN_JAVA,80个IN_NATIVE
> 94个主题:34个BLOCKED,59个IN_NATIVE,1个IN_NATIVE_TRANS

对于五个统计信息中的每个线程 – 可以推断出与整个JVM状态有关的内容?即“在这种情况下,JVM看起来正在等待请求”,“机器正忙于处理请求”等.

解决方法:

此级别的输出无法提供足够的信息来进行此类陈述.

举个例子,考虑一下BLOCKED状态:有很多东西可以导致线程被阻塞.其中两个正在等待来自客户端的数据,并等待数据从数据库返回.在第一种情况下,您的应用程序处于空闲状态,而第二种情况则是超载.

编辑:没有看过jstack的输出,我想这两个条件也可以表示为IN_NATIVE.但是,同样的评论认为:你不知道他们在做什么,所以你不能对整个应用程序做任何陈述.

标签:java,multithreading,stack-trace,performance,jstack
来源: https://codeday.me/bug/20190607/1192035.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有