一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

内存异常检测方法、装置、设备及介质与流程

2022-12-02 23:24:36 来源:中国专利 TAG:


1.本技术涉及内存管理领域,具体涉及一种内存异常检测方法、装置、设备及介质。


背景技术:

2.内存管理在计算机系统设计中是极其重要的,高效的内存分配、释放和整理在应用中已越来越重要,内存在使用过程中经常出现由于一些误操作导致的程序异常问题,严重时将导致计算机死机,同时,由于内存异常导致的问题比较难以定位,也给开发工作带来巨大挑战,因此,如何实现对内存异常的准确判断对计算机系统和计算机程序的正常运行是至关重要的。
3.然而,在车辆的车机系统中,若车机内存发生异常,一方面,无法快速对内存泄露问题的定位与分析,例如,内存泄露是内存异常的一种,内存泄漏是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,从而导致程序运行速度减慢甚至系统崩溃等严重后果;另一方面,也增加了后续测试人员的验证时间,导致车机系统引发的问题迟迟得不到解决,不仅导致车机系统卡顿,影响车辆的正常使用,还容易在车辆行驶过程中引发安全事故。
4.申请内容
5.鉴于以上所述现有技术的缺点,本技术提供一种内存异常检测方法、装置、设备及介质,以解决现有内存异常检测方法无法快速准确定位车机内存异常的问题。
6.在第一方面,本技术提供的一种内存异常检测方法,包括:
7.获取车辆车机系统的内存变化信息,所述内存变化信息包括各应用程序的堆内存信息或/和栈内存信息;
8.将所述堆内存信息与预设的堆内存信息进行比较,确定第一比较结果;或/和,将所述栈内存信息与预设的栈内存信息进行比较,确定第二比较结果;
9.根据所述第一比较结果或/和第二比较结果进行判断,若判断结果满足预设条件,则确定所述内存异常。
10.于本技术的一实施例中,所述将所述堆内存信息与预设的堆内存信息进行比较,确定第一比较结果,还包括:
11.根据各进程申请的最大堆内存与各应用程序占用的堆内存确定堆内存信息,将所述堆内存信息与预设的堆内存信息进行比较;
12.若所述堆内存信息大于预设的堆内存信息,则确定第一比较结果为“是”,清理当前各进程的缓存空间,释放部分内存;
13.若所述堆内存信息不大于预设的堆内存信息,则确定第一比较结果为“否”,不进行处理。
14.于本技术的一实施例中,若所述堆内存信息大于预设的堆内存信息,在预设时段内对当前各所述应用程序信息、堆内存信息、内存使用信息与处理器信息进行存储,确定存储数据;直到所述存储数据到达内存预设存储上限时,将所述存储数据上传云端,释放当前
存储数据所使用内存。
15.于本技术的一实施例中,所述将所述栈内存信息与预设的栈内存信息进行比较,确定第二比较结果,还包括:
16.根据各进程申请的最大栈内存与各应用程序占用的栈内存确定栈内存信息,将所述栈内存信息与预设的栈内存信息进行比较;
17.若所述栈内存信息大于预设的栈内存信息,则确定第二比较结果为“是”,清理当前各进程的缓存空间,释放部分内存;
18.若所述栈内存信息不大于预设的栈内存信息,则确定第二比较结果为“否”,不进行处理。
19.于本技术的一实施例中,若所述栈内存信息大于预设的栈内存信息,在预设时段内对当前各所述应用程序信息、栈内存信息、内存使用信息与处理器信息进行存储,确定存储数据;直到所述存储数据到达内存预设存储上限时,将所述存储数据上传云端,释放当前存储数据所使用内存。
20.于本技术的一实施例中,所述根据所述第一比较结果或/和第二比较结果进行判断,若判断结果满足预设条件,则确定所述内存异常,还包括:
21.根据所述第一比较结果进行判断,若所述堆内存信息大于预设的堆内存信息,则确定第一比较结果为“是”,并确定所述内存异常;或,
22.根据所述第二比较结果进行判断,若所述栈内存信息大于预设的栈内存信息,则确定第二比较结果为“是”,并确定所述内存异常;或,
23.根据所述第一比较结果和第二比较结果进行判断,若所述堆内存信息大于预设的堆内存信息且所述栈内存信息大于预设的栈内存信息;则确定第一比较结果与第二比较结果均为“是”,并确定所述内存异常。
24.于本技术的一实施例中,所述确定所述内存异常之后,还包括:
25.对车机系统进行实时监测;若监测到所述内存异常,则生成实时报警信息或者触发内存异常恢复操作。
26.在第二方面,本技术提供的一种内存异常检测装置,包括:
27.内存信息获取模块,用于获取车辆车机系统的内存变化信息,所述内存变化信息包括各应用程序的堆内存信息或/和栈内存信息;
28.内存比较模块,用于将所述堆内存信息与预设的堆内存信息进行比较,确定第一比较结果;或/和,将所述栈内存信息与预设的栈内存信息进行比较,确定第二比较结果;
29.异常检测模块,用于根据所述第一比较结果或/和第二比较结果进行判断,若判断结果满足预设条件,则确定所述内存异常。
30.在第三方面,本技术提供的一种电子设备,包括:
31.一个或多个处理器;
32.存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述电子设备实现上述的内存异常检测方法。
33.在第四方面,本技术提供的一种计算机可读存储介质,其上存储有计算机可读指令,当所述计算机可读指令被计算机的处理器执行时,使计算机执行上述的内存异常检测方法。
34.本技术的有益效果:本技术通过实时监测获取各应用程序的堆内存信息或/和栈内存信息,通过分别将堆内存信息或/和栈内存信息与预设的堆内存信息、预设的栈内存信息进行比较,根据比较结果能够迅速、准确的判断内存是否异常,提高了内存异常检测的效率与准确率,相比现有技术中,根据仅一次垃圾回收之后的内存占有率确定内存的异常程度,本技术的内存异常检测准确率更高。
35.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。
附图说明
36.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术者来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
37.图1是本技术的一示例性实施例示出内存异常检测方法流程图;
38.图2是本技术的一示例性实施例示出的内存异常检测方法另一流程图;
39.图3是本技术的一示例性实施例示出内存异常检测装置结构框图;
40.图4示出了适于用来实现本技术实施例的电子设备结构示意图。
具体实施方式
41.以下将参照附图和优选实施例来说明本技术的实施方式,本领域技术人员可由本说明书中所揭露的内容轻易地了解本技术的其他优点与功效。本技术还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本技术的精神下进行各种修饰或改变。应当理解,优选实施例仅为了说明本技术,而不是为了限制本技术的保护范围。
42.需要说明的是,以下实施例中所提供的图示仅以示意方式说明本技术的基本构想,遂图式中仅显示与本技术中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
43.在下文描述中,探讨了大量细节,以提供对本技术实施例的更透彻的解释,然而,对本领域技术人员来说,可以在没有这些具体细节的情况下实施本技术的实施例是显而易见的,在其他实施例中,以方框图的形式而不是以细节的形式来示出公知的结构和设备,以避免使本技术的实施例难以理解。
44.请参阅图1,本技术的一示例性实施例示出内存异常检测方法流程图,详述如下:
45.步骤s110,获取车辆车机系统的内存变化信息,所述内存变化信息包括各应用程序的堆内存信息或/和栈内存信息;
46.具体地,车辆包括但不限于新能源汽车(纯电汽车、插电式混合动力汽车、油电混合动力汽车、增程式合动力汽车、燃料电池汽车,例如,乙醇、氢气)、内燃汽车等。
47.例如,车机系统是管理车载电脑硬件与软件资源的程序,同时,也是计算机系统的内核与基石。例如,车机:车机指的是安装在汽车里面的车载信息娱乐产品的简称,车机在
功能上能够实现人与车,车与外界(车与车)的信息通讯。功能:目前车机的功能除传统的收音机、音乐视频播放、导航功能以外,已经带有3/4/5g及通信功能,能结合汽车的can-bus技术,实现人与车,车与外界的信息通讯,增强用户体验及服务、安全相关的功能。
48.其中,内存变化信息包括各应用程序的堆内存信息或/和栈内存信息,例如,堆内存信息、栈内存信息、堆内存信息与栈内存信息。
49.在此,需要说明什么是heap(堆),寄存器只能存放很少量的数据,大多数时候,处理器需要指挥寄存器,直接跟内存交换数据。所以,除了寄存器,还必须了解内存怎么储存数据。
50.程序运行的时候,操作系统会给它分配一段内存,用来储存程序和运行产生的数据。这段内存有起始地址和结束地址,比如从0x1000到0x8000,起始地址是较小的那个地址,结束地址是较大的那个地址。
51.程序运行过程中,对于动态的内存占用请求(比如,新建对象,或者使用malloc命令),系统就会从预先分配好的那段内存之中,划出一部分给用户,具体规则是从起始地址开始划分(实际上,起始地址会有一段静态数据,这里忽略)。举例来说,用户要求得到10个字节内存,那么从起始地址0x1000开始给它分配,一直分配到地址0x100a,如果再要求得到22个字节,那么就分配到0x1020。
52.程序运行的时候,操作系统会给它分配一段内存,用来储存程序和运行产生的数据。这段内存有起始地址和结束地址,比如从0x1000到0x8000,起始地址是较小的那个地址,结束地址是较大的那个地址。
53.这种因为用户主动请求而划分出来的内存区域,叫做heap(堆)。它由起始地址开始,从低位(地址)向高位(地址)增长。heap的一个重要特点就是不会自动消失,必须手动释放,或者由垃圾回收机制来回收。
54.另外,除了heap以外,其他的内存占用叫做stack(栈)。简单说,stack是由于函数运行而临时占用的内存区域。
55.步骤s120,将所述堆内存信息与预设的堆内存信息进行比较,确定第一比较结果;或/和,将所述栈内存信息与预设的栈内存信息进行比较,确定第二比较结果;
56.具体地,在实时监测时,有可能仅有堆内存信息,或,仅有栈内存信息,或,同时包含栈内存信息与堆内存信息,在此不再赘述。
57.步骤s130,根据所述第一比较结果或/和第二比较结果进行判断,若判断结果满足预设条件,则确定所述内存异常。
58.具体地,通过第一比较结果或第二比较结果,或,通过第一比较结果和第二比较结果进行判断,详述如下:
59.根据所述第一比较结果进行判断,若所述堆内存信息大于预设的堆内存信息,则确定第一比较结果为“是”,并确定所述内存异常;或,
60.根据所述第二比较结果进行判断,若所述栈内存信息大于预设的栈内存信息,则确定第二比较结果为“是”,并确定所述内存异常;或,
61.根据所述第一比较结果和第二比较结果进行判断,若所述堆内存信息大于预设的堆内存信息且所述栈内存信息大于预设的栈内存信息;则确定第一比较结果与第二比较结果均为“是”,并确定所述内存异常。
62.在本实施例中,通过实时监测获取各应用程序的堆内存信息或/和栈内存信息,通过分别将堆内存信息或/和栈内存信息与预设的堆内存信息、预设的栈内存信息进行比较,根据比较结果能够迅速、准确的判断内存是否异常,提高了内存异常检测的效率与准确率,相比现有技术中,根据仅一次垃圾回收之后的内存占有率确定内存的异常程度,本技术的内存异常检测准确率更高。
63.在一些实施例中,所述将所述堆内存信息与预设的堆内存信息进行比较,确定第一比较结果,还包括:
64.根据各进程申请的最大堆内存与各应用程序占用的堆内存确定堆内存信息,将所述堆内存信息与预设的堆内存信息进行比较;
65.若所述堆内存信息大于预设的堆内存信息,则确定第一比较结果为“是”,清理当前各进程的缓存空间,释放部分内存;
66.若所述堆内存信息不大于预设的堆内存信息,则确定第一比较结果为“否”,不进行处理。
67.具体地,若所述堆内存信息大于预设的堆内存信息,在预设时段内对当前各所述应用程序信息、堆内存信息、内存使用信息与处理器信息进行存储,确定存储数据;直到所述存储数据到达内存预设存储上限时,将所述存储数据上传云端,释放当前存储数据所使用内存。
68.通过上述方式,能够迅速准确地确定内存异常状态,提高了内存异常检测的准确率。
69.在一些实施例中,所述将所述栈内存信息与预设的栈内存信息进行比较,确定第二比较结果,还包括:
70.根据各进程申请的最大栈内存与各应用程序占用的栈内存确定栈内存信息,将所述栈内存信息与预设的栈内存信息进行比较;
71.若所述栈内存信息大于预设的栈内存信息,则确定第二比较结果为“是”,清理当前各进程的缓存空间,释放部分内存;
72.若所述栈内存信息不大于预设的栈内存信息,则确定第二比较结果为“否”,不进行处理。
73.具体地,若所述栈内存信息大于预设的栈内存信息,在预设时段内对当前各所述应用程序信息、栈内存信息、内存使用信息与处理器信息进行存储,确定存储数据;直到所述存储数据到达内存预设存储上限时,将所述存储数据上传云端,释放当前存储数据所使用内存。
74.通过上述方式,能够迅速准确地确定内存异常状态,提高了内存异常检测的准确率。
75.请参阅图2,为本技术的一示例性实施例示出的内存异常检测方法另一流程图,详述如下:
76.1)车机启动后,对系统内进程堆内存大小变化进行监听;例如,获取应用进程占用堆内存;获取进程申请的最大堆内存。
77.2)判断每次变化是否接近应用最大能分配的堆内存大小;例如,根据各进程申请的最大堆内存与各应用程序占用的堆内存确定堆内存信息,将所述堆内存信息与预设的堆
内存信息进行比较,以判断各个应用程序是否超过预设预设的堆内存信息。
78.3)如果接近应用最大能分配的堆内存的98%,则记录当前应用信息,堆栈信息,系统总内存使用情况和cpu信息等,存储到数据库中;例如,若所述堆内存信息大于预设的堆内存信息,则确定第二比较结果为“是”,并确定所述内存异常。
79.4)清理当前进程的缓存空间,释放部分内存;例如,使用主动内存回收,其中,堆空间包括新生代、老年代与永久代。若在业务流量高峰时,老年代不够用需要内存回收,就会影响系统的响应和吞吐量。尤其是当机器物理内存不足时,主流虚拟机的老年代部分很容易就被切换到swap(内存交换分区)中。然后,当需要做内存回收时,还得把所有老年代都swap回内存,这样,就会把内存回收弄得很慢,引发业务超时。因此,既然内存回收无法避免,发生的时候又会stw(stop-the-world,在垃圾回收算法执行过程中,将主流虚拟机内存冻结、应用程序停顿的一种状态),何不在流量低谷时主动去做,而且,定期主动清理老年代,便于观察是否存在内存泄漏。
80.5)持续记录一定时间(5min)后,停止记录;例如,若所述堆内存信息大于预设的堆内存信息,在预设时段(5min)内对当前各所述应用程序信息、堆内存信息、内存使用信息与处理器信息进行存储,确定存储数据;直到所述存储数据到达内存预设存储上限(总内存5%)时,将所述存储数据上传云端,释放当前存储数据所使用内存。
81.6)监听系统进程栈内存大小变化;例如,获取应用进程占用栈内存;获取进程申请的最大栈内存。
82.7)判断每次变化是否接近应用最大能分配的栈内存大小;例如,根据各进程申请的最大栈内存与各应用程序占用的栈内存确定栈内存信息,将所述栈内存信息与预设的栈内存信息进行比较,以判断各个应用程序是否超过预设预设的栈内存信息。
83.8)如果接近应用最大能分配的栈内存的98%,则开始记录当前应用信息,堆栈信息,系统总内存使用情况和cpu信息,存储到数据库中;例如,若所述栈内存信息大于预设的栈内存信息,则确定第二比较结果为“是”,并确定所述内存异常。
84.9)清理当前进程的缓存空间,释放部分内存;例如,主动内存回收。
85.10)持续记录一定时间((5min后))停止记录;例如,若所述栈内存信息大于预设的栈内存信息,在预设时段(5min)内对当前各所述应用程序信息、栈内存信息、内存使用信息与处理器信息进行存储,确定存储数据。
86.11)当数据库中的数据到达总内存的5%时,进行上报服务器,释放本地数据库内存;例如,直到所述存储数据到达内存预设存储上限(总内存5%)时,将所述存储数据上传云端,释放当前存储数据所使用内存。
87.12)对检测问题进程进行分析并修改,使用热修复方式远程解决问题。
88.例如,对确定的内存异常的检测结果进行分析,方便开发人员对内存泄露问题的定位与分析,车机出现问题后能,快速定位,减少后续测试人员的验证时间。
89.在本实施例中,应用程序启动后,内存变化主要是由堆栈空间的变化引起的。实时获取运行中的各应用栈内存大小和堆内存大小,如果栈内存或者堆内存接近于应用可支配的栈内存或者堆内存总大小,则开始记录此异常进程的信息,当前系统meminfo(查看内存指令)和处理器信息,保存到数据库并存储,持续记录一段时间后停止记录。当数据库数据达到一定数量后,将数据库数据上报服务器,并将数据库内容清空,保证车机系统的存储空
间。后续根据上报数据,在后端进行查看,便于内存异常监控。
90.在另一些实施例中,所述确定所述内存异常之后,还包括:
91.对车机系统进行实时监测;若监测到所述内存异常,则生成实时报警信息或者触发内存异常恢复操作。
92.其中,通过监听精度对车机系统进行实时监测,
93.具体地,生成实时报警信息可以是通过车机系统产生一个报警信息用于通知用户,并及时进行处理;而触发内存异常恢复操作可以是通过主动调用预设的异常恢复函数,用户可以在异常恢复函数中预设恢复逻辑,报错等动作。
94.在本实施例中,通过对车机系统的实时监测,若监测到内存异常信息,则生成实时报警信息或者触发异常恢复操作,保证用户能够及时发现内存异常现象,并及时进行恢复处理,从而保证内存异常现象及时恢复。
95.请参阅图3,为本技术的一示例性实施例示出内存异常检测装置结构框图,包括:
96.内存信息获取模块310,用于获取车辆车机系统的内存变化信息,所述内存变化信息包括各应用程序的堆内存信息或/和栈内存信息;
97.内存比较模块320,用于将所述堆内存信息与预设的堆内存信息进行比较,确定第一比较结果;或/和,将所述栈内存信息与预设的栈内存信息进行比较,确定第二比较结果;
98.异常检测模块330,用于根据所述第一比较结果或/和第二比较结果进行判断,若判断结果满足预设条件,则确定所述内存异常。
99.通过上述方式,本技术通过实时监测获取各应用程序的堆内存信息或/和栈内存信息,通过分别将堆内存信息或/和栈内存信息与预设的堆内存信息、预设的栈内存信息进行比较,根据比较结果能够迅速、准确的判断内存是否异常,提高了内存异常检测的效率与准确率,相比现有技术中,根据仅一次垃圾回收之后的内存占有率确定内存的异常程度,本技术的内存异常检测准确率更高。
100.需要说明的是,上述实施例所提供的内存异常检测装置与上述实施例所提供的内存异常检测方法属于同一构思,其中,各个模块和单元执行操作的具体方式已经在系统实施例中进行了详细描述,此处不再赘述。上述实施例所提供的内存异常检测装置在实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能,本处也不对此进行限制。
101.图4示出了适于用来实现本技术实施例的电子设备的计算机系统的结构示意图。需要说明的是,图4示出的电子设备的计算机系统400仅是一个示例,不应对本技术实施例的功能和使用范围带来任何限制。
102.如图4所示,计算机系统400包括中央处理单元(central processing unit,cpu)401,其可以根据存储在只读存储器(read-only memory,rom)402中的程序或者从储存部分408加载到随机访问存储器(random access memory,ram)403中的程序而执行各种适当的动作和处理,例如执行上述实施例中的方法。在ram 403中,还存储有系统操作所需的各种程序和数据。cpu 401、rom 402以及ram 403通过总线404彼此相连。输入/输出(input/output,i/o)接口405也连接至总线404。
103.以下部件连接至i/o接口405:包括键盘、鼠标等的输入部分406;包括诸如阴极射线管(cathode ray tube,crt)、液晶显示器(liquid crystal display,lcd)等以及扬声器
processor,简称np)等;还可以是数字信号处理器(digital signal processing,简称dsp)、专用集成电路(application specific integrated circuit,简称asic)、现场可编程门阵列(field-programmable gate array,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
111.本领域技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,可以取决于技术方案的特定应用和设计约束条件。技术人员可以对每个特定的应用来使用不同方法以实现所描述的功能,但是这种实现不应认为超出本公开实施例的范围。技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
112.本文所披露的实施例中,所揭露的方法、产品(包括但不限于装置、设备等),可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,可以仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些子样本可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例。另外,在本公开实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
113.附图中的流程图和框图显示了根据本公开实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这可以依所涉及的功能而定。在附图中的流程图和框图所对应的描述中,不同的方框所对应的操作或步骤也可以以不同于描述中所披露的顺序发生,有时不同的操作或步骤之间不存在特定的顺序。例如,两个连续的操作或步骤实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这可以依所涉及的功能而定。框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献