异常信息存储方法及装置、电子设备、存储介质与流程

文档序号:20917384发布日期:2020-05-29 13:42阅读:157来源:国知局
异常信息存储方法及装置、电子设备、存储介质与流程
本申请涉及网络通信领域,特别涉及一种异常信息存储方法及装置、电子设备、存储介质。
背景技术
:为了满足不断增长的用户需求,开发人员在同一台网络设备中配置的应用程序也随之增加,这使得网络设备需要同时处理大量业务,对网络设备的性能也有了更高的要求。为此,网络设备的软件和硬件都被设计得较为复杂。基于上述原因,网络设备在运行的过程中变得较为不稳定,甚至出现死机等异常状况。为了帮助维护人员对异常状况做相应的处理,记录设备在发生异常时的状态信息以便维护人员分析发生异常的原因变得尤为重要。技术实现要素:有鉴于此,本申请提供一种异常信息存储方法及装置、电子设备、存储介质,能够在设备发生异常的情况下,获取并存储cpu和内存中保存的cpu状态信息,以便维护人员基于保存的cpu状态信息分析发生异常的原因。为实现上述目的,本申请提供技术方案如下:根据本申请的第一方面,提出了一种异常信息存储方法,应用于电子设备,所述方法包括:监测cpu的运行状态;在确定cpu发生异常的情况下,获取保存在所述cpu中的当前状态信息和上一状态信息的位置信息,并根据获取到的位置信息从内存中读取所述上一状态信息;将所述上一状态信息与所述当前状态信息作为所述cpu的异常信息,并保存到预分配的存储空间中。根据本申请的第二方面,提出了一种异常信息存储装置,应用于电子设备,所述装置包括:监测单元,监测cpu的运行状态;获取单元,在确定cpu发生异常的情况下,获取保存在所述cpu中的当前状态信息和上一状态信息的位置信息,并根据获取到的位置信息从内存中读取所述上一状态信息;存储单元,将所述上一状态信息与所述当前状态信息作为所述cpu的异常信息,并保存到预分配的存储空间中。根据本申请的第三方面,提供一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器通过运行所述可执行指令以实现如上述实施例中任一所述的方法。根据本申请的第四方面,提供一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如上述实施例中任一所述方法的步骤。在本申请的技术方案中,在cpu发生异常的情况下,将cpu的当前状态信息和上一状态信息作为该cpu的异常信息保存至预分配的存储空间中,使得维护人员可以基于保存的异常信息分析发生本次异常的原因,进而更加准确地进行维护工作。进一步的,本申请优先从cpu中获取上一状态信息的位置信息,再根据该位置信息从内存中获取上一状态信息,使得本申请在获取上一状态信息的过程中,不会获取内存中的其他信息。换言之,本申请保存至预设存储空间的信息均为cpu的状态信息,减少了无效信息对存储空间的占用。附图说明图1是本申请一示例性实施例示出的一种异常信息存储方法的流程图。图2是本申请一示例性实施例示出的一种应用于单cpu电子设备的异常信息存储方法的流程图。图3是本申请一示例性实施例示出的一种应用于多cpu电子设备的异常信息存储方法的流程图。图4是本申请一示例性实施例示出的一种电子设备的结构示意图。图5是本申请一示例性实施例示出的一种异常信息存储装置的框图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。为解决上述技术问题,本申请提出了一种异常信息存储方法。参考图1,图1是本申请一示例性实施例示出的一种异常信息存储方法的流程图。如图1所示,该方法应用于电子设备,该方法可以包括以下步骤:步骤102,监测cpu的运行状态。在相关技术中,在cpu发生异常时,并不会针对性地获取cpu的状态信息,而是会获取cpu和内存中保存的所有信息。这样的方式使得设备中保存了大量的无效信息,且需要预分配大量的存储空间用于保存获取到的信息。其次,由于设备通常需要先将获取到的信息缓存至内存中,因此需要预分配大量内存空间用于缓存获取到的信息,这使得设备在正常运行中能够使用的内存空间变得极为有限,限制了设备的性能。在本实施例中,电子设备可以为嵌入式设备,也可以为非嵌入式设备。其中,嵌入式设备可以为:智能门锁、扫地机器人等;非嵌入式设备可以为手机、平板、pc等。步骤104,在确定cpu发生异常的情况下,获取保存在所述cpu中的当前状态信息和上一状态信息的位置信息,并根据获取到的位置信息从内存中读取所述上一状态信息。在本实施例中,在cpu发生异常的情况下,获取cpu的当前状态信息和上一状态信息的操作可以由cpu中独立的内核执行。通过这样的方式,使得获取状态信息的过程不会受到cpu异常的影响。当然,后续存储获取到的状态信息的操作也可以由该内核执行,使得存储的过程也步骤cpu异常的影响。在实际情况中,cpu的当前状态信息通常保存在cpu的状态寄存器中,而cpu的上一状态信息的位置信息通常保存在cpu的通用寄存器中。因此,在本步骤中,获取cpu的当前状态信息和上一状态信息的位置信息的过程可以包括:从cpu的状态寄存器中获取当前状态信息,以及从cpu的通用寄存器中获取上一状态信息的位置信息。为了实现上述操作,可以在电子设备系统启动时,在内存中注册一个用于异常状况处理的回调函数,该回调函数在cpu发生异常时被调用。具体的,当cpu发生异常时,cpu(可以为上述cpu中用于处理异常状况的内核)执行该回调函数,从状态寄存器中获取cpu的当前状况信息、从通用寄存器中获取上一状态信息的位置信息,再通过获得的位置信息从内存中获取上一状态信息。具体的,可以通过执行该回调函数从通用寄存器中获取栈信息的起始位置和终止位置,并根据获取到的起始位置和终止位置从内存中确定出栈信息的位置,该栈信息中保存的信息即为cpu的上一状态信息。通过这样的方式,获取到的异常信息即为cpu的当前状态信息和上一状态信息,而不会获取内存中的其他信息。可见,通过上述方式获取到均为用于异常分析的有效信息,避免了无效信息占用存储空间的问题。步骤106,将所述上一状态信息与所述当前状态信息作为所述cpu的异常信息,并保存到预分配的存储空间中。在本实施例中,为了后续维护人员能够读取到该异常信息,可以将获取到的异常信息保存至非易失性存储介质中,以保证异常信息在电子设备断电后不会丢失。其中,非易失性存储介质可以有多种形式,具体的,在pc中可以为硬盘;在嵌入式设备中可以为用于存储信息的闪存flash。当然,上述举例仅是示意性的,在实际操作中,非易失性存储介质的形式可以根据具体情况确定,在此不作限定。然而,在实际操作中,获取到的异常信息无法直接存储至非易失性存储介质中,而是需要先缓存至内存中,再将缓存于内存中的异常信息保存至非易失性存储介质中。其次,在cpu发生异常时,很可能无法申请到用于缓存异常信息的内存空间,因此,可以在电子设备的系统启动时,预分配一部分内存空间,以作为cpu异常信息的缓冲队列。在这样的前提下,就无需在cpu发生异常时申请内存空间,只需直接将获取到cpu的异常信息缓存至预分配的缓冲队列中,再将缓冲队列中的异常信息保存至非易失性存储介质中即可。其次,出于同样的原因(即保存异常信息的过程在cpu发生异常时进行),所以要保证预分配的缓冲队列有较强的稳定性。因此,可以将内存中稳定性较强的内核线性地址段分配给该cpu,以作为该cpu用于存储异常信息的缓冲队列。在本实施例中,还可以包括电子设备中包含多个cpu的情况。在这种情况下,当任一cpu发生异常时,除了获取该任一cpu的异常信息之外,还可以向该任一cpu以外的其他cpu发起中断,然后通过上述方式获取其他cpu的上一状态信息和当前状态信息作为该任一cpu的辅助信息,其中,将获取到的辅助信息和异常信息关联存储,以便后续维护人员分析发生异常的原因。除此之外,针对多cpu的电子设备,可以在电子设备启动时,将内存中的缓存空间分配给各个cpu,以作为各个cpu的缓存队列。通过这样的方式,在获取到异常信息和辅助信息后,可以分别将异常信息或辅助信息存储至内存中预先分配给各个cpu的缓冲队列中;然后将缓存在内存中的异常信息和辅助信息保存至非易失性存储介质中,以用于对所述目标cpu进行异常分析。给各个cpu预分配缓冲队列的优势在于,电子设备可以在获取到异常信息和辅助信息之后,将获取到的信息在内存中进行整合,再将其存储至非易失性存储介质中。这样的方式使得维护人员从非易失性存储介质中获取到的信息是按所属cpu排布的,帮助维护人员更为准确地分析发生异常的原因。除此之外,由于本申请优先获取cpu的上一状态信息的位置信息,再获取保存在内存中的cpu的上一状态信息,不会获取内存中的其他信息。这使得获取到的异常信息或辅助信息较小,因此,预分配给各个cpu的缓存队列均只占用内存的一小部分存储空间,在实际情况中,大约仅占用4k-8k的内存空间。值得注意的是,在多cpu的电子设备中,预先分配给各个cpu的缓冲队列也可以为内存的内核线性地址段。通过这样的方式,保证了异常信息或辅助信息缓存于内存中时的稳定性。由上述技术方案可知,在本申请的技术方案中,可以在cpu异常时,获取cpu的当前状态信息和上一状态信息,并将其作为该cpu的异常信息保存至预设存储空间,以便后续维护人员对该异常信息进行分析,并确定发生异常的原因。进一步的,本申请的技术方案优先从cpu中获取上一状态信息的位置信息,再根据该位置信息从内存中获取上一状态信息,使得本申请不会获取内存中与cpu状态无关的信息,进而减少了无效信息对存储空间的占用。为方便理解,接下来以单cpu的电子设备为例,对本申请的技术方案进行介绍。参考图2,图2是本申请一示例性实施例示出的一种应用于单cpu电子设备的异常信息存储方法的流程图,该方法应用于单cpu的电子设备,如图2所示,该方法可以包括以下步骤:步骤201,启动电子设备。步骤202,分配内存空间作为cpu异常信息的缓冲队列。在本实施例中,为保证该缓冲队列的稳定性,可以将内存空间中的内核线性地址段中的一部分作为缓冲队列。通过这样的方式,即使是在cpu发生异常的状况下,也能够避免因缓冲队列的不稳定性造成的无法缓存异常信息的问题。在本实施例中,在电子设备启动时,除了会分配内存空间以作为cpu异常信息的缓冲队列,还会在内存中注册用于异常处理的回调函数。该回调函数在检测到cpu发生异常时执行,用于获取cpu的当前状态信息和上一状态信息以作为cpu的异常信息。步骤203,监测cpu的运行状态。步骤204,当检测到cpu异常时,获取cpu的状态寄存器中的当前状态信息。在本实施例中,当检测到cpu异常时,预先在内存中注册的回调函数便会执行,以获取cpu的状态寄存器中的当前状态信息。除此之外,下一步骤中获取通用寄存器中的上一状态信息的位置信息以及从内存中获取上一状态信息的过程均可以通过执行该回调函数实现。当然,存储异常信息的过程也可以由该回调函数执行。值得注意的是,在实际操作中,可以单独分配一个cpu内核负责异常处理,只有检测到cpu发生异常时,该内核即可调用上述回调函数以进行异常信息的获取与存储。步骤205,获取cpu的通用寄存器中的上一状态信息的位置信息,并根据该位置信息从内存中获取上一状态信息。在本实施例中,获取上一状态信息的位置信息可以包括:获取上一状态信息在内存中的起始位置和终止位置,并根据该起始位置和终止位置在内存中定位上一状态信息,然后获取上一状态信息。步骤206,将获取到的当前状态信息和上一状态信息作为异常信息并缓存至预分配的缓冲队列中。由于在实际操作中,获取到的信息无法直接存储到非易失性存储介质中,因此,需要将获取到的异常信息先缓存至预先分配的缓冲队列中。步骤207,将缓冲队列中的异常信息保存至非易失性存储介质中。在本实施例中,将获取到的异常信息保存至非易失性存储介质中的目的是为了在电子设备断电后,依然能够保留获取到的异常信息,以便后续维护人员从该非易失性存储介质中读取cpu的异常信息以分析发生异常的原因。值得注意的是,该非易失性存储介质在不同的电子设备中以不同的形式存在。举例而言,在大多嵌入式设备中,该非易失性存储介质可以为闪存flash;在pc中,该非易失性存储介质可以为机械硬盘(hdd,harddiskdriver)或固态硬盘(ssd,solidstatedisk)。当然,上述举例仅是示意性的,电子设备中的非易失性存储介质采用的具体形式可以根据实际情况确定。举例而言,pc中完全可以单独再配置一个闪存用于存储cpu的异常信息。由上述技术方案可知,本申请的技术方案可以在cpu发生异常时,将cpu的当前状态信息和上一状态信息作为cpu的异常信息保存至非易失性存储介质中,以便后续维护人员根据该非易失性存储介质中的保存的信息分析发生异常的原因。进一步的,本申请根据cpu的通用寄存器中保存的上一状态信息的位置信息从内存中获取上一状态信息,使得获取到的上一状态信息中不包含内存中的其他信息。换言之,本申请获取到的异常信息均为用于异常分析的有效信息,减少了无效信息对存储空间的占用。接下来,以多cpu的电子设备为例,对本申请的技术方案进行介绍。参考图3,图3是本申请一示例性实施例示出的另一种异常信息存储方法的流程图,该方法应用于多cpu的电子设备,如图3所示,该方法可以包括以下步骤:步骤301,启动电子设备。步骤302,分别给各个cpu预分配部分内存空间以作为各个cpu的缓冲队列。在本实施例中,与上一实施例相似,可以将内存中的内核线性地址段中的一部分作为各个cpu的缓冲队列,以在任一cpu发生异常的状况下,用于保存cpu的状态信息。进一步的,还可以在内存中为各个cpu注册一个用于异常处理的回调函数,以在任一cpu发生异常的状况下,通过执行与各个cpu对应的回调函数获取各个cpu的状态信息。步骤303,监测各个cpu的运行状态。步骤304,当检测到任一cpu发生异常时,将该发生异常的cpu确定为异常cpu,将其他cpu确定为正常cpu。步骤305,获取异常cpu的状态信息。在本实施例中,获取异常cpu的状态信息的过程(即获取异常cpu的当前状态信息与上一状态信息的过程)与上一实施例相似,具体内容可参照上一实施例的介绍,在此不作赘述。步骤306,将异常cpu的状态信息缓存至分配给异常cpu的缓存队列中。步骤307,向各个正常cpu发起中断。在多cpu的电子设备中,由于各个cpu的运行状态之间存在一定的关联,因此,为了方便后续维护人员更加准确地分析发生异常的原因,将正常cpu的状态信息记录下来以作为异常分析的辅助信息是十分有必要的。于是,在本实施例中,还可以对各个正常cpu发起中断,以便获取各个正常cpu的状态信息。具体发起的中断可以有多种形式,举例而言,该中断可以为核间中断(ipi中断)。当然,该举例仅是示意性的,具体通过何种方式向正常cpu发起中断可以由本领域技术人员根据实际情况采用不同的方式。需要注意的是,本步骤中向正常cpu发起中断,相当于使正常cpu发生异常,进而触发预先注册在内存中的回调函数,以获取正常cpu的状态信息。步骤308,分别获取各个正常cpu的状态寄存器中保存的各个正常cpu的状态信息。在本实施例中,获取各个正常cpu的状态信息的过程(即获取各个正常cpu的当前状态信息与上一状态信息的过程)与获取异常cpu的状态信息的过程相类似,具体内容可参照上一实施例的介绍,在此不作赘述。需要强调的是,在本步骤中,可以通过调用预先给各个正常cpu注册的回调函数获取各个正常cpu的状态信息。步骤309,分别将获取到的各个正常cpu的状态信息保存至预分配给各个正常cpu的缓冲队列中。为方便理解本步骤的操作,举例而言,假设该电子设备有3个cpu,这3个cpu与分配给各个cpu的缓冲队列的关系如下表1。cpucpu1cpu2cpu3缓冲队列buffer1buffer2buffer3表1那么,在本实施例中,在获取到cpu1的当前状态信息和上一状态信息后,会将其保存至buffer1中;在获取到cpu2的当前状态信息和上一状态信息后,会将其保存至buffer2中;同理,cpu3也是相类似,在此不作赘述。(cpu1、cpu2、cpu3中任一cpu均可能为发生异常的cpu,但无论是否发生异常,都将获取到的状态信息均保存至各个cpu对应的缓存队列中。)在本实施例中,将各个cpu的状态信息缓存至预分配给各个cpu的缓冲队列中,相当于对各个cpu的状态信息进行了一次整合,使得保存至非易失性存储介质的各个cpu的状态信息的格式更为规整,例如,可以按照所属cpu排列各个cpu的状态信息。步骤310,将缓存在内存中的各个cpu的状态信息保存至非易失性存储介质中。在本实施例中,各个cpu的状态信息包含异常cpu的状态信息和正常cpu的状态信息。为了便于区分,可以将异常cpu的状态信息打上异常标记,以标识该状态信息为异常cpu的状态信息(可以称其为异常信息);可以理解的是,没有异常标记的状态信息即为正常cpu的状态信息(可以称其为辅助信息)。在本实施例中,在将获取到的各个cpu的状态信息保存至非易失性存储介质中之后,电子设备可以重启,以恢复正常状态。此时,维护人员即可通过特定的工具读取非易失性存储介质中的异常信息和辅助信息,以分析发生异常的原因。与上一实施例相比,本实施例不仅能够获取发生异常的cpu的状态信息,以便后续维护人员分析发生异常的原因,还能获取其他正常的cpu的状态信息,以作为异常分析的辅助信息。通过这种方式,后续维护人员可以基于该电子设备所有cpu的状态信息分析发生异常的原因。换言之,通过本申请的技术方案,维护人员可以从整个电子设备的维度分析发生异常的原因,进而使得分析得到的发生异常的原因更为准确。图4为本申请的一示例性实施例示出一种电子设备的示意结构图。请参考图4,在硬件层面,该电子设备包括处理器402、内部总线404、网络接口406、内存408以及非易失性存储器410,当然还可能包括其他业务所需要的硬件。处理器402从非易失性存储器410中读取对应的计算机程序到内存408中然后运行,在逻辑层面上形成异常信息存储装置。当然,除了软件实现方式之外,本申请并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。请参考图5,在软件实施方式中,该异常信息存储装置可以包括:监测单元501,监测cpu的运行状态;获取单元502,在确定cpu发生异常的情况下,获取保存在所述cpu中的当前状态信息和上一状态信息的位置信息,并根据获取到的位置信息从内存中读取所述上一状态信息;存储单元503,将所述上一状态信息与所述当前状态信息作为所述cpu的异常信息,并保存到预分配的存储空间中。可选的,所述获取单元502进一步用于:从所述cpu的状态寄存器中获取当前状态信息;从所述cpu的通用寄存器中获取上一状态信息的位置信息。可选的,所述电子设备包含多个cpu,中断单元504,向发生异常的cpu以外的其他cpu发起中断;所述获取单元502,进一步用于获取其他cpu的上一状态信息与所述其他cpu的当前状态信息作为所述发生异常的cpu的辅助信息;所述辅助信息与所述异常信息关联存储。可选的,所述存储单元503进一步用于:分别将所述辅助信息和所述异常信息存储至内存中预先分配给各个cpu的缓冲队列中;将缓存在所述内存中的异常信息和辅助信息保存至非易失性存储介质中,以用于对所述目标cpu进行异常分析。可选的,所述预先分配给各个cpu的缓冲队列通过以下方式得到:将内存中的内核线性地址段分配给各个cpu,以作为所述各个cpu的缓冲队列。可选的,所述预分配给各个cpu的缓冲队列通过以下方式得到:当检测到所述电子设备启动时,将内存中的缓存空间分配给所述各个cpu,以作为所述各个cpu的缓存队列。上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器,上述指令可由异常信息存储装置的处理器执行以实现如上述实施例中任一所述的方法,比如该方法可以包括:监测cpu的运行状态;在确定cpu发生异常的情况下,获取保存在所述cpu中的当前状态信息和上一状态信息的位置信息,并根据获取到的位置信息从内存中读取所述上一状态信息;将所述上一状态信息与所述当前状态信息作为所述cpu的异常信息,并保存到预分配的存储空间中。其中,所述非临时性计算机可读存储介质可以是rom、随机存取存储器(ram)、cd-rom、磁带、软盘和光数据存储设备等,本申请并不对此进行限制。以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1