用户态网络文件系统的内存检测方法、装置及设备与流程

文档序号:16879964发布日期:2019-02-15 22:02阅读:166来源:国知局
用户态网络文件系统的内存检测方法、装置及设备与流程

本发明涉及存储系统技术领域,特别是涉及一种用户态网络文件系统的内存检测方法、装置及设备。



背景技术:

海量存储、可扩展性文件存储系统在企业信息系统中得到了广泛应用和深入发展,用户的核心文件存储应用数量越来越多,其中通过网络进行文件进行数据交互,是企业用户普遍采用的方式。随着企业数据越来越庞大,用户对数据的传输性能和稳定性要求越来越高,针对网络文件系统的应用逐渐广泛,提高文件系统代码质量、优化内存管理是目前面临的主要问题。

nfs(networkfilesystem)即内核态网络文件系统,是freebsd支持的文件系统中的一种,它允许网络中的计算机之间通过tcp/ip网络共享资源。内核态是指cpu可以访问内存所有数据,包括外围设备,例如硬盘、网卡等,cpu也可以将自己从一个程序切换到另一个程序。用户态是指只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。nfs-ganesha(networkfilesystemuser-space)是用户态网络文件系统,属于开源项目,在系统服务故障场景下,相比于内核态nfs具有较好管理性和可维护性,并且用户态nfs-ganesha易于实施和维护,因此,大数据海量分布式对象存储nfs-ganesha应用前景很大。

nfs-ganesha用户态网络文件系统的内存管理由于人为因素,会产生内存泄漏问题,它与其他内存错误不同,内存泄漏错误具有不易发现性,目前在每次源码修改后,均需要人为在文件系统代码中寻找内存泄漏,操作较为复杂,工作量大。

因此,如何提供一种能够减小工作量的用户态网络文件系统的内存检测方法、装置及设备是本领域技术人员目前需要解决的问题。



技术实现要素:

本发明的目的是提供一种用户态网络文件系统的内存检测方法,能够在用户态网络文件系统每次发送源码修改时,自行对内存泄漏数据进行获取以及保存,简化了获取内存泄漏数据的操作,减少了工作人员的工作量;本发明的另一目的是提供一种基于上述方法的装置及设备。

为解决上述技术问题,本发明提供了一种用户态网络文件系统的内存检测方法,包括:

接收并依据脚本构建信息构建内存检测脚本;

接收并依据执行文件构建信息构建执行文件,并控制所述执行文件开启运行;

所述用户态网络文件的源码发生修改后,触发所述执行文件调用所述内存检测脚本并运行;

通过所述内存检测脚本,获取内存泄漏数据并进行保存,供后续进行相应处理。

优选地,接收脚本构建信息之前,还包括:

接收基于所述用户态网络文件系统的源码生成的工程构建信息,依据所述工程构建信息构建工程构建文件,所述工程构建文件内包含valgrind工具;

相应的,所述内存检测脚本包括用于保存内存泄漏数据的日志目录,以及设定所述valgrind工具中的内存泄漏选项为全输出的控制语句;所述内存泄漏选项为全输出时,所述valgrind工具控制所述用户态网络文件系统中的服务器在退出时收集并输出内存泄漏数据至所述日志目录。

优选地,所述工程构建文件还包括:内存检测开关;

所述内存检测开关接收到触发指令后,触发接收所述脚本构建信息的操作。

优选地,所述工程构建文件还包括:makefile文件;

相应的,所述接收并依据执行文件构建信息构建执行文件的过程具体为:

接收并依据调用指令调用所述工程构建文件,获得所述工程构建文件生成的所述makefile文件;

接收构建指令后,执行所述makefile文件内的编译和安装指令,在所述用户态网络文件系统内进行所述执行文件编译和安装。

优选地,所述接收并依据调用指令调用所述工程构建文件之前,还包括:

响应于接收到的新建指令,在所述源码所在的目录下新建构建目录;

响应于接收到的目录进入指令后,进入所述构建目录;

响应于接收到的调用指令后,调用所述工程构建文件。

优选地,所述用户态网络文件系统的源码版本为nfs-ganesha-2.3.3x86_64。

优选地,所述工程构建文件为cmakelists.txt文件。

优选地,还包括:

显示所述日志目录内保存的内存泄漏数据。

为解决上述技术问题,本发明还提供了一种用户态网络文件系统的内存检测装置,包括:

检测脚本构建模块,用于接收并依据脚本构建信息构建内存检测脚本;

执行文件构建模块,用于接收并依据执行文件构建信息构建执行文件,并控制所述执行文件开启运行;

运行检测模块,用于在所述用户态网络文件的源码发生修改后,触发所述执行文件调用所述内存检测脚本并运行;通过所述内存检测脚本,获取内存泄漏数据并进行保存,供后续进行相应处理。

为解决上述技术问题,本发明还提供了一种用户态网络文件系统的内存检测设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如以上任一项所述的内存检测方法的步骤。

本发明提供了一种用户态网络文件系统的内存检测方法,构建了内存检测脚本以及执行文件,并控制执行文件进行运行状态,这样在每次用户态网络文件系统的源码发生修改需要进行内存检测时,即会自动触发执行文件调用内存检测脚本运行,通过内存检测脚本即能够获取内存泄漏数据并保存,供后续进行处理。可见,本发明在用户态网络文件系统发送源码修改后,即能够自动进行内存泄漏数据的获取以及保存,而不需要工作人员每次都人工输入指令来获取内存泄漏数据,内存泄漏数据获取的便利性和及时性更高,且减小了工作人员的工作量。本发明还提供了一种基于上述方法的装置及设备,在此不再赘述。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的一种用户态网络文件系统的内存检测方法的过程的流程图;

图2为本发明提供的一种用户态网络文件系统的内存检测装置的结构示意图。

具体实施方式

本发明的核心是提供一种用户态网络文件系统的内存检测方法,能够在用户态网络文件系统每次发送源码修改时,自行对内存泄漏数据进行获取以及保存,简化了获取内存泄漏数据的操作,减少了工作人员的工作量;本发明的另一核心是提供一种基于上述方法的装置及设备。

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提供了一种用户态网络文件系统的内存检测方法,参见图1所示,图1为本发明提供的一种用户态网络文件系统的内存检测方法的过程的流程图;该方法包括:

步骤s1:接收并依据脚本构建信息构建内存检测脚本;

其中,内存检测脚本的作用,是用于获取用户态网络文件系统内服务器产生的内存泄漏数据的。

步骤s2:接收并依据执行文件构建信息构建执行文件,并控制执行文件开启运行;

任何脚本构建完成后,想要运行该脚本,一种方法是人为查找到脚本的保存位置,然后人为调用,但是这种方式操作复杂,并且还需要工作人员记住复杂的脚本保存路径,便利性差。另一种方法即为构建执行文件,通过执行文件来进行脚本的调用以及控制脚本运行。因此,在内存检测脚本构建完成后,需要编写一个执行文件,来在内存检测时,自动调用内存检测脚本并控制其运行,从而减少内存检测时的人为操作,提高检测效率以及检测的便利性。另外,由于执行文件并非属于会随着源码改变的文件,并且反而是在每次源码修改后需要进行使用,故为了减小操作步骤,一旦执行文件构建完毕后,即控制其开启运行,之后无特殊情况不关闭。

步骤s3:用户态网络文件系统的源码发生修改后,触发执行文件调用内存检测脚本并运行;

可以理解的是,由于用户态网络文件系统可能会不断的进行扩展或更新,这种情况下用户态网络文件系统的源码就会发生修改,而在每次用户态网络文件系统的源码发送修改后,均需要对内存泄漏数据进行获取,来判断是否存在内存泄漏故障。由于执行文件自构建完成起就处于开启状态,故本发明在每次发生源码修改后,即会自动触发执行文件,使执行文件调用内存检测脚本运行,这个过程并不需要人为参与。即本发明中,源码发生修改后,即会自动获取内存泄漏数据,从而减少了工作人员的工作量,提高了内存泄漏数据的获取效率。

步骤s4:通过内存检测脚本,获取内存泄漏数据并进行保存,供后续进行相应处理。

本发明构建了内存检测脚本以及执行文件,并控制执行文件进行运行状态,这样在每次用户态网络文件系统的源码发生修改需要进行内存检测时,即会自动触发执行文件调用内存检测脚本运行,通过内存检测脚本即能够获取内存泄漏数据并保存,供后续进行处理。可见,本发明在用户态网络文件系统发送源码修改后,即能够自动进行内存泄漏数据的获取以及保存,而不需要工作人员每次都人工输入指令来获取内存泄漏数据,内存泄漏数据获取的便利性和及时性更高,且减小了工作人员的工作量。

在一种具体实施例中,步骤s1之前,还包括:

接收基于用户态网络文件系统的源码生成的工程构建信息,依据工程构建信息构建工程构建文件,工程构建文件内包含valgrind工具;

相应的,内存检测脚本包括用于保存内存泄漏数据的日志目录,以及设定valgrind工具中的内存泄漏选项为全输出的控制语句;内存泄漏选项为全输出时,valgrind工具控制用户态网络文件系统中的服务器在退出时收集并输出内存泄漏数据至日志目录。

其中,由于用户态网络文件系统属于开源系统,因此,在linux系统中,能够直接获取到用户态网络文件系统的开源源码nfs-ganesha;源码是构建用户态网络系统的程序,故在用户态网络文件系统内构建工程构建文件时,需要基于源码的基础上构建,从而能够使得工程构建文件内包含的规则能够符合用户态网络文件系统的应用场景。

可以理解的是,valgrind是一个内存检测工具,用于检查程序内存泄漏、段错误等bug的工具。它包含的有:内存检测、缓存检测、代码覆盖、性能测试等功能。其中,valgrind工具内部的内存泄漏选项通常并未设置为全输出,这种情况下,valgrind工具并不会控制服务器自动采集内存泄漏数据,只有将该选项设置为全输出,valgrind工具控制用户态网络文件系统中的服务器在退出时收集并输出内存泄漏数据至日志目录,从而实现本发明的内存泄漏数据自动检测的目的。因此,内存检测脚本内需要包含设定valgrind工具中的内存泄漏选项为全输出的控制语句。

另外,由于故障检测数据通常是保存在日志内的,但是具体保存在哪些日志内,需要由获取这些故障检测数据的脚本来限定,因此内存检测脚本需要包含用于保存内存泄漏数据的日志目录,这样使得后续内存检测脚本运行时,能够自动将获取到的内存泄漏数据发送至预先设定的日志目录下进行保存,方便工作人员查找。

具体的,这里的执行文件具体为ganesha.nfsd,当然,本发明不限定执行文件的类型。在步骤s3中,触发执行文件后,执行文件会在保存有内存检测脚本的目录中,执行如下命令,来启动内存检测脚本运行:

./valgrind.sh/usr/bin/ganesha.nfsd-f-nniv_event。

当然,以上仅为一种具体实现方式,本发明不限定执行文件内的具体运行程序内容。

在一种优选实施例中,工程构建文件还包括:内存检测开关;内存检测开关接收到触发指令后,触发接收脚本构建信息的操作。

可以理解的是,若工程构建文件和内存检测脚本分别独立构建和触发的话,会使得本发明需要的触发操作较多,操作复杂,因此,在工程构建文件内设置内存检测开关,通过系统开机等方式触发内存检测开关打开后(即接收到触发指令),会自动触发内存检测脚本的构建,简化整体操作步骤。

其中,设置内存检测开关指令为:

option(_valgrind_memcheck"initializebufferspassedtogpfsioctlthatvalgrinddoesn'tunderstand"on)

当然,以上仅为一种具体实现方式,本发明不限定设置内存检测开关的指令内容。

另外,在一种优选实施例中,上述工程构建文件还包括:makefile文件;

相应的,步骤s2中,接收并依据执行文件构建信息构建执行文件的过程具体为:

接收并依据调用指令调用工程构建文件,获得工程构建文件生成的makefile文件;

接收构建指令后,执行makefile文件内的编译和安装指令,在用户态网络文件系统内进行执行文件编译和安装。

可以理解的是,makefile是一种配置文件,makefile文件描述了整个工程的编译、连接等规则,例如:哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,文件编译完成后如何安装,甚至于进行更复杂的功能操作等等。因此,工程构建文件包含makefile文件,能够为后续构建执行文件提供规则指令,方便后续编译文件、链接数据库以及安装文件等操作。

进一步的,上述接收并依据调用指令调用工程构建文件之前,还包括:

响应于接收到的新建指令,在源码所在的目录下新建构建目录;具体可采用外部编译方法;

响应于接收到的目录进入指令后,进入构建目录;

响应于接收到的调用指令后,调用工程构建文件。

可以理解的是,新建构建目录并在新建的目录下生成执行文件的目的,是为了使执行目录能够与系统内其他文件进行区分,后续在进行内存检测时,需要运行执行文件时,能够方便执行文件的查找和管理。

其中,工程构建文件优选为cmakelists.txt文件。因此,可在build内执行接收到的cmake../src命令来调用工程构建文件,然后执行makefile文件中的make指令来进行执行文件的编译,执行makeinstall指令来进行执行文件的安装,从而完成执行文件的构建。

在优选实施例中,用户态网络文件系统的源码版本为nfs-ganesha-2.3.3x86_64。当然,本发明并不限定用户态网络文件系统的源码版本。

在上述版本的用户态网络文件系统中,内存检测脚本具体为nfs-ganesha-valgrind.sh,内存检测脚本的程序内容可以包括:

#!/bin/sh

valgrind--leak-check=full--max-stackframe=3280592--log-file=/tmp/valgrind.log$*;

其中,--leak-check=full表示当服务器退出时是否收集输出内存泄漏,选项有[no|summary|full]这个地方本发明将其设置成完全全输出;

--max-stackframe=3280592指定堆栈上每一个栈帧(stackframe)大小上限为3280592

--log-file=/tmp/valgrind.log指定内存检测结果输出日志目录为/tmp/valgrind.log。

当然,以上仅为一种具体实现方式,本发明不限定用户态网络文件系统的源码版本以及内存检测脚本的具体程序内容。

进一步的,该方法还包括:

显示日志目录内保存的内存泄漏数据。

可以理解的是,获取内存泄漏数据的目的,是为了使工作人员能够及时得知出现了内存泄漏故障,并进行处理,因此,优选在获取到内存泄漏数据后,对其进行显示,来方便工作人员直接查看内存泄漏数据,并据此进行故障处理,提高系统的可靠性。

本发明还提供了一种用户态网络文件系统的内存检测装置,参见图2所示,图2为本发明提供的一种用户态网络文件系统的内存检测装置的结构示意图。该装置包括:

检测脚本构建模块1,用于接收并依据脚本构建信息构建内存检测脚本;

执行文件构建模块2,用于接收并依据执行文件构建信息构建执行文件,并控制执行文件开启运行;

运行检测模块3,用于在用户态网络文件系统的源码发生修改后,触发执行文件调用内存检测脚本并运行;通过内存检测脚本,获取内存泄漏数据并进行保存,供后续进行相应处理。

本发明还提供了一种用户态网络文件系统的内存检测设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行计算机程序时实现如以上任一项的内存检测方法的步骤。

以上的几种具体实施方式仅是本发明的优选实施方式,以上几种具体实施例可以任意组合,组合后得到的实施例也在本发明的保护范围之内。应当指出,对于本技术领域的普通技术人员来说,相关专业技术人员在不脱离本发明精神和构思前提下推演出的其他改进和变化,均应包含在本发明的保护范围之内。

还需要说明的是,在本说明书中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1