用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
分布式数据库
›
jvm_threads_live_threads 和 jvm_threads_states_threa ...
jvm_threads_live_threads 和 jvm_threads_states_threads 这两个指标之间 ...
天空闲话
论坛元老
|
2025-1-23 03:49:21
|
显示全部楼层
|
阅读模式
楼主
主题
1784
|
帖子
1784
|
积分
5352
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
jvm_threads_live_threads 和 jvm_threads_states_threads 这两个指标之间存在肯定的关系,但它们关注的维度不同。以下是它们的详细关系和区别:
1. jvm_threads_live_threads
含义
:
体现当前 JVM 中存活的线程总数(即当前活动的线程数)。
包罗全部状态的线程(如 RUNNABLE、BLOCKED、WAITING、TIMED_WAITING 等)。
关键数值
:
live:当前存活的线程总数。
daemon:当前存活的保卫线程数。
peak:JVM 启动以来的最大线程数。
用途
:
用于监控线程的总数,帮助判断是否存在线程走漏或线程数异常增长。
2. jvm_threads_states_threads
含义
:
体现当前 JVM 中处于不同状态的线程数。
每个线程的状态会被分类(如 RUNNABLE、BLOCKED、WAITING、TIMED_WAITING 等)。
关键数值
:
new:新建状态的线程数。
runnable:可运行状态的线程数。
blocked:阻塞状态的线程数。
waiting:无限期等候状态的线程数。
timed-waiting:有限期等候状态的线程数。
用途
:
用于分析线程的状态分布,帮助定位性能问题(如线程阻塞、死锁等)。
3. 两者之间的关系
jvm_threads_live_threads 和 jvm_threads_states_threads 之间的关系可以通过以下公式体现:
复制
jvm_threads_live_threads{state="live"} =
jvm_threads_states_threads{state="new"} +
jvm_threads_states_threads{state="runnable"} +
jvm_threads_states_threads{state="blocked"} +
jvm_threads_states_threads{state="waiting"} +
jvm_threads_states_threads{state="timed-waiting"}
复制代码
换句话说,jvm_threads_live_threads 是 jvm_threads_states_threads 中全部状态线程数的总和。
1. 指标界说
1.1 jvm_threads_live_threads
含义
:体现当前 JVM 中存活的线程总数。
包含的子指标
:
live:当前存活的线程总数(包罗全部状态的线程)。
daemon:当前存活的保卫线程数。
peak:JVM 启动以来的最大线程数。
1.2 jvm_threads_states_threads
含义
:体现当前 JVM 中处于不同状态的线程数。
包含的子指标
:
new:新建状态的线程数。
runnable:可运行状态的线程数。
blocked:阻塞状态的线程数。
waiting:无限期等候状态的线程数。
timed_waiting:有限期等候状态的线程数。
terminated:已终止状态的线程数。
2. 指标之间的关系
2.1 jvm_threads_live_threads 中的 live
live
体现当前存活的线程总数,它与 jvm_threads_states_threads 的关系如下:
复制
jvm_threads_live_threads{state="live"} =
jvm_threads_states_threads{state="new"} +
jvm_threads_states_threads{state="runnable"} +
jvm_threads_states_threads{state="blocked"} +
jvm_threads_states_threads{state="waiting"} +
jvm_threads_states_threads{state="timed_waiting"}
复制代码
注意:terminated 状态的线程不计入 live。
2.2 jvm_threads_live_threads 中的 daemon 和 peak
daemon
:体现当前存活的保卫线程数。它与 jvm_threads_states_threads 没有直接关系,因为它只关注线程的类型(保卫线程或非保卫线程),而不关注线程的状态。
peak
:体现 JVM 启动以来的最大线程数。它是一个历史值,与当前线程状态无关。
3. 总结
jvm_threads_live_threads{state="live"}
是 jvm_threads_states_threads 中全部状态线程数的总和(不包罗 terminated 状态的线程)。
jvm_threads_live_threads 中的 daemon 和 peak
与 jvm_threads_states_threads 没有直接关系:
daemon 体现保卫线程的数目。
peak 体现历史最大线程数。
保卫线程(Daemon Thread)
是 Java 中的一种特别线程,它的生命周期依赖于非保卫线程(即用户线程)。以下是保卫线程的详细表明:
1. 保卫线程的界说
保卫线程
是为其他线程(用户线程)提供服务的线程。
当全部的用户线程竣事时,保卫线程会主动退出,即使它还没有完成任务。
保卫线程通常用于执行后台任务,如垃圾回收、监控、日记记载等。
2. 保卫线程的特点
2.1 生命周期
保卫线程的生命周期依赖于用户线程。
当全部的用户线程竣事时,JVM 会主动退出,同时全部的保卫线程也会被强制终止。
2.2 优先级
保卫线程的优先级通常较低,因为它们是为用户线程服务的。
2.3 应用场景
垃圾回收(GC)线程。
监控线程(如性能监控、心跳检测)。
日记记载线程。
3. 保卫线程 vs 用户线程
特性
保卫线程
用户线程
生命周期
依赖于用户线程,用户线程竣事时主动退出独立运行,不会因为其他线程竣事而退出
优先级
通常较低可以设置优先级
应用场景
后台任务(如 GC、监控、日记)主步伐逻辑
默认类型
新创建的线程默认是用户线程需要显式设置为保卫线程
4. 怎样创建保卫线程
在 Java 中,可以通过 setDaemon(true) 将一个线程设置为保卫线程。
4.1 示例代码
java
复制
public class DaemonThreadExample {
public static void main(String[] args) {
Thread daemonThread = new Thread(() -> {
while (true) {
System.out.println("Daemon thread is running...");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
// 设置为守护线程
daemonThread.setDaemon(true);
// 启动线程
daemonThread.start();
// 主线程休眠 3 秒后结束
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Main thread finished.");
}
}
复制代码
4.2 运行结果
复制
Daemon thread is running...
Daemon thread is running...
Daemon thread is running...
Main thread finished.
复制代码
主线程竣过后,保卫线程也会主动退出。
5. 保卫线程的注意事项
5.1 资源清理
保卫线程不应该执行关键任务(如文件写入、数据库操作),因为它可能会被强制终止,导致资源未正确释放。
5.2 线程优先级
保卫线程的优先级通常较低,如果需要高优先级任务,建议使用用户线程。
5.3 线程池中的保卫线程
在线程池中,默认创建的线程是用户线程。如果需要使用保卫线程,可以通过自界说 ThreadFactory 实现。
6. 实际应用场景
6.1 垃圾回收(GC)
JVM 的垃圾回收线程是保卫线程,当全部用户线程竣事时,GC 线程也会主动退出。
6.2 监控任务
比方,监控系统的 CPU 使用率、内存使用率等,可以使用保卫线程定期采集数据。
6.3 日记记载
将日记记载任务交给保卫线程,避免影响主步伐的性能。
7. 总结
保卫线程
是为用户线程提供服务的后台线程。
当全部用户线程竣事时,保卫线程会主动退出。
保卫线程通常用于执行非关键任务(如 GC、监控、日记记载)。
在 Java 中,可以通过 setDaemon(true) 将一个线程设置为保卫线程。
如果有其他问题,请随时告诉我!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
天空闲话
论坛元老
这个人很懒什么都没写!
楼主热帖
css过渡样式
Mysql终端Terminal操作
编程能力提升系列:1. 二维矩阵的最大 ...
【数据库】数据库课程设计一一疫苗接种 ...
C语言执行过程
Java EnumMap values()方法具有什么功 ...
罗景:连接效率优化实践
Kubernetes(K8S) Controller - Statefu ...
Cesium 案例(一) Z-Indexing Geometr ...
如何精简 Prometheus 的指标和存储占用 ...
标签云
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表