写在前面
大家好,这里是IT学习日记。今日推荐项目:hippo4j,获取方式在文后!
1000+优质开源项目推荐进度:42/1000。如需更多类型优质项目推荐,请在文章后留言。
项目简介
线程池的使用在项目过程中是非常常见的,它可以有效减少创建和销毁线程的开销,提高效率,但是定义不规范也容易引发许多问题如:定义过多,导致服务器高负载等。
那么有没有一款工具能够可视化观察线程池的状况,并根据实际情况动态调整呢,异常时可以告警通知呢?经过在开源社区的一番探索,我找到了这款工具-hippo4j。
hippo4j:是一款基于JAVA语言实现的动态可观测线程池项目,能够有效提高系统运行保障能力,它支持全局管控线程池实例、应用运行时动态变更线程池参数如最大线程数,拒绝策略等,从而优化线程池的性能和资源利用率。
线程池痛点
尽管线程池的使用带来了诸多优势,但也伴随不少隐患。
- 随意定义线程池导致线程资源过多,造成服务器高负载。
- 难以评估线程池参数,随着业务并发增加,故障风险也随之上升。
- 线程池任务执行时间超出平均周期,开发人员难以察觉。
- 任务堆积触发拒绝策略,影响业务正常运行。
- 业务出现超时、熔断等问题时,由于缺乏监控,无法确认是否由线程池引发。
- 原生线程池不支持运行时变量传递,如 MDC 上下文在遇到线程池时失效。
- 无法优雅关闭项目,导致正在运行的线程池任务在项目关闭时被强制丢弃。
- 线程池运行中,任务执行中断,可能是死锁或耗时操作引起,但无法定位原因。
项目特点
如何解决原生线程池带来的诸多弊端呢?Hippo4j在设计层面考虑并解决了这类问题。通过全局管控进行对线程池统一管理,支持可视化监控和动态变更可以更灵活控制线程池,并提供通知策略作为兜底方案,异常情况下可以人为介入避免系统出现崩溃。
- 全局管控 - 统一管理应用中的线程池实例。
- 动态变更 - 支持应用运行时动态调整线程池参数,包括但不限于核心线程数、最大线程数、阻塞队列容量和拒绝策略。
- 通知报警 - 内置四种报警策略,涵盖线程池活跃度、容量水位、拒绝策略和任务执行时间过长。
- 数据采集 - 支持多种数据采集方式,如日志、内置采集、Prometheus、InfluxDB、ElasticSearch 等。
- 运行监控 - 实时监控线程池运行数据,并可视化展示自定义时间段内的运行情况。
- 功能扩展 - 支持线程池任务上下文传递;项目关闭时,可等待线程池在指定时间内完成任务。
- 多种模式 - 内置两种使用模式:依赖配置中心模式和无中间件依赖模式。
- 容器管理 - 支持 Tomcat、Jetty、Undertow 容器线程池的实时查看和线程数动态调整。
- 框架适配 - 适配 Dubbo、Hystrix、RabbitMQ、RocketMQ 等框架的消费线程池运行数据查看和线程数调整。
- 变更审核 - 提供多用户角色管理,普通用户变更线程池参数需经过 Admin 审核后方可生效。
- 动态化插件 - 内置多种线程池插件,支持用户自定义插件及运行时扩展。
- 多版本适配 - 经过测试,支持客户端 SpringBoot 1.5.x 到 2.7.5 版本(更高版本尚未测试)。
功能展示
- 动态线程池:统一管理线程信息,包括动态变更线程池参数和线程池监控可视化
- 线程池审核:管理变更线程池参数的审核,只有审核通过才会实际变更线程池参数
- 容器线程池:统一管理第三方容器的线程池基础信息如:Tomcat、Jetty等
- 通知报警:支持监控线程池异常,并推送异报警通知。现阶段已集成钉钉、企业微信、飞书的消息推送,后续会持续接入邮箱、短信和自定义通知渠道。
项目获取
在文后留言:项目,即可获取!
如果这篇文章对您有帮助,请一定帮我点个 “点赞” 和 “收藏”, 这对我非常重要。我将会继续推荐更多优质项目和新闻