写一个线程来监控各线程是否发生阻塞

简介: 写一个线程来监控各线程是否发生阻塞

在做一个项目,特别是大型项目的过程中,多线程运行无可避免。而某一线程发生阻塞可能影响软件的整体运行。在这里,写一个线程用来监测各线程是否有发生hang的情况,在项目中应用,可以帮助定位具体发生问题的线程。

原理

  1. 监测的线程运行时,根据线程执行频率,更新线程的当前时间 thread_time
  2. 给一个超时时间 timeout_time
  3. 在监听线程中不断check当前时间 now_time 是否大于 thread_time + timeout_time
  4. 如果 now_time > thread_time + timeout_time,说明线程已经有 timeout_time 的时间没有执行,说明该线程发生了hang

接口说明

1. void SetMonitor(pthread_t _id, int _miliTimeout);

  • 在要监测的线程中使用,随着线程的运行频率调用该接口更新当前线程的时间
  • _id:监测的线程id
  • _miliTimeout:超时时间

2. void Process();

  • 在监听线程中使用,不断check线程是否满足发生hang的条件

3. void Stop();

  • 停止check线程是否满足发生hang的条件

源码

源码下载链接:https://download.csdn.net/download/Attitude93/12205063

使用示例

例如要监测主线程是否发生hang:

CThreadMonitor *mon = CThreadMonitor::instance();
pthread_t th_id;
int ret = pthread_create(&th_id, NULL, ThreadMonitor, (void *)mon);
if (ret)
{
  printf("create thread monitor fail\n");
    return;
}
printf("start...");
//======== 下面的代码在线程循环中,不断更新线程当前时间 =================
// about 3 seconds, we can decide the main thread is in hang ( this is a example )
mon.SetMonitor(pthread_self(), 3500);
相关文章
|
6月前
|
Java 数据库 Android开发
【专栏】Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理
【4月更文挑战第27天】本文探讨了Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理。通过案例分析展示了网络请求、图像处理和数据库操作的优化实践。同时,文章指出并发编程的挑战,如性能评估、调试及兼容性问题,并强调了多线程优化对提升应用性能的重要性。开发者应持续学习和探索新的优化策略,以适应移动应用市场的竞争需求。
165 5
|
安全 Java
【JavaSE专栏76】三态和五态,线程的不同状态:新建、运行、状态、阻塞、等待、计时等待状态
【JavaSE专栏76】三态和五态,线程的不同状态:新建、运行、状态、阻塞、等待、计时等待状态
102 0
|
23天前
|
监控 安全 Java
在 Java 中使用线程池监控以及动态调整线程池时需要注意什么?
【10月更文挑战第22天】在进行线程池的监控和动态调整时,要综合考虑多方面的因素,谨慎操作,以确保线程池能够高效、稳定地运行,满足业务的需求。
101 38
|
23天前
|
Prometheus 监控 Cloud Native
JAVA线程池监控以及动态调整线程池
【10月更文挑战第22天】在 Java 中,线程池的监控和动态调整是非常重要的,它可以帮助我们更好地管理系统资源,提高应用的性能和稳定性。
60 4
|
23天前
|
Prometheus 监控 Cloud Native
在 Java 中,如何使用线程池监控以及动态调整线程池?
【10月更文挑战第22天】线程池的监控和动态调整是一项重要的任务,需要我们结合具体的应用场景和需求,选择合适的方法和策略,以确保线程池始终处于最优状态,提高系统的性能和稳定性。
94 2
|
25天前
|
监控 数据可视化 Java
如何使用JDK自带的监控工具JConsole来监控线程池的内存使用情况?
如何使用JDK自带的监控工具JConsole来监控线程池的内存使用情况?
|
2月前
|
Arthas 监控 Java
监控线程池的内存使用情况以预防内存泄漏
监控线程池的内存使用情况以预防内存泄漏
|
2月前
|
监控 数据可视化 Java
使用JDK自带的监控工具JConsole来监控线程池的内存使用情况
使用JDK自带的监控工具JConsole来监控线程池的内存使用情况
|
6月前
|
消息中间件 Linux 调度
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
478 0
【多线程面试题十二】、阻塞线程的方式有哪些?
线程阻塞的方式包括调用sleep()方法、阻塞式IO操作、等待同步监视器的获取、等待通知(notify),以及慎用的suspend()方法。

热门文章

最新文章

相关实验场景

更多