动态可观测线程池
通过对JDK线程池的增强,以及扩展三方框架底层线程池等功能,为业务系统提高线上运行保障能力。
线程池痛点
线程池是一种基于池化思想管理线程的工具,使用线程池可以减少创建销毁线程的开销,避免线程过多导致系统资源耗尽。在高并发以及大批量的任务处理场景,线程池的使用是必不可少的。
如果有在项目中实际使用线程池,相信你可能会遇到以下痛点:线程池随便定义,线程资源过多,造成服务器高负载。线程池参数不易评估,随着业务的并发提升,业务面临出现故障的风险。线程池任务执行时间超过平均执行周期,开发人员无法感知。线程池任务堆积,触发拒绝策略,影响既有业务正常运行。当业务出现超时、熔断等问题时,因为没有监控,无法确定是不是线程池引起。原生线程池不支持运行时变量的传递,比如MDC上下文遇到线程池就GG。无法执行优雅关闭,当项目关闭时,大量正在运行的线程池任务被丢弃。线程池运行中,任务执行停止,怀疑发生死锁或执行耗时操作,但是无从下手。什么是Hippo4j
提供以下功能支持:全局管控管理应用线程池实例。动态变更应用运行时动态变更线程池参数,包括但不限于:核心、最大线程数、阻塞队列容量、拒绝策略等。通知报警内置四种报警通知策略,线程池活跃度、容量水位、拒绝策略以及任务执行时间超长。数据采集支持多种方式采集线程池数据,包括但不限于:日志、内置采集、Prometheus、InfluxDB、ElasticSearch等。运行监控实时查看线程池运行时数据,自定义时间内线程池运行数据图表展示。功能扩展支持线程池任务传递上下文;项目关闭时,支持等待线程池在指定时间内完成任务。多种模式内置两种使用模式:依赖配置中心和无中间件依赖。容器管理Tomcat、Jetty、Undertow容器线程池运行时查看和线程数变更。框架适配Dubbo、Hystrix、RabbitMQ、RocketMQ等消费线程池运行时数据查看和线程数变更。变更审核提供多种用户角色,普通用户变更线程池参数需要Admin用户审核方可生效。动态化插件内置多种线程池插件,支持用户自定义插件以及运行时扩展。多版本适配经过实际测试,已支持客户端SpringBoot1。5。x2。7。5版本(更高版本未测试)。系统截图