CN117971394A - 微服务提供方线程堆栈诊断方法及装置 - Google Patents
微服务提供方线程堆栈诊断方法及装置 Download PDFInfo
- Publication number
- CN117971394A CN117971394A CN202410137422.7A CN202410137422A CN117971394A CN 117971394 A CN117971394 A CN 117971394A CN 202410137422 A CN202410137422 A CN 202410137422A CN 117971394 A CN117971394 A CN 117971394A
- Authority
- CN
- China
- Prior art keywords
- thread
- service
- container
- stack
- log
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 55
- 238000003745 diagnosis Methods 0.000 title claims abstract description 44
- 238000012544 monitoring process Methods 0.000 claims abstract description 25
- 238000004590 computer program Methods 0.000 claims description 20
- 238000012423 maintenance Methods 0.000 abstract description 7
- 230000002159 abnormal effect Effects 0.000 abstract description 4
- 238000012545 processing Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 238000011161 development Methods 0.000 description 4
- 238000002405 diagnostic procedure Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 1
- 244000046052 Phaseolus vulgaris Species 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000013024 troubleshooting Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/362—Debugging of software
- G06F11/366—Debugging of software using diagnostics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45591—Monitoring or debugging support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请提供一种微服务提供方线程堆栈诊断方法及装置,可用于金融领域或智能运维技术领域。所述方法包括:监控业务容器的业务线程的状态;根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满;当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息;根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息。本申请实施例提供的微服务提供方线程堆栈诊断方法及装置,能够实现线程堆栈现场的快照,并快速定位线程满的根因,且对于线程堆栈以及异常日志,容器重启前已缓存,重启不影响日志的获取。
Description
技术领域
本申请涉及智能运维技术领域,具体涉及一种微服务提供方线程堆栈诊断方法及装置。
背景技术
对于微服务提供方出现线程池满异常时线程堆栈获取方案,目前常规方案如下:
第一步、出现线程满报警时通知运维支持人员;
第二步、运维支持人员查询提供方ip,登陆服务器/容器,使用运维工具发送打印jstack命令给提供方进程或者出现报警时运维工具自动打印jstack/javacore线程堆栈日志;
第三步、将线程堆栈日志提供给开发人员,供开发人员分析。
上述方案有如下几个缺点:
时效性落后:在发生线程池满的rpc异常到报警系统发出线程池满异常,存在时延,有可能出现报警系统发生线程池满报警时,请求流量已恢复,导致获取的线程堆栈日志与实际不匹配。
日志文件无法持久保存:目前微服务提供方大部分已转为容器部署,当发生rpc线程池满异常时,一般会导致容器cpu/mem使用率突破硬限制,或者健康检查失败,导致容器强制重启,重启后,上一次容器实例所有挂载文件销毁,即使设置了容器尸体保留策略,一般也只能保留几小时,无法真正持久化。
发明内容
针对现有技术中的问题,本申请实施例提供一种微服务提供方线程堆栈诊断方法及装置,能够至少部分地解决现有技术中存在的问题。
一方面,本申请提出一种微服务提供方线程堆栈诊断方法,包括:
监控业务容器的业务线程的状态;
根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满;
当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息;
根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息。
在一些实施例中,所述方法还包括:
发送所述线程堆栈诊断信息至目标设备。
在一些实施例中,所述监控业务容器的业务线程的状态,包括:
利用jmx容器监控业务容器的业务线程的状态,其中,所述jmx容器集成在所述业务容器所在的业务节点实例中。
在一些实施例中,所述根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满,包括:
当jmx容器的线程计数器统计到所述业务容器正在运行的业务线程的数量达到预设值,则确定所述业务容器的线程池已满。
在一些实施例中,所述当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息,包括:
当所述业务容器的线程池满时,jmx容器向所述业务容器发送线程堆栈快照请求;
所述业务容器根据所述线程堆栈请求生成线程堆栈日志;和/或
当所述业务容器的线程池满时,jmx容器向日志采集器发送业务线程链路信息获取请求;
所述日志采集器根据所述业务线程链路信息获取请求获取所述业务线程的链路信息。
在一些实施例中,所述业务线程的链路信息包括业务线程的链路id。
在一些实施例中,所述根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息,包括:
根据所述线程堆栈日志以及所述业务线程的id,确定各所述业务线程在同一个调用阶段的耗时;
根据各所述业务线程在同一个调用阶段的耗时,生成所述业务容器的线程堆栈诊断信息。
另一方面,本申请提出一种微服务提供方线程堆栈诊断装置,包括:
监控模块,用于监控业务容器的业务线程的状态;
确定模块,用于根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满;
第一生成模块,用于当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息;
第二生成模块,用于根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息。
在一些实施例中,所述装置还包括:
发送模块,用于发送所述线程堆栈诊断信息至目标设备。
在一些实施例中,所述监控模块具体用于:
利用jmx容器监控业务容器的业务线程的状态,其中,所述jmx容器集成在所述业务容器所在的业务节点实例中。
在一些实施例中,所述确定模块具体用于:
当jmx容器的线程计数器统计到所述业务容器正在运行的业务线程的数量达到预设值,则确定所述业务容器的线程池已满。
在一些实施例中,所述第一生成模块具体用于:
当所述业务容器的线程池满时,jmx容器向所述业务容器发送线程堆栈快照请求;
所述业务容器根据所述线程堆栈请求生成线程堆栈日志;和/或
当所述业务容器的线程池满时,jmx容器向日志采集器发送业务线程链路信息获取请求;
所述日志采集器根据所述业务线程链路信息获取请求获取所述业务线程的链路信息。
在一些实施例中,所述业务线程的链路信息包括业务线程的链路id。
在一些实施例中,所述第二生成模块具体用于:
根据所述线程堆栈日志以及所述业务线程的id,确定各所述业务线程在同一个调用阶段的耗时;
根据各所述业务线程在同一个调用阶段的耗时,生成所述业务容器的线程堆栈诊断信息。
本申请实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述的微服务提供方线程堆栈诊断方法的步骤。
本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述任一实施例所述的微服务提供方线程堆栈诊断方法的步骤。
本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法。
本申请实施例提供的微服务提供方线程堆栈诊断方法及装置,通过监控业务容器的业务线程的状态;根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满;当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息;根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息。这样,在监控到线程池满时立即获取线程堆栈日志,能够实现线程堆栈现场的快照,并根据所述线程堆栈日志以及所述业务线程的链路信息快速定位线程满的根因,且对于线程堆栈以及异常日志,容器重启前已缓存,重启不影响日志的获取。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本申请一实施例提供的微服务提供方线程堆栈诊断方法的流程示意图。
图2是本申请一实施例提供的微服务提供方线程堆栈诊断方法的部分流程示意图。
图3是本申请一实施例提供的微服务提供方线程堆栈诊断方法的流程示意图。
图4是本申请一实施例提供的微服务提供方线程堆栈诊断方法的部分流程示意图。
图5是本申请一实施例提供的微服务提供方线程堆栈诊断装置的结构示意图。
图6是本申请一实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本申请实施例做进一步详细说明。在此,本申请的示意性实施例及其说明用于解释本申请,但并不作为对本申请的限定。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意排序。
关于本文中所使用的“第一”、“第二”、……等,并非特别指称次序或顺位的意思,亦非用以限定本申请,其仅为了区别以相同技术用语描述的元件或操作。
关于本文中所使用的“包含”、“包括”、“具有”、“含有”等等,均为开放性的用语,即意指包含但不限于。
关于本文中所使用的“及/或”,包括所述事物的任一或全部排序。
为更好的理解本申请,以下先对本申请中涉及到的技术术语进行详细解释。
Zipkin:Zipkin是一种分布式追踪系统,用于帮助开发人员监测和诊断微服务架构中的应用程序。它可以帮助用户了解在分布式系统中请求是如何在各个微服务之间传播的,并帮助您找到潜在的性能瓶颈和故障点。Zipkin通过收集和展示请求的跟踪数据,使开发人员可以轻松地分析和优化复杂的微服务调用链。该系统通常使用Zipkin客户端库来记录应用程序间的请求信息,并将数据存储在后端存储中,如Elasticsearch或Cassandra。
JMX:MX(Java Management Extensions)是Java平台中的一种管理和监控技术,用于监控和管理Java应用程序的运行时行为。它允许开发人员在应用程序中嵌入管理功能,以便在运行时远程监控和管理Java应用程序的各种方面。通过JMX,开发人员可以定义MBean(Managed Bean),这些MBean是Java对象,暴露一组属性和操作,允许外部系统或工具通过远程连接来监视和管理这些属性和操作。这使得开发人员能够动态地检查和修改应用程序的运行状态,如性能指标、资源利用率、配置参数等,而无需停止应用程序。
线程堆栈:线程堆栈(Thread Stack)是指在多线程编程中,每个线程所拥有的独立执行路径,用于存储线程执行期间的方法调用和局部变量等信息。每个线程在运行时都有自己的线程堆栈,它是线程私有的,不与其他线程共享。线程堆栈是排查和分析线程相关问题的重要工具,比如死锁、异常跟踪等。
本申请提供的微服务提供方线程堆栈诊断方法的执行主体包括但不限于计算机。
图1是本申请一实施例提供的微服务提供方线程堆栈诊断方法的流程示意图,如图1所示,本申请实施例提供的微服务提供方线程堆栈诊断方法,包括:
S101、监控业务容器的业务线程的状态;
步骤S101中,由于目前大部分微服务提供方已实现容器化部署,因此本实施以kubenrets环境下的快照方案为例对本申请提供的微服务提供方线程堆栈诊断方法进行说明。
可通过拦截业务容器的业务线程的方法获取所述业务容器的业务线程的状态。
S102、根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满;
步骤S102中,业务容器中记载了线程池满的条件,例如线程池满的条件为有N各业务线程正处于运行状态,N为正整数,因此,在拦截到所述业务容器的业务线程的状态之后,可以统计当前正在运行的业务线程的数量,当正在运行的业务线程的数量达到N时,则可确定所述业务容器的线程池已满。
S103、当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息;
步骤S103中,当监控到所述业务容器的线程池满时,则立即将线程堆栈快照记录在日志中,实现快照记录。此外,当监控到所述业务容器的线程池满时,还立即提取当前在运行状态的业务线程的链路信息。
S104、根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息。
步骤S104中,利用线程堆栈日志以及业务线程的链路信息,分析造成线程池满的原因,生成所述业务容器的线程堆栈诊断信息。
本申请实施例提供的微服务提供方线程堆栈诊断方法,通过监控业务容器的业务线程的状态;根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满;当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息;根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息。这样,在监控到线程池满时立即获取线程堆栈日志,能够实现线程堆栈现场的快照,并根据所述线程堆栈日志以及所述业务线程的链路信息快速定位线程满的根因,且对于线程堆栈以及异常日志,容器重启前已缓存,重启不影响日志的获取。
在一些实施例中,所述方法还包括:发送所述线程堆栈诊断信息至目标设备。
具体来讲,完成诊断后,可以通过消息推送节点,将线程堆栈日志以及诊断报告等诊断信息推送给目标设备,以使开发、运维人员,帮助开发、运维人员快速定位问题,解决问题。
在一些实施例中,所述监控业务容器的业务线程的状态,包括:利用jmx容器监控业务容器的业务线程的状态,其中,所述jmx容器集成在所述业务容器所在的业务节点实例(业务pod)中。
具体来讲,如图2所示,在业务pod中集成jmx容器,会在业务容器网络中自动加入jmx容器,两个容器共享一个网络流量,因此可以直接监控业务容器的jvm使用情况,jmx容器则可以拦截到所有dubbo线程(业务线程)状态。
在一些实施例中,所述根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满,包括:当jmx容器的线程计数器统计到所述业务容器正在运行的业务线程的数量达到预设值,则确定所述业务容器的线程池已满。
具体来讲,如图2所示,当jmx监控容器的dubbo线程计数器统计到所有dubbo线程(业务线程)已在runnable状态(运行状态),则确定所述业务容器的线程池已满。
在一些实施例中,所述当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息,包括:
当所述业务容器的线程池满时,jmx容器向所述业务容器发送线程堆栈快照请求;所述业务容器根据所述线程堆栈请求生成线程堆栈日志;和/或
当所述业务容器的线程池满时,jmx容器向日志采集器发送业务线程链路信息获取请求;所述日志采集器根据所述业务线程链路信息获取请求获取所述业务线程的链路信息。
具体来讲,如图2所示,当jmx监控容器的dubbo线程计数器统计到所有dubbo线程(业务线程)已在runnable状态(运行状态),则立即调用业务容器的jstack/javacore快照能力,将线程堆栈快照记录在日志中,实现快照记录。
如图3所示,在企业级kubernets环境的单个pod中,一般会注入日志采集组件tf-agent或者flutend,由于在同一个pod中共享网络通信,因此在jmx监控容器监控到线程池满时,可以发送消息给日志采集组件,要求日志采集组件提取当前所有业务线程的链路信息,将采集出的链路信息以及线程池堆栈日志发送给诊断节点。
在一些实施例中,所述业务线程的链路信息包括业务线程的链路id。
如图4所示,在一些实施例中,所述根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息,包括:
S1041、根据所述线程堆栈日志以及所述业务线程的id,确定各所述业务线程在同一个调用阶段的耗时;
S1042、根据各所述业务线程在同一个调用阶段的耗时,生成所述业务容器的线程堆栈诊断信息。
具体来讲,如图3所示,诊断节点可以借助zipkin分析链路id中同一个span阶段(调用阶段)的耗时,实现初步诊断,判断线程池满是由于前面哪个阶段的处理速度降低,导致请求堆积。具体的,可以计算所有正在运行的业务线程在同一个span阶段的平均耗时,利用平均耗时来评估每个span阶段的处理速度。
为更好的理解本申请,以下通过一具体实施例对本申请提供的微服务提供方线程堆栈诊断方法进行详细说明。
本实施例提出了一种基于zipkin与jmx的微服务提供方线程堆栈诊断方法,当出现线程池满时,立即打印当前线程堆栈并通过zipkin获取耗时较长的链路span,完成初步针对,将线程池堆栈和诊断报告推送给运维/开发人员。
本实施例提出的一种基于zipkin与jmx的微服务提供方线程堆栈诊断方法如下:
第一步:线程堆栈现场快照
由于目前大部分微服务提供方已实现容器化部署,因此本实施例讨论kubenrets环境下的快照方案。
如图2所示,在业务pod中默认集成jmx容器,会在业务容器网络中自动加入jmx容器,两个容器共享一个网络流量,因此可以直接监控业务容器的jvm使用情况,jmx容器则可以拦截到所有dubbo线程状态。
当jmx监控容器的dubbo线程计数器统计到所有dubbo线程已在runnable状态,则立即调用业务容器的jstack/javacore快照能力,将线程堆栈快照记录在日志中,实现快照记录。
第二步:线程池满链路诊断
如图3所示,在企业级kubernets环境的单个pod中,一般会注入日志采集组件tf-agent或者flutend,由于在同一个pod中共享网络通信,因此在jmx监控容器监控到线程池满时,会发送消息给日志采集组件,要求日志采集组件提取当前所有业务线程的链路id,将采集出的链路id以及线程池堆栈日志发送给诊断节点。
诊断节点借助zipkin分析链路id中同一个span阶段的耗时,实现初步诊断,判断线程池满是由于前面哪个阶段的处理速度降低,导致请求堆积。
第三步:诊断推送
如图3所示,完成诊断后,会通过消息推送节点,将线程堆栈日志以及诊断报告推送给开发、运维人员,帮助开发、运维人员快速定位问题,解决问题。
本实施例提供的微服务提供方线程堆栈诊断方法,至少具有如下优点:
1、保护异常线程:实现线程堆栈现场的快照
2、快速诊断:利用zipkin实现初步推理,定位线程满的根因
3、日志素材及时推送:对于线程堆栈以及异常日志,容器重启前已缓存,重启不影响日志的获取。
图5是本申请一实施例提供的微服务提供方线程堆栈诊断装置的流程示意图,如图5所示,本申请实施例提供的微服务提供方线程堆栈诊断装置,包括:
监控模块21,用于监控业务容器的业务线程的状态;
确定模块22,用于根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满;
第一生成模块23,用于当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息;
第二生成模块24,用于根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息。
本申请实施例提供的微服务提供方线程堆栈诊断装置,通过监控业务容器的业务线程的状态;根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满;当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息;根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息。这样,在监控到线程池满时立即获取线程堆栈日志,能够实现线程堆栈现场的快照,并根据所述线程堆栈日志以及所述业务线程的链路信息快速定位线程满的根因,且对于线程堆栈以及异常日志,容器重启前已缓存,重启不影响日志的获取。
在一些实施例中,所述装置还包括:
发送模块,用于发送所述线程堆栈诊断信息至目标设备。
在一些实施例中,所述监控模块具体用于:
利用jmx容器监控业务容器的业务线程的状态,其中,所述jmx容器集成在所述业务容器所在的业务节点实例中。
在一些实施例中,所述确定模块具体用于:
当jmx容器的线程计数器统计到所述业务容器正在运行的业务线程的数量达到预设值,则确定所述业务容器的线程池已满。
在一些实施例中,所述第一生成模块具体用于:
当所述业务容器的线程池满时,jmx容器向所述业务容器发送线程堆栈快照请求;
所述业务容器根据所述线程堆栈请求生成线程堆栈日志;和/或
当所述业务容器的线程池满时,jmx容器向日志采集器发送业务线程链路信息获取请求;
所述日志采集器根据所述业务线程链路信息获取请求获取所述业务线程的链路信息。
在一些实施例中,所述业务线程的链路信息包括业务线程的链路id。
在一些实施例中,所述第二生成模块具体用于:
根据所述线程堆栈日志以及所述业务线程的id,确定各所述业务线程在同一个调用阶段的耗时;
根据各所述业务线程在同一个调用阶段的耗时,生成所述业务容器的线程堆栈诊断信息。
本申请实施例提供的装置的实施例具体可以用于执行上述应用于各方法实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。
需要说明的是,本申请实施例提供的微服务提供方线程堆栈诊断方法及装置可用于金融领域,也可用于除金融领域之外的任意技术领域,本申请实施例对微服务提供方线程堆栈诊断方法及装置的应用领域不做限定。
图6为本申请一实施例提供的电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)301、通信接口(Communications Interface)302、存储器(memory)303和通信总线304,其中,处理器301,通信接口302,存储器303通过通信总线304完成相互间的通信。处理器301可以调用存储器303中的逻辑指令,以执行上述任一实施例所述的方法,例如包括:通过监控业务容器的业务线程的状态;根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满;当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息;根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息。
此外,上述的存储器303中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:通过监控业务容器的业务线程的状态;根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满;当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息;根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息。
本实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储计算机程序,所述计算机程序使所述计算机执行上述各方法实施例所提供的方法,例如包括:通过监控业务容器的业务线程的状态;根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满;当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息;根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述的具体实施例,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施例而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种微服务提供方线程堆栈诊断方法,其特征在于,包括:
监控业务容器的业务线程的状态;
根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满;
当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息;
根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
发送所述线程堆栈诊断信息至目标设备。
3.根据权利要求1或2所述的方法,其特征在于,所述监控业务容器的业务线程的状态,包括:
利用jmx容器监控业务容器的业务线程的状态,其中,所述jmx容器集成在所述业务容器所在的业务节点实例中。
4.根据权利要求3所述的方法,其特征在于,所述根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满,包括:
当jmx容器的线程计数器统计到所述业务容器正在运行的业务线程的数量达到预设值,则确定所述业务容器的线程池已满。
5.根据权利要求4所述的方法,其特征在于,所述当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息,包括:
当所述业务容器的线程池满时,jmx容器向所述业务容器发送线程堆栈快照请求;
所述业务容器根据所述线程堆栈请求生成线程堆栈日志;和/或
当所述业务容器的线程池满时,jmx容器向日志采集器发送业务线程链路信息获取请求;
所述日志采集器根据所述业务线程链路信息获取请求获取所述业务线程的链路信息。
6.根据权利要求1所述的方法,其特征在于,所述业务线程的链路信息包括业务线程的链路id。
7.根据权利要求6所述的方法,其特征在于,所述根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息,包括:
根据所述线程堆栈日志以及所述业务线程的id,确定各所述业务线程在同一个调用阶段的耗时;
根据各所述业务线程在同一个调用阶段的耗时,生成所述业务容器的线程堆栈诊断信息。
8.一种微服务提供方线程堆栈诊断装置,其特征在于,包括:
监控模块,用于监控业务容器的业务线程的状态;
确定模块,用于根据所述业务容器的业务线程的状态,确定所述业务容器的线程池是否已满;
第一生成模块,用于当所述业务容器的线程池满时,生成所述业务容器的线程堆栈日志并获取所述业务容器当前在运行状态的业务线程的链路信息;
第二生成模块,用于根据所述线程堆栈日志以及所述业务线程的链路信息,生成所述业务容器的线程堆栈诊断信息。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410137422.7A CN117971394A (zh) | 2024-01-31 | 2024-01-31 | 微服务提供方线程堆栈诊断方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410137422.7A CN117971394A (zh) | 2024-01-31 | 2024-01-31 | 微服务提供方线程堆栈诊断方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117971394A true CN117971394A (zh) | 2024-05-03 |
Family
ID=90854372
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410137422.7A Pending CN117971394A (zh) | 2024-01-31 | 2024-01-31 | 微服务提供方线程堆栈诊断方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117971394A (zh) |
-
2024
- 2024-01-31 CN CN202410137422.7A patent/CN117971394A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11500757B2 (en) | Method and system for automatic real-time causality analysis of end user impacting system anomalies using causality rules and topological understanding of the system to effectively filter relevant monitoring data | |
CA2753019C (en) | Monitoring of distributed applications | |
Kutare et al. | Monalytics: online monitoring and analytics for managing large scale data centers | |
US7702783B2 (en) | Intelligent performance monitoring of a clustered environment | |
US8234631B2 (en) | Method and system for tracing individual transactions at the granularity level of method calls throughout distributed heterogeneous applications without source code modifications | |
US7359831B2 (en) | Diagnostic context | |
US7395458B2 (en) | Diagnostic instrumentation | |
US8490064B2 (en) | Hierarchical debug | |
US9495115B2 (en) | Automatic analysis of issues concerning automatic memory management | |
JP4609380B2 (ja) | 仮想サーバ管理システムおよびその方法ならびに管理サーバ装置 | |
US20200319935A1 (en) | System and method for automatically scaling a cluster based on metrics being monitored | |
US9235491B2 (en) | Systems and methods for installing, managing, and provisioning applications | |
CN109460307B (zh) | 基于日志埋点的微服务调用跟踪方法及其系统 | |
WO2007139612A2 (en) | Evaluating performance of software application | |
CN110290190B (zh) | 一种采集数据的方法、被监控设备及监控服务器 | |
CN112559285A (zh) | 基于分布式服务架构的微服务监控方法及相关装置 | |
US20030212788A1 (en) | Generic control interface with multi-level status | |
US9600523B2 (en) | Efficient data collection mechanism in middleware runtime environment | |
US10474509B1 (en) | Computing resource monitoring and alerting system | |
US8554908B2 (en) | Device, method, and storage medium for detecting multiplexed relation of applications | |
CN114422386B (zh) | 一种微服务网关的监测方法及装置 | |
US20060053021A1 (en) | Method for monitoring and managing an information system | |
CN117971394A (zh) | 微服务提供方线程堆栈诊断方法及装置 | |
CN112764990B (zh) | 一种目标进程的监控方法、装置及计算机设备 | |
US11416376B2 (en) | Investigative platform for software application development and production |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |