CN117149482A - 一种对线程状态进行检测的方法和装置、电子设备、介质 - Google Patents

一种对线程状态进行检测的方法和装置、电子设备、介质 Download PDF

Info

Publication number
CN117149482A
CN117149482A CN202311007765.3A CN202311007765A CN117149482A CN 117149482 A CN117149482 A CN 117149482A CN 202311007765 A CN202311007765 A CN 202311007765A CN 117149482 A CN117149482 A CN 117149482A
Authority
CN
China
Prior art keywords
thread
sub
abnormal
state
response
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
Application number
CN202311007765.3A
Other languages
English (en)
Inventor
陈志熙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Clou Electronics Co Ltd
Original Assignee
Shenzhen Clou Electronics Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Clou Electronics Co Ltd filed Critical Shenzhen Clou Electronics Co Ltd
Priority to CN202311007765.3A priority Critical patent/CN117149482A/zh
Publication of CN117149482A publication Critical patent/CN117149482A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0778Dumping, i.e. gathering error/state information after a fault for later diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请提出的一种对线程状态进行检测的方法和装置、电子设备、介质,涉及计算机技术领域。该方法包括:基于预设的第一查询命令和第一周期,检查子线程的运行状态;响应于检查出运行状态为子线程异常退出,则判定子线程为异常子线程,且记录异常子线程状态为子线程异常退出状态;响应于检查出运行状态为子线程正在运行,则基于预设的心跳命令和第二周期,检查子线程的心跳状态;其中,心跳状态由子线程以第三周期更新,第一周期小于第二周期,第三周期小于第二周期;响应于检查出心跳状态为心跳异常,则判定子线程为异常子线程,记录异常子线程状态为无休眠死循环状态或子线程死锁状态。本申请能够提高检测灵敏度的同时,能够记录线程异常原因。

Description

一种对线程状态进行检测的方法和装置、电子设备、介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种对线程状态进行检测的方法和装置、电子设备、介质。
背景技术
在相关技术中,可以通过其他的后台程序、其他的应用程序或看门狗等功能对整个应用程序进行检测,其只能保证被检测应用程序的发送心跳信息或喂狗线程运行正常,无法对被检测应用程序的其余线程状态做出反应。例如,当其他线程出现异常时,应用程序可能出现功能异常,但是还不满足被其他应用程序检测到的程度,所以被检测应用程序将保持功能异常的状态继续运行。
在相关技术中,还可以基于超时时间与子线程的更新时间的比较来判定子线程是否出现异常。但该方式无法判定线程异常原因,仅能以线程是否周期更新心跳来判定线程出现异常。且这种方式灵敏度不高,超时时间及子线程的更新时间基本都是以秒甚至分钟为单位,当线程出现问题后,需要较长时间,才会被监控到。
可见,相关技术缺少一个灵敏度高、且能够记录线程异常原因的检测技术。
发明内容
本申请实施例的主要目的在于提出一种对线程状态进行检测的方法和装置、电子设备、介质,能够提高检测灵敏度的同时,能够记录线程异常原因。
为实现上述目的,本申请实施例的第一方面提出了一种对线程状态进行检测的方法,所述方法应用于应用程序的多个子线程中的目标子线程,所述方法包括:
基于预设的第一查询命令和预设的第一周期,检查所述子线程的运行状态;
响应于检查出所述运行状态为子线程异常退出,则判定所述子线程为异常子线程,且记录异常子线程状态为子线程异常退出状态;
响应于检查出所述运行状态为子线程正在运行,则基于预设的心跳命令和预设的第二周期,检查所述子线程的心跳状态;其中,所述心跳状态由所述子线程以预设的第三周期更新,所述第一周期小于所述第二周期,所述第三周期小于所述第二周期;
响应于检查出所述心跳状态为心跳异常,则判定所述子线程为所述异常子线程,记录异常子线程状态为无休眠死循环状态或子线程死锁状态。
可选地,所述响应于检查出所述心跳状态为心跳异常,则判定所述子线程为所述异常子线程,且记录异常子线程状态为无休眠死循环状态或子线程死锁状态,包括:
响应于检查出所述心跳状态为心跳异常,则基于预设的第二查询命令,检查所述子线程的资源占用数据;
响应于确定出所述资源占用数据大于预设的资源占用阈值,则判定所述子线程为所述异常子线程,且记录异常子线程状态为所述无休眠死循环状态;
响应于确定出所述资源占用数据小于或等于所述资源占用阈值,则判定所述子线程为所述异常子线程,且记录异常子线程状态为所述子线程死锁状态。
可选地,所述响应于确定出所述资源占用数据小于或等于所述资源占用阈值,则判定所述子线程为所述异常子线程,且记录异常子线程状态为所述子线程死锁状态,包括:
响应于确定出所述资源占用数据小于或等于所述资源占用阈值,则在预设的线程无响应时间之后,获取所述运行状态和所述心跳状态;
响应于所述运行状态为所述子线程正在运行、且所述心跳状态为所述心跳异常,则判定所述子线程为所述异常子线程,且记录异常子线程状态为所述子线程死锁状态。
可选地,所述资源占用数据包括CPU占用率和内存占用率,所述资源占用阈值包括CPU占用阈值和内存占用阈值;
所述响应于确定出所述资源占用数据大于预设的资源占用阈值,包括:
响应于所述CPU占用率大于所述CPU占用阈值,和所述内存占用率大于所述内存占用阈值中的至少一个;
所述响应于确定出所述资源占用数据小于或等于所述资源占用阈值,包括:
响应于所述CPU占用率小于或等于所述CPU占用阈值,且所述内存占用率小于或等于所述内存占用阈值。
可选地,在所述基于预设的第一查询命令和预设的第一周期,检查所述子线程的运行状态之前,所述方法还包括:
创建所述子线程,并记录子线程的启动条件;
在所述基于预设的第一查询命令和预设的第一周期,检查所述子线程的运行状态之后,所述方法还包括:
响应于判定出所述子线程为所述异常子线程,且所述异常子线程状态为所述线程异常退出状态或所述无休眠死循环状态,则基于所述启动条件重启所述子线程或重启所述应用程序;
响应于判定出所述子线程为所述异常子线程,且所述异常子线程状态为所述子线程死锁状态,则通过释放所述子线程的锁恢复所述子线程,若恢复失败,则基于所述启动条件重启所述子线程或重启所述应用程序。
可选地,在所述响应于判定出所述子线程为所述异常子线程之后,所述方法还包括:
累计子线程异常次数;
所述基于所述启动条件重启所述子线程或重启所述应用程序,包括:
响应于所述子线程异常次数小于或等于预设的异常次数阈值,则基于所述启动条件,重启所述子线程;
响应于所述子线程异常次数大于所述异常次数阈值,则重启所述应用程序。
可选地,在所述响应于判定出所述子线程为所述异常子线程之后,所述方法还包括:
记录出现异常时间;
所述响应于所述子线程异常次数大于所述异常次数阈值,则重启所述应用程序,包括:
响应于所述子线程异常次数大于所述异常次数阈值,获取所述子线程异常次数对应的所述出现异常时间,得到第一出现异常时间,以及获取所述子线程异常次数减1对应的所述出现异常时间,得到第二出现异常时间;
根据所述第一出现异常时间和所述第二出现异常时间,计算异常出现时间差;
响应于所述异常出现时间差小于或等于预设的时间差阈值,重启所述应用程序。
为实现上述目的,本申请实施例的第二方面提出了一种对线程运行状态进行检测的装置,所述装置应用于应用程序的多个子线程中的目标子线程,所述装置包括:
第一检查模块,用于基于预设的第一查询命令和预设的第一周期,检查所述子线程的运行状态;
第一判定模块,用于响应于检查出所述运行状态为子线程异常退出,则判定所述子线程为异常子线程,且记录异常子线程状态为子线程异常退出状态;
第二检查模块,用于响应于检查出所述运行状态为子线程正在运行,则基于预设的心跳命令和预设的第二周期,检查所述子线程的心跳状态;其中,所述心跳状态由所述子线程以预设的第三周期更新,所述第二周期大于所述第一周期,所述第二周期大于所述第三周期;
第二判定模块,用于响应于检查出所述心跳状态为心跳异常,则判定所述子线程为所述异常子线程,记录异常子线程状态为无休眠死循环状态或子线程死锁状态。
为实现上述目的,本申请实施例的第三方面提出了一种电子设备,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述的对线程状态进行检测的方法。
为实现上述目的,本申请实施例的第四方面提出了一种存储介质,所述存储介质为计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的对线程状态进行检测的方法。
本申请实施例提出的一种对线程状态进行检测的方法和装置、电子设备及存储介质,在本申请实施例中,先基于第一周期和第一查询命令检查子线程的运行状态,可以基于运行状态可以得知子线程正在运行,还是子线程线程异常退出。即使判定子线程的运行状态为正在运行,也并不代表子线程未出现故障。因此,又以第二周期和心跳命令检查子线程的心跳状态,该心跳状态由子线程以第三周期更新,响应于检查出心跳状态为心跳异常,则判定子线程为异常子线程。一方面,设置第一周期小于第二周期,使得基于第一查询命令可以及时检查出运行状态为子线程异常退出。另一方面,设置第三周期小于第二周期,确保心跳命令能够及时检查到准确的心跳状态。这样一来,提高了检测灵敏度。此外,由于采用了第一查询命令和心跳命令共同对线程状态进行检测的方式,本申请实施例除了能够判断子线程为异常子线程之外,还可以记录异常子线程状态,包括线程异常退出状态、无休眠死循环状态或子线程死锁状态。综上所述,本申请实施例能够提高检测灵敏度的同时,能够记录线程异常原因。
附图说明
图1是本申请实施例提供的对线程状态进行检测的方法的流程图;
图2是本申请实施例提供的基于资源占用数据确定异常子线程状态的流程图;
图3是本申请实施例提供的基于资源占用数据和线程无响应时间确定异常子线程状态的流程图;
图4是本申请实施例提供的关于重启子线程或重启应用程序的流程图;
图5是本申请实施例提供的基于子线程异常次数决定重启子线程或重启应用程序的流程图;
图6是本申请实施例提供的基于异常出现时间差决定重启应用程序的流程图;
图7是本申请个实施例提供的实现细节流程图;
图8是本申请实施例提供的对线程状态进行检测的装置的模块结构框图;
图9是本申请实施例提供的电子设备的硬件结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
需要说明的是,虽然在装置示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于装置中的模块划分,或流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
为了更清楚地理解本申请实施例提供的技术方案,首先,对本申请中涉及的若干名词进行解析:
应用程序:又称APP,指为完成某项或多项特定工作的计算机程序,它运行在用户模式,可以和用户进行交互,具有可视的用户界面。
进程:一个具有独立功能的正在运行的程序。
线程:操作系统能够进行运算调度的最小单位。
线程状态:线程正常运行,可细分为新建、就绪态、运行态;线程阻塞状态,可细分为死锁、死循环;线程异常退出。其中,线程正常运行一般都处于运行态,另外两个状态只有刚开始建立线程的时候有。线程阻塞状态:有正常阻塞状态,正常情况下会自动解除阻塞状态。线程出现异常时,才会进入死锁,死循环。
相关技术中,在多线程运行情况下,对其余单个线程异常的检测存在延时反馈、以及异常原因无法反馈等问题。
本申请实施例提供一种对线程状态进行检测的方法和装置、电子设备、存储介质,具备以下优点:
1.缩短APP的异常恢复时间,减少因APP重启或系统重启导致的数据丢失。
2.减少APP在部分功能异常的情况继续运行的概率,从而提高整个系统运行的稳定性。
3.可记录线程每次发生异常时的具体原因,方便后期维护时,有针对性的查找程序中的BUG并进行修复。
本申请实施例具体通过如下实施例进行说明,首先描述本申请实施例中的对线程状态进行检测的方法。
本申请实施例提供的对线程状态进行检测的方法应用于服务器端中,还可以是运行于终端或服务器端中的软件。服务器端可以配置成独立的物理服务器,也可以配置成多个物理服务器构成的服务器集群或者分布式系统,还可以配置成提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN以及大数据和人工智能平台等基础云计算服务的云服务器;软件可以是实现对线程状态进行检测的方法的应用等,但并不局限于以上形式。
本申请可用于众多通用或专用的计算机系统环境或配置中。例如:服务器计算机、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、包括以上任何系统或设备的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
图1是本申请实施例提供的对线程状态进行检测的方法的一个可选的流程图,该方法应用于应用程序的多个子线程中的目标子线程,该方法可以包括但不限于包括步骤101至步骤104。
步骤101,基于预设的第一查询命令和预设的第一周期,检查子线程的运行状态;
步骤102,响应于检查出运行状态为子线程异常退出,则判定子线程为异常子线程,且记录异常子线程状态为子线程异常退出状态;
步骤103,响应于检查出运行状态为子线程正在运行,则基于预设的心跳命令和预设的第二周期,检查子线程的心跳状态;其中,心跳状态由子线程以预设的第三周期更新,第一周期小于第二周期,第三周期小于第二周期;
步骤104,响应于检查出心跳状态为心跳异常,则判定子线程为异常子线程,记录异常子线程状态为无休眠死循环状态或子线程死锁状态。
需要说明的是,在本实施例中,根据应用程序的多线程中,采用线程检测的方式的将所有线程都纳入检测范围,实时更新每个线程的状态。
下面对步骤101至步骤104进行详细描述。
在一些实施例的步骤101中,基于预设的第一查询命令和预设的第一周期,检查子线程的运行状态。第一查询命令是指能够检查出子线程的运行状态的命令。该第一查询命令可以是Linux命令中的cat命令。Linux命令还包括ps命令、ls命令、和top命令。其中,ps命令可以查询到app对应的pid号。ls命令可以查询到app所有的子线程pid号。cat命令可以查询到子线程的运行状态、内存信息。top命令可以查询到线程的CPU、内存占用率等资源占用数据。在一示例中,ls命令包括ls/proc/2247/task(2247表示目标子线程PID号)。cat命令包括cat/proc/2248/status(2248表示子线程PID号)。
需要说明的是,运行状态指的是线程实际运行状态,如running(运行),sleeping(休眠),如果能够查询到running或sleeping,则运行状态为线程正在运行。如果查询不到的话则为线程异常退出。
第一周期是指目标子线程定时检查子线程的运行状态的时间间隔。例如,第一周期为1毫秒或2毫秒等。具体数值可根据实际检测需求事先设置,本申请实施例不作具体限定。
在一实施例中,第一周期通过以下方式确定:
获取检测精度;
基于检测精度,确定第一周期。
具体地,检测精度是指检测线程状态的精度。该检测精度越高,则第一周期越小。该实施例的好处是,可以基于检测精度灵活设置第一周期,提高了检测灵活性。此外,在检测精度较低的情况下,第一周期较大,可以减少基于第一查询命令检查运行状态的次数,节省了目标子线程的处理资源。
可以理解的是,在步骤101检查子线程的运行状态之后,可以得到运行状态为子线程正在运行或子线程异常退出。基于运行状态的不同取值,目标子线程将有不同的处理方式,即子线程异常退出对应步骤102,而子线程正在运行对应步骤103和步骤104。
在一些实施例的步骤102中,响应于检查出运行状态为子线程异常退出,则判定子线程为异常子线程,且记录异常子线程状态为子线程异常退出状态。具体地,运行状态为子线程异常退出,则说明该子线程为异常子线程,不能再继续正常运行。目标子线程在第一周期内就可以检查出子线程为异常子线程,检测灵敏度较高。另外,可以记录下异常原因和/或保存相关数据,例如,记录下异常子线程状态为子线程异常退出状态。后期可以根据异常原因进行BUG修复及维护升级或后期对相关保存数据进行模型训练使用。
在一些实施例的步骤103中,响应于检查出运行状态为子线程正在运行,则基于预设的心跳命令和预设的第二周期,检查子线程的心跳状态。
具体地,心跳命令是指能够检查出子线程的心跳状态的命令。例如,基于心跳命令周期性检查心跳状态的标志位是否置1,在确定置1后将标志位置0。由子线程更新心跳状态的标志位置1。如果子线程出现异常,则该标志位将长时间不置1。该心跳状态用来辅助后续判断线程状态。
其中,心跳状态由子线程以预设的第三周期更新,第一周期小于第二周期,第三周期小于第二周期。例如,第一周期为1毫秒,第二周期为1秒,第三周期为10毫秒或100毫秒。一方面,设置第一周期小于第二周期,使得基于第一查询命令可以及时检查出运行状态为子线程异常退出。另一方面,设置第三周期小于第二周期,确保心跳命令能够及时检查到准确的心跳状态。这样一来,提高了检测灵敏度。
在一些实施例的步骤104中,响应于检查出心跳状态为心跳异常,则判定子线程为异常子线程,记录异常子线程状态为无休眠死循环状态或子线程死锁状态。可见,即使子线程的运行状态为线程正在运行,也并不代表该子线程并未出现异常。如果心跳状态为心跳异常,则还是会判断子线程为异常子线程,可以减少APP在部分功能异常的情况继续运行的概率,从而提高整个应用程序运行的稳定性。
综上所述,本申请实施例能够提高检测灵敏度的同时,能够记录线程异常原因。
在一实施例中,参照图2,步骤104包括
步骤201,响应于检查出心跳状态为心跳异常,则基于预设的第二查询命令,检查子线程的资源占用数据;
步骤202,响应于确定出资源占用数据大于预设的资源占用阈值,则判定子线程为异常子线程,且记录异常子线程状态为无休眠死循环状态;
步骤203,响应于确定出资源占用数据小于或等于资源占用阈值,则判定子线程为异常子线程,且记录异常子线程状态为子线程死锁状态。
在一些实施例的步骤201中,第二查询命令是指能够检查出资源占用数据的命令。结合上文中对第一查询命令的介绍,该第二查询命令可以是Linux命令中的top命令。该资源占用数据可以体现子线程虽然运行状态为线程正在运行,但可能存在资源占用不合理的情况,从而基于资源占用数据区分子线程的异常原因。
在一些实施例的步骤202中,在资源占用数据大于预设的资源占用阈值的情况下,说明子线程对资源占用不合理,相当于进入了死循环状态,因此不仅判定子线程为异常子线程,且记录异常子线程状态为无休眠死循环状态。
在一些实施例的步骤203中,在资源占用数据小于或等于资源占用阈值的情况下,说明子线程对资源占用较为合理,但由于心跳状态为心跳异常,因此虽判定子线程为异常子线程,但记录异常子线程状态为子线程死锁状态。
该步骤201-203的实施例的好处是,基于资源占用数据进一步区分异常子线程状态,提高异常原因区分的精度,也更有助于后续可以针对性地恢复子线程。
在一实施例中,参照图3,步骤203包括:
步骤301,响应于确定出资源占用数据小于或等于资源占用阈值,则在预设的线程无响应时间之后,获取运行状态和心跳状态;
步骤302,响应于运行状态为子线程正在运行、且心跳状态为心跳异常,则判定子线程为异常子线程,且记录异常子线程状态为子线程死锁状态。
具体地,考虑到运行状态和心跳状态是动态变化的,在资源占用数据小于或等于资源占用阈值的情况下,该子线程很有可能会恢复到运行状态为线程正在运行且心跳状态为心跳正常。因此,设置了一个线程无响应时间,在过去线程无响应时间之后,运行状态还是子线程正在运行且心跳状态为心跳异常,足以说明该子线程恢复正常的可能性较低。因此,判定子线程为异常子线程,且记录异常子线程状态为子线程死锁状态。其中,线程无响应时间一般是1秒、10秒、30秒这些,可根据实际线程功能进行设置。
该步骤301-302的实施例的好处是,基于线程无响应时间给予子线程自动恢复的时间,减少因判定子线程为异常子线程而带来的重启子线程的可能性。
在一实施例中,资源占用数据包括CPU占用率和内存占用率,资源占用阈值包括CPU占用阈值和内存占用阈值;
步骤202中的响应于确定出资源占用数据大于预设的资源占用阈值,包括:
响应于CPU占用率大于CPU占用阈值,和内存占用率大于内存占用阈值中的至少一个;
步骤203中的响应于确定出资源占用数据小于或等于资源占用阈值,包括:
响应于CPU占用率小于或等于CPU占用阈值,且内存占用率小于或等于内存占用阈值。
在该实施例中,基于CPU占用率和内存占用率共同确定资源占用数据与资源占用阈值的关系,提高了确定准确率,从而有助于提高记录异常子线程状态的准确率。
在一实施例中,在步骤101之前,参照图4,该实施例的方法还包括:
步骤401,创建子线程,并记录子线程的启动条件;
在判定子线程为异常子线程之后,该实施例的方法还包括:
步骤402,响应于判定出子线程为异常子线程,且异常子线程状态为线程异常退出状态或无休眠死循环状态,则基于启动条件重启子线程或重启应用程序;
步骤403,响应于判定出子线程为异常子线程,且异常子线程状态为子线程死锁状态,则通过释放子线程的锁恢复子线程,若恢复失败,则基于启动条件重启子线程或重启应用程序。
具体地,目标子线程创建并检测所有的子线程。目标子线程在子线程新创建时,为子线程分配一个ID号并设定线程无响应时间。目标子线程保存子线程的线程标识符、启动函数、启动参数、线程正常休眠时间等启动条件,且该启动条件与之前分配的ID号进行关联。
该实施例可当判定出子线程为异常子线程后,根据识别出来的不同的异常子线程状态,可针对性执行对应策略。例如,当识别出子线程运行出现异常,然后通过创建子线程时保存的子线程的启动条件,先终止出现异常的子线程后重新启动对应子线程。在使用最小的代价保证APP的正常运行。或者,当某个子线程出现异常的情况,先通知其他正在运行的子线程进行数据保存后,重启自身APP。
该步骤401-403的实施例的好处是,基于不同的异常子线程状态可以直接选择重启子线程或重启应用程序,也可以通过释放子线程的锁先尝试恢复子线程,然后再选择重启子线程或重启应用程序。这样一来,实现了恢复子线程的个性化策略,提高了恢复子线程的灵活性。
在一实施例中,步骤402、步骤403中的在响应于判定出子线程为异常子线程之后,参照图5,该实施例的方法还包括:
步骤501,累计子线程异常次数;
步骤402、步骤403中的基于启动条件重启子线程或重启应用程序,包括:
步骤502,响应于子线程异常次数小于或等于预设的异常次数阈值,则基于启动条件,重启子线程;
步骤503,响应于子线程异常次数大于异常次数阈值,则重启应用程序。
具体地,每当判定出子线程为异常子线程,则子线程异常次数加1。如果子线程异常次数小于或等于异常次数阈值,说明该子线程出现异常的此时较少,可以尝试通过重启子线程的方式进行恢复,恢复成功的可能性较高。如果子线程异常次数大于异常次数阈值,说明该子线程出现异常的此时较多,如果尝试通过重启子线程的方式进行恢复,则基本都是恢复失败,因此需要通过重启应用程序的方式进行恢复,这样恢复成功的可能性较高。
该步骤501-503的实施例的好处是,利用子线程异常次数觉得是重启子线程还是重启应用程序,可以提高子线程的恢复成功的可能性。
在一实施例中,步骤402、步骤403中的响应于判定出子线程为异常子线程之后,参照图6,该实施例的方法还包括:
步骤601,记录出现异常时间;
对应地,步骤503包括:
步骤602,响应于子线程异常次数大于异常次数阈值,获取子线程异常次数对应的出现异常时间,得到第一出现异常时间,以及获取子线程异常次数减1对应的出现异常时间,得到第二出现异常时间;
步骤603,根据第一出现异常时间和第二出现异常时间,计算异常出现时间差;
步骤604,响应于异常出现时间差小于或等于预设的时间差阈值,重启应用程序。
具体地,考虑到即使子线程异常次数虽然大于异常次数阈值,但第一出现异常时间与第二出现异常时间的时间差可能会大于时间差阈值,在这种情况下,说明子线程已经很久没出现异常了,可以不重启应用程序而是重启子线程来尝试恢复子线程,这样可以减少因重启应用程序对其它正常子线程的影响。因此,如果异常出现时间差小于或等于预设的时间差阈值,则重启应用程序,如果异常出现时间差大于预设的时间差阈值,则重启子线程。
该步骤601-604的实施例的好处是,减少通过重启应用程序恢复子线程的可能性,从而减少对其他正常子线程的影响,提高了应用程序的稳定性。
下面结合图7示例性描述本申请实施例的实施细节。
如图7所示,本申请实施例包括以下实施细节:
目标子线程根据线程作用设置线程无响应时间,为子线程分配唯一ID号,设置子线程启动函数、启动参数,创建子线程并获取子线程标识符,监控子线程运行。
在收到子线程状态反馈后,判断子线程运行是否异常。如果是,则判断子线程异常次数是否过高。如果异常次数不过高,则终止异常子线程,并记录数据,然后基于启动函数、启动参数进行重启。如果异常次数过高,通知其他线程保存数据,然后重启应用程序。
请参阅图8,本申请实施例还提供对线程状态进行检测的装置,可以实现上述对线程状态进行检测的方法,图8为本申请实施例提供的对线程状态进行检测的装置的模块结构框图,该装置包括:第一检查模块701、第一判定模块702、第二检查模块703、和第二判定模块704。其中,该装置应用于应用程序的多个子线程中的目标子线程,该装置包括:
第一检查模块701,用于基于预设的第一查询命令和预设的第一周期,检查子线程的运行状态;第一判定模块702,用于响应于检查出运行状态为子线程异常退出,则判定子线程为异常子线程,且记录异常子线程状态为子线程异常退出状态;第二检查模块703,用于响应于检查出运行状态为子线程正在运行,则基于预设的心跳命令和预设的第二周期,检查子线程的心跳状态;其中,心跳状态由子线程以预设的第三周期更新,第二周期大于第一周期,第二周期大于第三周期;第二判定模块704,用于响应于检查出心跳状态为心跳异常,则判定子线程为异常子线程,记录异常子线程状态为无休眠死循环状态或子线程死锁状态。
在一实施例中,该装置还包括:
重启模块,用于创建子线程,并记录子线程的启动条件;
重启模块,还用于响应于判定出子线程为异常子线程,且异常子线程状态为线程异常退出状态或无休眠死循环状态,则基于启动条件重启子线程或重启应用程序;
重启模块,还用于响应于判定出子线程为异常子线程,且异常子线程状态为子线程死锁状态,则通过释放子线程的锁恢复子线程,若恢复失败,则基于启动条件重启子线程或重启应用程序。
在一实施例中,重启模块,还用于累计子线程异常次数和记录出现异常时间。
需要说明的是,该对线程状态进行检测的装置的具体实施方式与上述对线程状态进行检测的方法的具体实施例基本相同,在此不再赘述。
本申请实施例还提供了电子设备,电子设备包括:存储器、处理器、存储在存储器上并可在处理器上运行的程序以及用于实现处理器和存储器之间的连接通信的数据总线,程序被处理器执行时实现上述对线程状态进行检测的方法。该电子设备可以为包括平板电脑、车载电脑等任意智能终端。
请参阅图9,图9示意了另一实施例的电子设备的硬件结构,电子设备包括:
处理器801,可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本申请实施例所提供的技术方案;
存储器802,可以采用只读存储器(Read Only Memory,ROM)、静态存储设备、动态存储设备或者随机存取存储器(Random Access Memory,RAM)等形式实现。存储器802可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器802中,并由处理器801来调用执行本申请实施例的对线程状态进行检测的方法;
输入/输出接口803,用于实现信息输入及输出;
通信接口804,用于实现本设备与其他设备的通信交互,可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信;
总线805,在设备的各个组件(例如处理器801、存储器802、输入/输出接口803和通信接口804)之间传输信息;
其中处理器801、存储器802、输入/输出接口803和通信接口804通过总线805实现彼此之间在设备内部的通信连接。
本申请实施例还提供了存储介质,存储介质为计算机可读存储介质,用于计算机可读存储,存储介质存储有一个或者多个程序,一个或者多个程序可被一个或者多个处理器执行,以实现上述对线程状态进行检测的方法。
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本申请实施例描述的实施例是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域技术人员可知,随着技术的演变和新应用场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本领域技术人员可以理解的是,图1-6中示出的技术方案并不构成对本申请实施例的限定,可以包括比图示更多或更少的步骤,或者组合某些步骤,或者不同的步骤。
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。
本申请的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括多指令用以使得一台电子设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序的介质。
以上参照附图说明了本申请实施例的优选实施例,并非因此局限本申请实施例的权利范围。本领域技术人员不脱离本申请实施例的范围和实质内所作的任何修改、等同替换和改进,均应在本申请实施例的权利范围之内。

Claims (10)

1.一种对线程状态进行检测的方法,其特征在于,所述方法应用于应用程序的多个子线程中的目标子线程,所述方法包括:
基于预设的第一查询命令和预设的第一周期,检查所述子线程的运行状态;
响应于检查出所述运行状态为子线程异常退出,则判定所述子线程为异常子线程,且记录异常子线程状态为子线程异常退出状态;
响应于检查出所述运行状态为子线程正在运行,则基于预设的心跳命令和预设的第二周期,检查所述子线程的心跳状态;其中,所述心跳状态由所述子线程以预设的第三周期更新,所述第一周期小于所述第二周期,所述第三周期小于所述第二周期;
响应于检查出所述心跳状态为心跳异常,则判定所述子线程为所述异常子线程,记录异常子线程状态为无休眠死循环状态或子线程死锁状态。
2.根据权利要求1所述的方法,其特征在于,所述响应于检查出所述心跳状态为心跳异常,则判定所述子线程为所述异常子线程,且记录异常子线程状态为无休眠死循环状态或子线程死锁状态,包括:
响应于检查出所述心跳状态为心跳异常,则基于预设的第二查询命令,检查所述子线程的资源占用数据;
响应于确定出所述资源占用数据大于预设的资源占用阈值,则判定所述子线程为所述异常子线程,且记录异常子线程状态为所述无休眠死循环状态;
响应于确定出所述资源占用数据小于或等于所述资源占用阈值,则判定所述子线程为所述异常子线程,且记录异常子线程状态为所述子线程死锁状态。
3.根据权利要求2所述的方法,其特征在于,所述响应于确定出所述资源占用数据小于或等于所述资源占用阈值,则判定所述子线程为所述异常子线程,且记录异常子线程状态为所述子线程死锁状态,包括:
响应于确定出所述资源占用数据小于或等于所述资源占用阈值,则在预设的线程无响应时间之后,获取所述运行状态和所述心跳状态;
响应于所述运行状态为所述子线程正在运行、且所述心跳状态为所述心跳异常,则判定所述子线程为所述异常子线程,且记录异常子线程状态为所述子线程死锁状态。
4.根据权利要求2所述的方法,其特征在于,所述资源占用数据包括CPU占用率和内存占用率,所述资源占用阈值包括CPU占用阈值和内存占用阈值;
所述响应于确定出所述资源占用数据大于预设的资源占用阈值,包括:
响应于所述CPU占用率大于所述CPU占用阈值,和所述内存占用率大于所述内存占用阈值中的至少一个;
所述响应于确定出所述资源占用数据小于或等于所述资源占用阈值,包括:
响应于所述CPU占用率小于或等于所述CPU占用阈值,且所述内存占用率小于或等于所述内存占用阈值。
5.根据权利要求1至4任一项所述的方法,其特征在于,在所述基于预设的第一查询命令和预设的第一周期,检查所述子线程的运行状态之前,所述方法还包括:
创建所述子线程,并记录子线程的启动条件;
在所述基于预设的第一查询命令和预设的第一周期,检查所述子线程的运行状态之后,所述方法还包括:
响应于判定出所述子线程为所述异常子线程,且所述异常子线程状态为所述线程异常退出状态或所述无休眠死循环状态,则基于所述启动条件重启所述子线程或重启所述应用程序;
响应于判定出所述子线程为所述异常子线程,且所述异常子线程状态为所述子线程死锁状态,则通过释放所述子线程的锁恢复所述子线程,若恢复失败,则基于所述启动条件重启所述子线程或重启所述应用程序。
6.根据权利要求5所述的方法,其特征在于,在所述响应于判定出所述子线程为所述异常子线程之后,所述方法还包括:
累计子线程异常次数;
所述基于所述启动条件重启所述子线程或重启所述应用程序,包括:
响应于所述子线程异常次数小于或等于预设的异常次数阈值,则基于所述启动条件,重启所述子线程;
响应于所述子线程异常次数大于所述异常次数阈值,则重启所述应用程序。
7.根据权利要求5所述的方法,其特征在于,在所述响应于判定出所述子线程为所述异常子线程之后,所述方法还包括:
记录出现异常时间;
所述响应于所述子线程异常次数大于所述异常次数阈值,则重启所述应用程序,包括:
响应于所述子线程异常次数大于所述异常次数阈值,获取所述子线程异常次数对应的所述出现异常时间,得到第一出现异常时间,以及获取所述子线程异常次数减1对应的所述出现异常时间,得到第二出现异常时间;
根据所述第一出现异常时间和所述第二出现异常时间,计算异常出现时间差;
响应于所述异常出现时间差小于或等于预设的时间差阈值,重启所述应用程序。
8.一种对线程运行状态进行检测的装置,其特征在于,所述装置应用于应用程序的多个子线程中的目标子线程,所述装置包括:
第一检查模块,用于基于预设的第一查询命令和预设的第一周期,检查所述子线程的运行状态;
第一判定模块,用于响应于检查出所述运行状态为子线程异常退出,则判定所述子线程为异常子线程,且记录异常子线程状态为子线程异常退出状态;
第二检查模块,用于响应于检查出所述运行状态为子线程正在运行,则基于预设的心跳命令和预设的第二周期,检查所述子线程的心跳状态;其中,所述心跳状态由所述子线程以预设的第三周期更新,所述第二周期大于所述第一周期,所述第二周期大于所述第三周期;
第二判定模块,用于响应于检查出所述心跳状态为心跳异常,则判定所述子线程为所述异常子线程,记录异常子线程状态为无休眠死循环状态或子线程死锁状态。
9.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现权利要求1至7任一项所述的对线程状态进行检测的方法。
10.一种计算机可读存储介质,所述存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的对线程状态进行检测的方法。
CN202311007765.3A 2023-08-10 2023-08-10 一种对线程状态进行检测的方法和装置、电子设备、介质 Pending CN117149482A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311007765.3A CN117149482A (zh) 2023-08-10 2023-08-10 一种对线程状态进行检测的方法和装置、电子设备、介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311007765.3A CN117149482A (zh) 2023-08-10 2023-08-10 一种对线程状态进行检测的方法和装置、电子设备、介质

Publications (1)

Publication Number Publication Date
CN117149482A true CN117149482A (zh) 2023-12-01

Family

ID=88899725

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311007765.3A Pending CN117149482A (zh) 2023-08-10 2023-08-10 一种对线程状态进行检测的方法和装置、电子设备、介质

Country Status (1)

Country Link
CN (1) CN117149482A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117827596A (zh) * 2024-03-05 2024-04-05 大连高德瑞信科技有限公司 一种安全可控线程实时监控方法及系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117827596A (zh) * 2024-03-05 2024-04-05 大连高德瑞信科技有限公司 一种安全可控线程实时监控方法及系统
CN117827596B (zh) * 2024-03-05 2024-04-26 大连高德瑞信科技有限公司 一种安全可控线程实时监控方法及系统

Similar Documents

Publication Publication Date Title
US9342426B2 (en) Distributed system, server computer, distributed management server, and failure prevention method
CN110798375B (zh) 一种增强容器集群高可用性的监控方法、系统及终端设备
US8516499B2 (en) Assistance in performing action responsive to detected event
US8601493B2 (en) Application controlling apparatus and storage medium which stores software for the apparatus
CN105095001B (zh) 分布式环境下虚拟机异常恢复方法
CN101452420B (zh) 一种嵌入式软件异常监控和处理装置及其方法
CN107480014B (zh) 一种高可用设备切换方法及装置
CN105229613A (zh) 协调分布式系统中的故障恢复
CN117149482A (zh) 一种对线程状态进行检测的方法和装置、电子设备、介质
CN106940671B (zh) 一种集群中任务线程运行的监控方法、装置及系统
KR20160100399A (ko) 지능형 단말기의 하드웨어가 비정상적으로 작동하는지 여부를 검사하는 방법 및 지능형 단말기
CN111800304A (zh) 进程运行的监测方法、存储介质和虚拟装置
CN110795264A (zh) 监控管理方法及系统、智能管理终端
CN111796954A (zh) 基于jvm的看门狗的控制方法、装置、设备及存储介质
JPH10214208A (ja) ソフトウェアの異常監視方式
CN117499412A (zh) 一种基于高可用链路的集群优化处理方法及其相关设备
CN112035326A (zh) 基于集群节点互检的异常节点任务处理方法及装置
CN113778763B (zh) 一种三方接口服务故障智能切换方法及系统
JP2009151440A (ja) プログラムハング検出方法及びそれを適用したコンピュータ装置
JP6984119B2 (ja) 監視装置、監視プログラム、及び監視方法
CN114281583A (zh) 设备检测方法、装置、电子设备及可读存储介质
CN114296979A (zh) 一种检测物联网设备异常状态的方法及装置
CN103678095A (zh) 一种告警检测方法
CN112367386A (zh) 基于Ignite的自动化运维方法、装置及计算机设备
CN113157493A (zh) 基于检票系统的备份方法、装置、系统和计算机设备

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