程序异常的处理方法、装置、设备及存储介质制造方法及图纸

技术编号:29583762 阅读:21 留言:0更新日期:2021-08-06 19:41
本发明专利技术提供一种程序异常的处理方法、装置、设备及存储介质,该方法包括:若检测到第一业务异常,则向当前存活的第一线程发送第一信号,以使所述第一线程接收到所述第一信号后,将其线程标识及调用栈信息进行存储;等待预设时间后重启所述第一业务所属的目标进程。通过在程序的业务异常时,通知程序内所有存活线程记录其线程标识及调用栈信息,从而可以实现全线程的栈回溯,更方便定位业务异常的根本原因,提高异常问题定位分析效率,解决了现有技术无法定位业务异常的问题。

【技术实现步骤摘要】
程序异常的处理方法、装置、设备及存储介质
本专利技术涉及计算机及通信
,尤其涉及一种程序异常的处理方法、装置、设备及存储介质。
技术介绍
随着多核CPU技术的发展,设计合理的多线程程序可以充分利用多核CPU的计算资源,提高CPU使用率,从而提升程序的整体处理效率,改善并发量等,因此,多线程程序已经成为服务器程序的常态。而在实际程序开发过程中,不可避免地会存在一些考虑不到的异常场景引起程序异常问题,比如死锁、死循环、内存异常访问、IO缓慢等;为了能够定位和解决各种程序异常问题,现有技术中,通常采用栈回溯方法,即在程序启动时,注册接管系统关键信号,当异常信号触发时,通过栈回溯功能,将当前线程的调用栈信息输出到日志文件中,以便于后续相关人员分析日志文件的异常栈信息来定位导致程序崩溃异常的原因。但是,现有技术采用的栈回溯方法只能定位导致程序崩溃的异常问题,而对程序中还容易存在的一些不会产生异常信号的业务异常却无法定位,比如死循环、阻塞挂起等。
技术实现思路
本专利技术实施例提供一种程序异常的处理方法、装置、设备及存储介质,以解决现有技术无法定位不会产生异常信号的业务异常的问题。第一个方面,本专利技术实施例提供一种程序异常的处理方法,包括:若检测到第一业务异常,则向当前存活的第一线程发送第一信号,以使所述第一线程接收到所述第一信号后,将其线程标识及调用栈信息进行存储;等待预设时间后重启所述第一业务所属的目标进程。第二个方面,本专利技术实施例提供一种程序异常的处理装置,包括:第一处理模块,用于若检测到第一业务异常,则向当前存活的第一线程发送第一信号,以使所述第一线程接收到所述第一信号后,将其线程标识及调用栈信息进行存储;第二处理模块,用于等待预设时间后重启所述第一业务所属的目标进程。第三个方面,本专利技术实施例提供一种电子设备,包括:存储器、收发器及至少一个处理器;所述处理器、所述存储器与所述收发器通过电路互联;所述存储器存储计算机执行指令;所述收发器,用于接收用户的配置信息;所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上第一个方面以及第一个方面各种可能的设计所述的方法。第四个方面,本专利技术实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一个方面以及第一个方面各种可能的设计所述的方法。本专利技术实施例提供的程序异常的处理方法、装置、设备及存储介质,通过在程序的业务异常时,通知程序内所有存活线程记录其线程标识及调用栈信息,从而可以实现全线程的栈回溯,更方便定位业务异常的根本原因,提高异常问题定位分析效率,解决了现有技术无法定位业务异常的问题。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术一实施例提供的程序异常的处理方法的流程示意图;图2为本专利技术一实施例提供的线程信息注册流程示意图;图3为本专利技术一实施例提供的进程的主线程初始化流程图;图4为本专利技术一实施例提供的程序异常的处理方法的一种示例性整体流程示意图;图5为本专利技术一实施例提供的程序异常的处理装置的结构示意图;图6为本专利技术一实施例提供的程序异常的处理装置的一种示例性结构示意图;图7为本专利技术一实施例提供的电子设备的结构示意图。通过上述附图,已示出本专利技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本专利技术构思的范围,而是通过参考特定实施例为本领域技术人员说明本专利技术的概念。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。首先对本专利技术所涉及的名词进行解释:GNUCLibrary:GNUC库,又称为glibc(即GNUC运行期库),是一种按照LGPL许可协议发布的,方便从网络下载的C的编译程序,GNUC运行期库是一种C函数库,是程序运行时使用到的一些API集合,它们一般是已预先编译好,以二进制代码形式存在Linux类系统中,GNUC运行期库,通常作为GNUC编译程序的一个部分发布。最主要的应用是配合Linux内核,成为GNU/Linux操作系统一个重要的组成部分。在Linux平台上最广泛使用的C函数库即为glibc,其中包括C标准库的实现,也包括所有系统函数。几乎所有C程序都要调用glibc的库函数,所以glibc是Linux平台C程序运行的基础。glibc提供一组头文件和一组库文件,最基本、最常用的C标准库函数和系统函数在libc.so库文件中,几乎所有C程序的运行都依赖于libc.so,有些做数学计算的C程序依赖于libm.so,多线程的C程序依赖于libpthread.so。死锁:多线程之间在访问共享资源时,会增加互斥锁、读写锁、自旋锁等保护对共享资源的操作,但锁资源使用不当很容易引发死锁的问题,从而导致程序异常阻塞,无法继续工作。死循环:链表操作、循环操作、递归操作等,均存在死循环的风险,造成死循环的根本原因可能是代码基本逻辑问题、内存访问越界问题、内存数据错误、共享资源保护不当问题等。内存异常访问:内存越界访问、重复释放、野指针等非法操作,均会对程序造成致命的影响,可能会引发业务逻辑出错、堆栈异常等问题。IO缓慢:IO操作包括磁盘IO、网络IO等,同步的IO操作会导致调用者阻塞,在IO操作时延变大的场景下,设计不合理的程序会引起业务逻辑异常。此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。在以下各实施例的描述中,“多个”的含义是两个及两个以上,除非另有明确具体的限定。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本专利技术的实施例进行描述。本专利技术一实施例提供一种程序异常的处理方法,用于程序异常时的处理。本实施例的执行主体为程序异常的处理装置,该装置可以设置在电子设备中,该电子设备可以是服务器或者其他可实现的计算机设备。如图1所示,为本实施例提供的程序异常的处理方法的流程示意图,该方法包括:步骤101,若检测到第一业务异常,则向当前存活的第一线程发送第一信号,以使第一线程接收到第一信号后,将其线程标识及调用栈信息进行存储。具体的,可以通过看门狗线本文档来自技高网...

【技术保护点】
1.一种程序异常的处理方法,其特征在于,包括:/n若检测到第一业务异常,则向当前存活的第一线程发送第一信号,以使所述第一线程接收到所述第一信号后,将其线程标识及调用栈信息进行存储;/n等待预设时间后重启所述第一业务所属的目标进程。/n

【技术特征摘要】
1.一种程序异常的处理方法,其特征在于,包括:
若检测到第一业务异常,则向当前存活的第一线程发送第一信号,以使所述第一线程接收到所述第一信号后,将其线程标识及调用栈信息进行存储;
等待预设时间后重启所述第一业务所属的目标进程。


2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
看门狗线程定时检测是否存在业务异常;
所述等待预设时间后重启所述第一业务所属的目标进程,包括:
所述看门狗线程等待预设时间后重启所述目标进程。


3.根据权利要求2所述的方法,其特征在于,所述若检测到第一业务异常,则向当前存活的第一线程发送第一信号,包括:
若检测到第一业务异常,则遍历线程全局表,确定当前存活的第一线程,所述线程全局表中至少包括当前存活的各线程的线程标识;
针对当前存活的每个第一线程,向所述第一线程发送第一信号。


4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
每个线程启动后,将其线程信息注册到所述线程全局表中,线程信息至少包括线程标识;
每个线程退出前,将其线程信息从所述线程全局表中删除。


5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在所述目标进程启动时,注册所述第一信号对应的信号处理函数,并初始化所述线程全局表。


6.根据权利要求1-5任一项所述的方法,其特征在于,所述方法还包括:
若检测到引发程序崩溃异常的信号,则将当前线程的调用栈信息进行存储。


7.一种程序异常的处...

【专利技术属性】
技术研发人员:陈志德刘茂毅王孟宽
申请(专利权)人:北京马赫谷科技有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1