文件句柄监测、泄漏分析方法和装置及电子设备转让专利

申请号 : CN202210187756.6

文献号 : CN114546703B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杜中原

申请人 : 北京基调网络股份有限公司

摘要 :

本公开涉及计算机领域,提供一种文件句柄监测、泄漏分析方法和装置及电子设备,其中,文件句柄监测方法,包括:周期性确定进程的文件句柄数量;确定文件句柄数量对应的泄漏等级,其中,泄漏等级来自至少两个预设泄漏等级中的一个;根据泄漏等级关联的采集策略采集文件句柄泄漏信息,文件句柄泄漏信息包括创建文件句柄操作的调用栈;将创建后达到预设时长而未被关闭的文件句柄对应的文件句柄泄漏信息发送给服务端。文件句柄泄漏分析方法,包括:接收进程的多个文件句柄泄漏信息;对多个文件句柄泄漏信息包含的调用栈进行聚合分类,得到一个或多个调用路径以及每个调用路径出现的次数。通过本公开的一个或多个实施例,可实现文件句柄监测。

权利要求 :

1.一种文件句柄泄漏分析方法,其特征在于,包括:接收进程在预设时间段内的多个文件句柄泄漏信息,其中,所述文件句柄泄漏信息包括创建文件句柄操作的调用栈、以及所述文件句柄泄漏信息对应的泄漏等级,至少部分所述文件句柄泄漏信息对应于创建后达到预设时长而未被关闭的文件句柄;

对所述多个文件句柄泄漏信息包含的调用栈进行聚合分类,得到一个或多个调用路径以及每个调用路径出现的第一次数;

确定至少部分调用路径在各个泄漏等级出现的第二次数;

对于每个调用路径:

确定所述调用路径对应的每个文件句柄泄漏信息中创建文件句柄操作的时间戳与所述预设时间段的起始时间之间的时间差值;确定所述调用路径对应的文件句柄泄漏信息对应的时间差值的中位数;确定所述调用路径对应的文件句柄泄漏信息的时间差值相对于所述中位数的偏离度;

根据所述调用路径的所述偏离度、所述第一次数和所述第二次数确定所述调用路径的根因指数,其中,所述根因指数指示调用路径为导致文件句柄泄漏原因的可能性,所述泄漏等级越高所述泄漏等级对应的第二次数对根因指数的贡献越高,所述偏离度与所述根因指数正相关。

2.如权利要求1所述的文件句柄泄漏分析方法,其特征在于,每个所述文件句柄泄漏信息还包括:所述创建文件句柄操作创建的文件句柄的类型;

其中,对所述多个文件句柄泄漏信息包含的调用栈进行聚合分类,得到一个或多个调用路径以及每个调用路径出现的第一次数,包括:按照文件句柄的类型对所述多个文件句柄泄漏信息包含的调用栈进行聚合分类,得到各个文件句柄的类型对应的一个或多个调用路径以及每个调用路径出现的第一次数。

3.如权利要求1或2所述的文件句柄泄漏分析方法,其特征在于,每个所述文件句柄泄漏信息还包括:所述创建文件句柄操作创建的文件句柄的名称;

其中,所述文件句柄泄漏分析方法还包括:确定至少部分调用路径对应的每个文件句柄的名称及每个文件句柄的名称出现的第三次数。

4.如权利要求1所述的文件句柄泄漏分析方法,其特征在于,还包括:接收周期性上报的进程的文件句柄数量;

判断所述进程的所述文件句柄数量是否超过预设报警阈值;

如果所述进程的所述文件句柄数量超过所述预设报警阈值,发送报警通知。

5.如权利要求1所述的文件句柄泄漏分析方法,其特征在于,所述文件句柄泄漏信息的获取方法,包括:在应用中,

周期性确定进程的文件句柄数量;

确定所述文件句柄数量对应的泄漏等级,其中,所述泄漏等级来自至少两个预设泄漏等级中的一个;

根据所述泄漏等级关联的采集策略采集文件句柄泄漏信息,其中,每个泄漏等级关联的采集策略不同,所述文件句柄泄漏信息包括创建文件句柄操作的调用栈;

将创建后达到预设时长而未被关闭的文件句柄对应的文件句柄泄漏信息发送给服务端。

6.如权利要求5所述的文件句柄泄漏分析方法,其特征在于,所述采集策略被配置为:所述泄漏等级越高采集的频率越高和/或次数越多。

7.如权利要求5所述的文件句柄泄漏分析方法,其特征在于,所述文件句柄泄漏信息的获取方法,还包括以下至少之一:在所述应用中,

将所述泄漏等级作为所述文件句柄泄漏信息发送给所述服务端;

确定所述创建文件句柄操作的时间戳,将所述创建文件句柄操作的时间戳作为所述文件句柄泄漏信息发送给所述服务端;

采集所述创建文件句柄操作创建的文件句柄的信息,将所述文件句柄的信息作为所述文件句柄泄漏信息发送给所述服务端;

确定所述创建文件句柄操作的线程信息,将所述线程信息作为所述文件句柄泄漏信息发送给所述服务端。

8.如权利要求7所述的文件句柄泄漏分析方法,其特征在于,所述文件句柄的信息包括:所述文件句柄的类型和/或所述文件句柄的名称。

9.如权利要求5至8中任一项所述的文件句柄泄漏分析方法,其特征在于,所述根据所述泄漏等级关联的采集策略采集文件句柄泄漏信息之后,还包括:在所述应用中,

缓存所述文件句柄泄漏信息;

在关闭文件句柄操作时,清除相应的所述文件句柄泄漏信息;

其中,将创建后达到预设时长而未被关闭的文件句柄对应的文件句柄泄漏信息发送给服务端,包括:判断所述文件句柄泄漏信息是否缓存达到预设时长而未被清除;

如果所述文件句柄泄漏信息缓存达到所述预设时长而未被清除,将缓存达到所述预设时长而未被清除的所述文件句柄泄漏信息发送给服务端。

10.如权利要求5至8中任一项所述的文件句柄泄漏分析方法,其特征在于,所述根据所述泄漏等级关联的采集策略采集文件句柄泄漏信息,包括:第一线程根据所述泄漏等级关联的采集策略确定采集使能标识,其中,所述第一线程为非用户线程;

第二线程响应于创建文件句柄操作,根据所述采集使能标识采集文件句柄泄漏信息,其中,所述第二线程为用户线程。

11.如权利要求10所述的文件句柄泄漏分析方法,其特征在于,所述第一线程根据所述泄漏等级关联的采集策略确定采集使能标识,包括:所述第一线程根据所述泄漏等级关联的采集策略确定采集期和采集期间隔;

所述第一线程在所述采集期设置所述采集使能标识设置为允许采集,并在所述采集期间隔设置所述采集使能标识为禁止采集。

12.如权利要求11所述的文件句柄泄漏分析方法,其特征在于,还包括:所述第一线程根据所述泄漏等级关联的采集策略,确定所述采集期的最大采集次数。

13.如权利要求12所述的文件句柄泄漏分析方法,其特征在于,还包括:所述第二线程响应于所述创建文件句柄操作,判断所述采集使能标识是否为允许采集;

如果所述采集使能标识为允许采集,所述第二线程判断所述采集期的采集次数是否达到所述最大采集次数;

如果所述采集期的采集次数未达到所述最大采集次数,所述第二线程采集所述文件句柄泄漏信息。

14.如权利要求13所述的文件句柄泄漏分析方法,其特征在于,还包括:如果所述采集期的采集次数达到所述最大采集次数,所述第二线程或所述第一线程设置所述采集使能标识为禁止采集。

15.如权利要求11所述的文件句柄泄漏分析方法,其特征在于,还包括:所述第一线程确定所述泄漏等级持续的时长;

如果所述泄漏等级持续的时长达到所述泄漏等级对应的预设持续时长,所述第一线程设置所述采集使能标识为禁止采集,直到所述泄漏等级提高。

16.如权利要求12所述的文件句柄泄漏分析方法,其特征在于,所述采集策略被配置为:所述泄漏等级越高所述采集期越长和/或所述采集期间隔越短,和/或所述泄漏等级越高所述采集期的最大采集次数越大。

17.如权利要求9所述的文件句柄泄漏分析方法,其特征在于,将缓存达到所述预设时长而未被清除的所述文件句柄泄漏信息发送给服务端之后,还包括:将已发送的所述文件句柄泄漏信息标记为已发送或从缓存中清除。

18.一种文件句柄泄漏分析装置,其特征在于,包括:接收模块,用于接收进程在预设时间段内的多个文件句柄泄漏信息,其中,所述文件句柄泄漏信息包括创建文件句柄操作的调用栈、以及所述文件句柄泄漏信息对应的泄漏等级,至少部分所述文件句柄泄漏信息对应于创建后达到预设时长而未被关闭的文件句柄;

聚合模块,用于对所述多个文件句柄泄漏信息包含的调用栈进行聚合分类,得到一个或多个调用路径以及每个调用路径出现的第一次数;

用于确定至少部分调用路径在各个泄漏等级出现的第二次数的模块;

所述文件句柄泄漏分析装置,用于对于每个调用路径:确定所述调用路径对应的每个文件句柄泄漏信息中创建文件句柄操作的时间戳与所述预设时间段的起始时间之间的时间差值;确定所述调用路径对应的文件句柄泄漏信息对应的时间差值的中位数;确定所述调用路径对应的文件句柄泄漏信息的时间差值相对于所述中位数的偏离度;

根据所述调用路径的所述偏离度、所述第一次数和所述第二次数确定所述调用路径的根因指数,其中,所述根因指数指示调用路径为导致文件句柄泄漏原因的可能性,所述泄漏等级越高所述泄漏等级对应的第二次数对根因指数的贡献越高,所述偏离度与所述根因指数正相关。

19.一种文件句柄监测系统,其特征在于,包括:

如权利要求18所述的文件句柄泄漏分析装置;

文件句柄监测装置,包括:

第一确定模块,用于周期性确定进程的文件句柄数量;

第二确定模块,用于确定所述文件句柄数量对应的泄漏等级,其中,所述泄漏等级来自至少两个预设泄漏等级中的一个;

采集模块,用于根据所述泄漏等级关联的采集策略采集文件句柄泄漏信息,其中,每个泄漏等级关联的采集策略不同,所述文件句柄泄漏信息包括创建文件句柄操作的调用栈;

发送模块,用于将创建后达到预设时长而未被关闭的文件句柄对应的文件句柄泄漏信息发送给服务端。

20.一种电子设备,其特征在于,包括:

处理器;以及

存储程序的存储器,

其中,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行根据权利要求1‑17中任一项所述的方法。

21.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行根据权利要求1‑17中任一项所述的方法。

说明书 :

文件句柄监测、泄漏分析方法和装置及电子设备

技术领域

[0001] 本发明涉及计算机技术领域,尤其涉及一种文件句柄监测、泄漏分析方法和装置及电子设备。

背景技术

[0002] 造成句柄泄漏的主要原因,是进程在创建文件句柄操作之后,没有进行关闭文件句柄操作来关闭创建的文件句柄。通常对进程可以调用的文件句柄数做了限制。超过了限制的数值,进程无法获得新的文件句柄。因此,文件句柄的泄漏对进程的功能失效造成极大的隐患。

发明内容

[0003] 根据本公开的一方面,提供了一种文件句柄监测方法,包括:周期性确定进程的文件句柄数量;确定文件句柄数量对应的泄漏等级,其中,泄漏等级来自至少两个预设泄漏等级中的一个;根据泄漏等级关联的采集策略采集文件句柄泄漏信息,其中,每个泄漏等级关联的采集策略不同,文件句柄泄漏信息包括创建文件句柄操作的调用栈;将创建后达到预设时长而未被关闭的文件句柄对应的文件句柄泄漏信息发送给服务端。
[0004] 在一些实施例中,采集策略被配置为:泄漏等级越高采集的频率越高和/或次数越多。
[0005] 在一些实施例中,文件句柄监测方法还包括以下至少之一:将泄漏等级作为文件句柄泄漏信息发送给服务端;确定创建文件句柄操作的时间戳,将创建文件句柄操作的时间戳作为文件句柄泄漏信息发送给服务端;采集创建文件句柄操作创建的文件句柄的信息,将文件句柄的信息作为文件句柄泄漏信息发送给服务端;确定创建文件句柄操作的线程信息,将线程信息作为文件句柄泄漏信息发送给服务端。
[0006] 在一些实施例中,文件句柄的信息包括:文件句柄的类型和/或文件句柄的名称。
[0007] 在一些实施例中,根据泄漏等级关联的采集策略采集文件句柄泄漏信息之后,还包括:缓存文件句柄泄漏信息;在关闭文件句柄操作时,清除相应的文件句柄泄漏信息;其中,将创建后达到预设时长而未被关闭的文件句柄对应的文件句柄泄漏信息发送给服务端,包括:判断文件句柄泄漏信息是否缓存达到预设时长而未被清除;如果文件句柄泄漏信息缓存达到预设时长而未被清除,将缓存达到预设时长而未被清除的文件句柄泄漏信息发送给服务端。
[0008] 在一些实施例中,根据泄漏等级关联的采集策略采集文件句柄泄漏信息,包括:第一线程根据泄漏等级关联的采集策略确定采集使能标识,其中,第一线程为非用户线程;第二线程响应于创建文件句柄操作,根据采集使能标识采集文件句柄泄漏信息,其中,第二线程为用户线程。
[0009] 在一些实施例中,第一线程根据泄漏等级关联的采集策略确定采集使能标识,包括:第一线程根据泄漏等级关联的采集策略确定采集期和采集期间隔;第一线程在采集期设置采集使能标识设置为允许采集,并在采集期间隔设置采集使能标识为禁止采集。
[0010] 在一些实施例中,文件句柄监测方法还包括:第一线程根据泄漏等级关联的采集策略,确定采集期的最大采集次数。
[0011] 在一些实施例中,文件句柄监测方法还包括:第二线程响应于创建文件句柄操作,判断采集使能标识是否为允许采集;如果采集使能标识为允许采集,第二线程判断采集期的采集次数是否达到最大采集次数;如果采集期的采集次数未达到最大采集次数,第二线程采集文件句柄泄漏信息。
[0012] 在一些实施例中,文件句柄监测方法还包括:如果采集期的采集次数达到最大采集次数,第二线程或第一线程设置采集使能标识为禁止采集。
[0013] 在一些实施例中,文件句柄监测方法还包括:第一线程确定泄漏等级持续的时长;如果泄漏等级持续的时长达到泄漏等级对应的预设持续时长,第一线程设置采集使能标识为禁止采集,直到泄漏等级提高。
[0014] 在一些实施例中,采集策略被配置为:泄漏等级越高采集期越长和/或采集期间隔越短,和/或泄漏等级越高采集期的最大采集次数越大。
[0015] 在一些实施例中,将缓存达到预设时长而未被清除的文件句柄泄漏信息发送给服务端之后,还包括:将已发送的文件句柄泄漏信息标记为已发送或从缓存中清除。
[0016] 根据本公开的另一方面,提供了一种文件句柄泄漏分析方法,包括:接收进程的多个文件句柄泄漏信息,其中,文件句柄泄漏信息包括创建文件句柄操作的调用栈,至少部分文件句柄泄漏信息对应于创建后达到预设时长而未被关闭的文件句柄;对多个文件句柄泄漏信息包含的调用栈进行聚合分类,得到一个或多个调用路径以及每个调用路径出现的第一次数。
[0017] 在一些实施例中,每个文件句柄泄漏信息还包括:创建文件句柄操作创建的文件句柄的类型;其中,对多个文件句柄泄漏信息包含的调用栈进行聚合分类,得到一个或多个调用路径以及每个调用路径出现的第一次数,包括:按照文件句柄的类型对多个文件句柄泄漏信息包含的调用栈进行聚合分类,得到各个文件句柄的类型对应的一个或多个调用路径以及每个调用路径出现的第一次数。
[0018] 在一些实施例中,每个文件句柄泄漏信息还包括:文件句柄泄漏信息对应的泄漏等级;其中,文件句柄泄漏分析方法还包括:确定至少部分调用路径在各个泄漏等级出现的第二次数。
[0019] 在一些实施例中,每个文件句柄泄漏信息还包括:创建文件句柄操作创建的文件句柄的名称;其中,文件句柄泄漏分析方法还包括:确定至少部分调用路径对应的每个文件句柄的名称及每个文件句柄的名称出现的第三次数。
[0020] 在一些实施例中,文件句柄泄漏分析方法还包括:对于每个调用路径,根据调用路径的第一次数和第二次数确定调用路径的根因指数,其中,根因指数指示调用路径为导致文件句柄泄漏原因的可能性,泄漏等级越高泄漏等级对应的第二次数对根因指数的贡献越高。
[0021] 在一些实施例中,接收进程的多个文件句柄泄漏信息,包括:接收进程在预设时间段内的多个文件句柄泄漏信息;其中,该方法还包括:对于每个调用路径:确定该调用路径对应的每个文件句柄泄漏信息中创建文件句柄操作的时间戳与预设时间段的起始时间之间的时间差值;确定该调用路径对应的文件句柄泄漏信息对应的时间差值的中位数;确定调用路径对应的文件句柄泄漏信息的时间差值相对于该中位数的偏离度;根据该调用路径的偏离度、第一次数和第二次数确定该调用路径的根因指数,其中,该根因指数指示调用路径为导致文件句柄泄漏原因的可能性,泄漏等级越高泄漏等级对应的第二次数对根因指数的贡献越高,偏离度与根因指数正相关。
[0022] 在一些实施例中,文件句柄泄漏分析方法还包括:接收周期性上报的进程的文件句柄数量;判断进程的文件句柄数量是否超过预设报警阈值;如果进程的文件句柄数量超过预设报警阈值,发送报警通知。
[0023] 根据本公开的又一方面,提供了一种文件句柄监测装置,包括:第一确定模块,用于周期性确定进程的文件句柄数量;第二确定模块,用于确定文件句柄数量对应的泄漏等级,其中,泄漏等级来自至少两个预设泄漏等级中的一个;采集模块,用于根据泄漏等级关联的采集策略采集文件句柄泄漏信息,其中,每个泄漏等级关联的采集策略不同,文件句柄泄漏信息包括创建文件句柄操作的调用栈;发送模块,用于将创建后达到预设时长而未被关闭的文件句柄对应的文件句柄泄漏信息发送给服务端。
[0024] 根据本公开的又一方面,提供了一种文件句柄泄漏分析装置,包括:接收模块,用于接收进程的多个文件句柄泄漏信息,其中,文件句柄泄漏信息包括创建文件句柄操作的调用栈,至少部分文件句柄泄漏信息对应于创建后达到预设时长而未被关闭的文件句柄;聚合模块,用于对多个文件句柄泄漏信息包含的调用栈进行聚合分类,得到一个或多个调用路径以及每个调用路径出现的第一次数。
[0025] 根据本公开的又一方面,提供了一种电子设备,包括:处理器;以及存储程序的存储器,其中,程序包括指令,指令在由处理器执行时使处理器执行本公开任意实施例的方法。
[0026] 根据本公开的再一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,计算机指令用于使计算机执行本公开任意实施例的方法。
[0027] 本公开实施例中提供的一个或多个技术方案,可实现对文件句柄泄漏的监测。

附图说明

[0028] 在下面结合附图对于示例性实施例的描述中,本公开的更多细节、特征和优点被公开,在附图中:
[0029] 图1示出了根据本公开示例性实施例的可以在其中实施本文描述的各种方法的示例系统的示意图;
[0030] 图2示出了根据本公开示例性实施例的文件句柄监测方法的流程图;
[0031] 图3示出了根据本公开示例性实施例的文件句柄监测方法的另一流程图;
[0032] 图4示出了根据本公开示例性实施例的根据泄漏等级关联的采集策略采集文件句柄泄漏信息的流程图;
[0033] 图5示出了根据本公开示例性实施例的文件句柄监测方法的又一流程图;
[0034] 图6示出了根据本公开示例性实施例的文件句柄监测装置的结构框图;
[0035] 图7示出了根据本公开示例性实施的文件句柄泄漏分析方法的流程图;
[0036] 图8示出了根据本公开示例性实施的文件句柄泄漏分析方法的另一流程图;
[0037] 图9示出了根据本公开示例性实施的文件句柄泄漏分析方法的又一流程图;
[0038] 图10示出了根据本公开示例性实施例的文件句柄泄漏分析的图形用户界面的示意图;
[0039] 图11示出了根据本公开示例性实施例的文件句柄泄漏分析装置的结构框图;
[0040] 图12示出了能够用于实现本公开的实施例的示例性电子设备的结构框图。

具体实施方式

[0041] 下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
[0042] 应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
[0043] 本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
[0044] 需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
[0045] 本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
[0046] 以下参照附图描述本公开的方案。
[0047] 图1示出了根据本公开示例性实施例的可以在其中实施本文描述的各种方法的示例系统的示意图,如图1所示,示例系统100包括:监测装置110和服务端120。监测装置110与服务端120通信连接。监测装置110被配置为监测应用200,并向服务器120发送监测数据。服务端120被配置为接收并存储监测数据,并可统计和分析监测数据。
[0048] 作为一种示例,示例系统100还可包括客户端130,客户端130与服务端120通信连接。客户端130可被配置为显示监测数据、显示检测数据的统计和分析结果等。客户端130可包括个人计算机、智能手机、平板电脑、监控大屏等电子设备,这些电子设备可被配置为通过浏览器、应用程序等图形用户界面显示信息以及响应用户操作。
[0049] 应用200可包括服务端的应用程序。作为一种示例,应用200可为微服务架中的组件或服务。应用200可包括一个或多个进程,图1中示出为进程1至进程n,n可以任意自然数。
[0050] 在一些情况下,操作系统可限制应用200的每个进程可调用的文件句柄数,超过该限制数值,进程则无法获得新的文件句柄。例如,在Linux环境中,任何事物都是用文件来表示,设备是文件,目录是文件,套接字(socket)也是文件。Linux系统对进程可以调用的文件句柄数做了限制,在默认情况下,每个进程可以调用的最大文件句柄数为1024个。其中‑n:file descriptors一行就表示当前用户、当前终端、单个进程能拥有的文件句柄的数量阈值,可以用ulimit‑n[阈值]命令来临时修改,退出登录即失效。如果想要永久修改,可以将ulimit‑n[阈值]写入用户的.bash_profile文件或/etc/profile中。在Linux系统中能够通过ulimit–n查看每一个进程限制的最大句柄数,Linux进程最多能够打开的文件句柄数是有限制的,超过了这个限制,应用程序就会抛出异常(Too many open files)。
[0051] 监测装置110可被配置为监测进程1至进程n中的至少一个进程的文件句柄,以监测文件句柄泄漏。
[0052] 图2示出了根据本公开示例性实施例的文件句柄监测方法的流程图,如图2所示,该方法包括步骤S201至步骤S204。
[0053] 步骤S201,周期性确定进程的文件句柄数量。
[0054] 在本实施例中,每次确定得到文件句柄数量后,进行步骤S202至步骤S204。
[0055] 步骤S202,确定文件句柄数量对应的泄漏等级。
[0056] 在本实施例中,泄漏等级来自至少两个预设泄漏等级中的一个。作为一种实施方式,泄漏等级包括第一泄漏等级和第二泄漏等级,第一泄漏等级的泄漏程度低于第二泄漏等级。作为另一种实施方式,泄漏等级包括第一、第二和第三泄漏等级,自第一、第二向第三泄漏等级泄漏程度依次增加。泄漏等级可通过泄漏等级的标识表示,例如第一、第二和第三泄漏等级分别表示为“1”、“2”和“3”,但不限于此。
[0057] 步骤S203,根据泄漏等级关联的采集策略采集文件句柄泄漏信息,其中,文件句柄泄漏信息包括创建文件句柄操作的调用栈。
[0058] 在本实施例中,每个泄漏等级关联相应的用于采集文件句柄泄漏信息的采集策略,每个泄漏等级关联的采集策略不同,由此实现对不同泄漏等级按不同采集策略采集文件句柄泄漏信息。采集策略可以是预先配置的。采集策略可被配置为调整采集的频率和/或次数。作为一种实施方式,采集策略被配置为:泄漏等级越高采集的频率越高和/或次数越多。
[0059] 步骤S204,将创建后达到预设时长而未被关闭的文件句柄对应的文件句柄泄漏信息发送给服务端。
[0060] 如果文件句柄创建后长时间未被关闭,可认为创建该文件句柄的操作可能存在文件句柄泄漏。如果在创建文件句柄操作后,达到预设时长而未关闭相应的文件句柄,将相应的文件句柄泄漏信息发送给服务端。
[0061] 在本实施例中,服务端可被配置为基于采集的文件句柄泄漏信息进行文件句柄泄漏分析。
[0062] 在一些实施例中,还可将泄漏等级作为文件句柄泄漏信息发送给服务端。作为一种实施方式,泄漏等级与创建文件句柄操作的调用栈一同被发送。
[0063] 在一些实施例中,确定创建文件句柄操作的时间戳,将创建文件句柄操作的时间戳作为文件句柄泄漏信息发送给服务端。
[0064] 在一些实施例中,采集创建文件句柄操作创建的文件句柄的信息,将文件句柄的信息作为文件句柄泄漏信息发送给服务端。作为一种实施方式,文件句柄的信息包括文件句柄的类型。作为另一种实施方式,文件句柄的信息包括文件句柄的名称。作为一种实施方式,文件句柄的信息包括文件句柄的类型和名称。
[0065] 在一些实施例中,确定创建文件句柄操作的线程信息,将线程信息作为文件句柄泄漏信息发送给服务端。
[0066] 在一些实施例中,将文件句柄数量发送给服务端。作为一种实施方式,周期性确定进程的文件句柄数量并发送进程的文件句柄数量。
[0067] 图3示出了根据本公开示例性实施例的文件句柄监测方法的另一流程图,如图3所示,该方法包括步骤S301至步骤S306。
[0068] 步骤S301,周期性确定进程的文件句柄数量。
[0069] 步骤S302,确定文件句柄数量对应的泄漏等级。
[0070] 作为一种实施方式,根据泄漏等级与文件句柄数量范围之间对应关系,确定文件句柄数量对应的泄漏等级。可预先设置每个泄漏等级对应的文件句柄数量范围。
[0071] 作为一种示例,预先设置第一泄漏等级对应的文件句柄数量范围为512至630,第二泄漏等级对应的文件句柄数量为631至758,第三泄漏等级对应的文件句柄数量为759至1021。对于每次确定出的文件句柄数量,如果小于512,视为不存在文件句柄泄漏;如果介于
512至630之间,确定为第一泄漏等级。
[0072] 步骤S303,根据泄漏等级关联的采集策略采集文件句柄泄漏信息,其中,文件句柄泄漏信息包括创建文件句柄操作的调用栈。
[0073] 步骤S304,缓存文件句柄泄漏信息,并在关闭文件句柄操作时,清除相应的文件句柄泄漏信息。
[0074] 作为一种实施方式,在步骤S303中,采集文件句柄泄漏信息还可包括但不限于以下至少之一:确定创建文件句柄操作的时间戳;采集创建文件句柄操作创建的文件句柄的信息;确定创建文件句柄操作的线程信息。
[0075] 作为一种实施方式,在步骤S304中,缓存的文件句柄泄漏信息还可包括但不限于以下至少之一:泄漏等级、创建文件句柄操作的时间戳、创建文件句柄操作创建的文件句柄的信息或创建文件句柄操作的线程信息。
[0076] 步骤S305,判断文件句柄泄漏信息是否缓存达到预设时长而未被清除。如果文件句柄泄漏信息缓存达到预设时长而未被清除,进入步骤S306。
[0077] 步骤S306,将缓存达到预设时长而未被清除的文件句柄泄漏信息发送给服务端。
[0078] 作为一种实施方式,在发送缓存达到预设时长而未被清除的文件句柄泄漏信息后,将该文件句柄泄漏信息标记为已发送,或清除该文件句柄泄漏信息。
[0079] 在一些实施例中,由第一线程和第二线程根据泄漏等级关联的采集策略采集文件句柄泄漏信息,其中,第一线程为非用户线程,第二线程为用户线程。在本实施例中,用户线程为实现应用的功能的线程,非用户线程是相对于是否实现应用的功能而言的,在本实施例中,第一线程为非用户线程,也就是为了监测应用而建立的线程。进程可包括一个或多个第二线程。
[0080] 图4示出了根据本公开示例性实施例的根据泄漏等级关联的采集策略采集文件句柄泄漏信息的流程图,如图4所示,包括步骤S401至步骤S402。
[0081] 步骤S401,第一线程根据泄漏等级关联的采集策略确定采集使能标识。
[0082] 其中,采集使能标识可被设置为允许采集和禁止采集。
[0083] 步骤S402,第二线程响应于创建文件句柄操作,根据采集使能标识采集文件句柄泄漏信息。
[0084] 其中,第二线程判断采集使能标识是否为允许采集,如果采集使能标识为允许采集时,第二线程采集文件句柄泄漏信息,如果采集使能标识为禁止采集,第二线程忽略该创建文件句柄操作。
[0085] 如图4所示,由第一线程(非用户线程)执行采集策略的逻辑以确定采集使能标识,由第二线程(用户线程)根据采集使能标识进行采集,因此至少可减少用户线程执行的监测任务,可降低监测对应用的性能的影响。
[0086] 至少部分泄漏等级可能持续一段时间,同时泄漏等级的持续时长一般无法预知,为了实现在泄漏等级持续的时间段内进行均匀采集,作为一种实施方式,在步骤S401中,第一线程根据泄漏等级关联的采集策略确定采集期和采集期间隔。第一线程在采集期设置采集使能标识设置为允许采集,并在采集期间隔设置采集使能标识为禁止采集。作为一种实施方式,采集策略被配置为:泄漏等级越高采集期越长和/或采集期间隔越短。
[0087] 作为一种示例,每个采集期为1分钟,采集期间隔为2分钟,由此每隔2分钟允许1分钟的采集。在允许采集的1分钟内,设置采集使能标识设置为允许采集;在间隔的2分钟内设置采集使能标识设置为禁止采集。在允许采集的1分钟内,第二线程响应于创建文件句柄操作,根据采集使能标识采集文件句柄泄漏信息。
[0088] 作为一种实施方式,第一线程在每个采集期开始时,将采集使能标识设置为允许采集,并开始计时,计时的时长为采集期的持续时长(例如30秒),计时结束即采集期结束,第一线程将将采集使能标识设置为禁止采集,并开始计时,计时的时长为采集期间隔的持续时长(例如60秒),计时结束即采集期间隔结束,可进入下一采集期。
[0089] 作为一种实施方式,第一线程确定进程的文件句柄数量的周期(例如30秒)大于采集期(例如20秒)并小于采集期和采集期间隔(例如20秒)之和。此时,第一线程在采集期间隔确定进程的文件句柄数量,并基于文件句柄数量确定泄漏等级。如果新确定的泄漏等级相对于上一次确定出的泄漏等级不同,第一线程重新确定相应的采集期和采集期间隔。如果新确定的与上一次确定出的泄漏等级相同,第一线程可在计时结束(也就是采集期间隔)后,进入下一采集期。
[0090] 作为一种实施方式,第一线程确定进程的文件句柄数量的周期(例如30秒)小于采集期(例如60秒)。此时,第一线程在采集期确定进程的文件句柄数量,并基于文件句柄数量确定泄漏等级。如果新确定的泄漏等级相对于上一次确定出的泄漏等级不同,第一线程重新确定相应的采集期和采集期间隔,可开始按照新的采集期和采集期间隔进行采集,或者等待当前采集期结束后开始按照新的采集期和采集期间隔进行采集。
[0091] 在采集期内可能出现大量的创建文件句柄操作,为了避免采集次数过多而影响应用性能,作为一种实施方式,第一线程根据泄漏等级关联的采集策略,确定采集期的最大采集次数,以限制第二线程在采集期内的采集次数。作为一种实施方式,采集策略被配置为:泄漏等级越高采集期的最大采集次数越大,以在泄漏等级高时进行更多次采集。
[0092] 作为一种实施方式,第二线程响应于创建文件句柄操作,判断采集使能标识是否为允许采集。如果采集使能标识为允许采集,第二线程判断采集期的采集次数是否达到最大采集次数。如果采集期的采集次数未达到最大采集次数,第二线程采集文件句柄泄漏信息。
[0093] 作为一种实施方式,如果采集期的采集次数达到最大采集次数,第二线程或第一线程设置采集使能标识为禁止采集。由此,在采集期内,第二线程响应于创建文件句柄操作,由于采集使能标识为禁止采集可不采集,从而可不判断采集期的采集次数是否达到最大采集次数,可降低对应用性能的影响。
[0094] 作为一种实施方式,各个泄漏等级配置相同的采集期和采集期间隔,并配置不同的最大采集次数。第一线程按照预设周期确定进程的文件句柄数量,并确定文件句柄数量对应的泄漏等级。在确定出新的泄漏等级相较于上一次的泄漏等级不同时,更新采集期的最大采集次数。
[0095] 在泄漏等级持续较长时间后,可以认为不泄漏风险较低,为了避免泄漏风险较低的情况下依然进行采集,作为一种实施方式,第一线程确定泄漏等级持续的时长;如果泄漏等级持续的时长达到泄漏等级对应的预设持续时长,第一线程设置采集使能标识为禁止采集,直到泄漏等级提高。
[0096] 作为一种示例,设置第一泄漏等级对应的预设持续时长为24小时,在第一泄漏等级持续的时长到达24小时的情况下,第一线程设置采集使能标识为禁止采集,此后第二线程不进行采集,直到基于文件句柄数量确定出的泄漏等级相较于当前的泄漏等级提高(例如,从第一泄漏等级提高到第二泄漏等级),此后可根据确定出的泄漏等级关联的采集策略进行采集。
[0097] 作为一种实施方式,还由第一线程周期性确定进程的文件句柄数量,确定文件句柄数量对应的泄漏等级。作为一种实施方式,由第三线程将文件句柄泄漏信息发送给服务端,其中,第三线程为非用户线程。
[0098] 下面对由检测线程(Check Thread)、用户线程(User Thread)和上报线程(Report Thread)进行文件句柄监测的方法进行说明,其中,检测线程和上报线程为非用户线程。
[0099] 图5示出了根据本公开示例性实施例的文件句柄监测方法的又一流程图,如图5所示,包括步骤S501至步骤S522。
[0100] 步骤S501,检测线程周期性确定进程的文件句柄数量。
[0101] 作为一种示例,检测线程可被配置为按照预设周期(例如30秒)确定进程的文件句柄数量。
[0102] 步骤S502,检测线程确定文件句柄数量对应的泄漏等级。
[0103] 步骤S503,检测线程根据泄漏等级关联的采集策略确定采集使能标识以及采集期的最大采集次数。
[0104] 检测线程根据泄漏等级关联的采集策略确定采集期和采集期间隔。检测线程在采集期设置采集使能标识设置为允许采集,并在采集期间隔设置采集使能标识为禁止采集。作为一种实施方式,采集策略被配置为:泄漏等级越高采集期越长和/或采集期间隔越短。
[0105] 作为一种实施方式,检测线程确定泄漏等级持续的时长;如果泄漏等级持续的时长达到泄漏等级对应的预设持续时长,检测线程设置采集使能标识为禁止采集,直到泄漏等级提高。
[0106] 步骤S511,用户线程响应于创建文件句柄操作,判断采集使能标识是否为允许采集。如果为采集使能标识为允许采集,进入步骤S512。如果为禁止采集,用户线程不进行采集。
[0107] 步骤S512,用户线程判断当前的采集次数是否达到最大采集次数。如果达到最大采集次数,进入步骤S513。如果未达到最大采集次数,进入步骤S514。
[0108] 作为一种实施方式,检测线程在一个采集周期结束后、下一个采集周期开始前,将用户线程的采集次数重置为零。
[0109] 步骤S513,用户线程设置采集使能标识为禁止采集。
[0110] 步骤S514,用户线程采集文件句柄泄漏信息。用户线程采集的文件句柄泄漏信息包括创建文件句柄操作的调用栈。
[0111] 作为一种实施方式,用户线程还将泄漏等级作为文件句柄泄漏信息。
[0112] 作为一种实施方式,用户线程还确定创建文件句柄操作的时间戳,还将创建文件句柄操作的时间戳作为文件句柄泄漏信息。
[0113] 作为一种实施方式,用户线程采集创建文件句柄操作创建的文件句柄的信息,将文件句柄的信息作为文件句柄泄漏信息。
[0114] 作为一种实施方式,用户线程确定创建文件句柄操作的线程信息(即用户线程),将线程信息作为文件句柄泄漏信息。
[0115] 步骤S515,用户线程缓存文件句柄泄漏信息,并在关闭文件句柄操作时,清除相应的文件句柄泄漏信息。
[0116] 作为一种实施方式,对创建文件句柄操作进行嵌码,嵌入的代码被配置为执行上述步骤S511至步骤S515。在执行文件句柄操作时,执行上述步骤S511至步骤S515。
[0117] 步骤S521,上报线程判断文件句柄泄漏信息是否缓存达到预设时长而未被清除。如果文件句柄泄漏信息缓存达到预设时长而未被清除,进入步骤S522。
[0118] 步骤S522,上报线程将缓存达到预设时长而未被清除的文件句柄泄漏信息发送给服务端。
[0119] 作为一种实施方式,文件句柄泄漏信息包括:泄漏等级、创建文件句柄操作的调用栈、创建文件句柄操作的时间戳、创建文件句柄操作创建的文件句柄的信息和创建文件句柄操作的线程信息。作为一种示例,文件句柄的信息包括:文件句柄的名称和/或文件句柄的类型。
[0120] 图6示出了根据本公开示例性实施例的文件句柄监测装置的结构框图,如图6所示,该装置包括:第一确定模块610,用于周期性确定进程的文件句柄数量。第二确定模块620,与第一确定模块610相连,用于确定文件句柄数量对应的泄漏等级,其中,泄漏等级来自至少两个预设泄漏等级中的一个。采集模块630,与第二确定模块620相连,用于根据泄漏等级关联的采集策略采集文件句柄泄漏信息,其中,每个泄漏等级关联的采集策略不同,文件句柄泄漏信息包括创建文件句柄操作的调用栈。发送模块640,与采集模块630相连,用于将创建后达到预设时长而未被关闭的文件句柄对应的文件句柄泄漏信息发送给服务端。
[0121] 在一些实施例中,采集策略被配置为泄漏等级越高采集的频率越高和/或次数越多。
[0122] 在一些实施例中,发送模块640还用于将泄漏等级作为文件句柄泄漏信息发送给服务端。采集模块630还用于确定创建文件句柄操作的时间戳,发送模块640还用于将创建文件句柄操作的时间戳作为文件句柄泄漏信息发送给服务端。采集模块630还用于采集创建文件句柄操作创建的文件句柄的信息,发送模块640还用于将文件句柄的信息作为文件句柄泄漏信息发送给服务端,其中文件句柄的信息可包括文件句柄的类型和/或文件句柄的名称。采集模块630还用于确定创建文件句柄操作的线程信息,发送模块640还用于将线程信息作为文件句柄泄漏信息发送给服务端。
[0123] 在一些实施例中,采集模块630还用于缓存文件句柄泄漏信息;在关闭文件句柄操作时,清除相应的文件句柄泄漏信息。发送模块640还用于判断文件句柄泄漏信息是否缓存达到预设时长而未被清除;如果文件句柄泄漏信息缓存达到预设时长而未被清除,将缓存达到预设时长而未被清除的文件句柄泄漏信息发送给服务端。
[0124] 在一些实施例中,采集模块630用于:在第一线程处根据泄漏等级关联的采集策略确定采集使能标识,其中,第一线程为非用户线程;在第二线程处响应于创建文件句柄操作,根据采集使能标识采集文件句柄泄漏信息,其中,第二线程为用户线程。
[0125] 在一些实施例中,采集模块630具体用于:在第一线程处根据泄漏等级关联的采集策略确定采集期和采集期间隔;第一线程在采集期设置采集使能标识设置为允许采集,并在采集期间隔设置采集使能标识为禁止采集。
[0126] 在一些实施例中,采集模块630还用于:在第一线程处根据泄漏等级关联的采集策略,确定采集期的最大采集次数。
[0127] 在一些实施例中,采集模块630具体用于:在第二线程处响应于创建文件句柄操作,判断采集使能标识是否为允许采集;如果采集使能标识为允许采集,第二线程判断采集期的采集次数是否达到最大采集次数;如果采集期的采集次数未达到最大采集次数,第二线程采集文件句柄泄漏信息。
[0128] 在一些实施例中,采集模块630具体用于:如果采集期的采集次数达到最大采集次数,在第二线程或第一线程处设置采集使能标识为禁止采集。
[0129] 在一些实施例中,采集模块630具体用于:在第一线程处确定泄漏等级持续的时长;如果泄漏等级持续的时长达到泄漏等级对应的预设持续时长,在第一线程处设置采集使能标识为禁止采集,直到泄漏等级提高。
[0130] 在一些实施例中,采集策略被配置为:泄漏等级越高采集期的最大采集次数越大。
[0131] 在一些实施例中,第二确定模块620用于根据泄漏等级与文件句柄数量范围之间对应关系,确定文件句柄数量对应的泄漏等级。
[0132] 本公开还提供了一种文件句柄泄漏分析方法。
[0133] 图7示出了根据本公开示例性实施的文件句柄泄漏分析方法的流程图,如图7所示,该方法包括步骤S701至步骤S702。
[0134] 步骤S701,接收进程的多个文件句柄泄漏信息。
[0135] 其中,文件句柄泄漏信息包括创建文件句柄操作的调用栈,至少部分文件句柄泄漏信息对应于创建后达到预设时长而未被关闭的文件句柄。
[0136] 步骤S702,对上述多个文件句柄泄漏信息包含的调用栈进行聚合分类,得到一个或多个调用路径以及每个调用路径出现的第一次数。
[0137] 图8示出了根据本公开示例性实施的文件句柄泄漏分析方法的另一流程图,如图8所示,该方法包括步骤S801至步骤S802。
[0138] 步骤S801,接收进程的多个文件句柄泄漏信息。
[0139] 其中,文件句柄泄漏信息包括创建文件句柄操作的调用栈和创建文件句柄操作创建的文件句柄的类型,至少部分文件句柄泄漏信息对应于创建后达到预设时长而未被关闭的文件句柄。
[0140] 步骤S802,按照文件句柄的类型对上述多个文件句柄泄漏信息包含的调用栈进行聚合分类,得到各个文件句柄的类型对应的一个或多个调用路径以及每个调用路径出现的第一次数。
[0141] 在一些实施例中,每个文件句柄泄漏信息还可包括文件句柄泄漏信息对应的泄漏等级,上述文件句柄泄漏分析方法还包括:确定至少部分调用路径在各个泄漏等级出现的第二次数。
[0142] 在一些实施例中,每个文件句柄泄漏信息还可包括创建文件句柄操作创建的文件句柄的名称,上述文件句柄泄漏分析方法还可包括:确定至少部分调用路径对应的每个文件句柄的名称及每个文件句柄的名称出现的第三次数。
[0143] 图9示出了根据本公开示例性实施的文件句柄泄漏分析方法的又一流程图,如图9所示,该方法包括步骤S901至步骤S904。
[0144] 步骤S901,接收进程的多个文件句柄泄漏信息。
[0145] 其中,文件句柄泄漏信息包括创建文件句柄操作的调用栈和文件句柄泄漏信息对应的泄漏等级,至少部分文件句柄泄漏信息对应于创建后达到预设时长而未被关闭的文件句柄。
[0146] 步骤S902,对上述多个文件句柄泄漏信息包含的调用栈进行聚合分类,得到一个或多个调用路径以及每个调用路径出现的第一次数。
[0147] 步骤S903,确定至少部分调用路径在各个泄漏等级出现的第二次数。
[0148] 步骤S904,对于每个调用路径,根据调用路径的第一次数和第二次数确定调用路径的根因指数。其中,根因指数指示调用路径为导致文件句柄泄漏原因的可能性,泄漏等级越高泄漏等级对应的第二次数对根因指数的贡献越高。作为一种实施方式,泄漏等级越高,器对应的第二次数的权重越高。
[0149] 作为一种示例,泄漏等级从低到高依次为第一级、第二级和第三级,第一级、第二级和第三级对应的权重依次为a1、a2和a3,其中,a1
[0150] 在一些实施例中,接收进程的多个文件句柄泄漏信息,包括:接收进程在预设时间段内的多个文件句柄泄漏信息。对预设时间段内的文件句柄泄漏信息进行分析。对于每个调用路径:确定该调用路径对应的每个文件句柄泄漏信息中创建文件句柄操作的时间戳与预设时间段的起始时间之间的时间差值(表示为Xi);确定该调用路径对应的文件句柄泄漏信息对应的时间差值的中位数(表示为Xmid);确定调用路径对应的文件句柄泄漏信息的时2
间差值相对于该中位数的偏离度(表示为S),偏离度越高表示连续性越强;根据该调用路径的偏离度、第一次数和第二次数确定该调用路径的根因指数,其中,该根因指数指示调用路径为导致文件句柄泄漏原因的可能性,泄漏等级越高泄漏等级对应的第二次数对根因指数的贡献越高,偏离度与根因指数正相关。
[0151] 作为一种示例,泄漏等级从低到高依次为第一级、第二级和第三级,第一级、第二级和第三级对应的权重依次为a1、a2和a3,其中,a1确定:Index=a1*T1+a2*T2+a3*T3+b*T+c*S ,其中,T表示第一次数,b表示第一次数的权
2
重,T1、T2和T3分别表示第一级、第二级和第三级对应的第二次数,S表示偏离度,c表示偏离度的权重。
[0152] 作为一种示例,可按照以下方式确定偏离度S2:
[0153]
[0154] 其中,n表示调用路径对应的文件句柄泄漏信息的总数,其中,Xi表示文件句柄泄漏信息出现在对应时间段相对于该时间段起始时间的时间差值,例如开始时间为12点,X1第一个出现的点12点01分,那么X1=1(单位为分钟)。Xmid为出现了所有的X的中位数,例如有X1=1(表示12点01),X2=2,X3=3,那么Xmid=2。
[0155] 在一些示例中,对偏离度施加系数以调整其取值,通过系数调整的偏离度表示为:
[0156]
[0157] 其中,Tmin表示时间范围内的总时长(与时间差值使用相同单位,例如分钟),例如时间范围6小时为3600。α表示影响系数。
[0158] 作为一种实施方式,基于根因指数对少部分调用路径排序,根因指数指示导致文件句柄泄漏原因的可能性越大,调用路径在排序中越靠前。
[0159] 在一些实施例中,上述文件句柄泄漏分析方法还包括:接收周期性上报的进程的文件句柄数量;判断进程的文件句柄数量是否超过预设报警阈值;如果进程的文件句柄数量超过预设报警阈值,发送报警通知。
[0160] 在一些实施例中,图7至9所示的文件句柄泄漏分析方法还包括:向客户端发送聚合的得到一个或多个调用路径以及每个调用路径出现的第一次数、第二次数和文件句柄信息,已在客户端处被显示。
[0161] 图10示出了根据本公开示例性实施例的文件句柄泄漏分析的图形用户界面的示意图,如图10所示,该图形用户界面示出了三个区域A、B和C,区域A示出了调用路径和调用路径对应的文件句柄的类型和文件句柄名称。区域B示出了区域A中每个调用路径对应的总次数,区域C示出了区域A中各个调用路径在不同泄漏等级对应的次数,如图10所示,泄漏等级包括轻度泄漏和中度泄漏。
[0162] 图11示出了根据本公开示例性实施例的文件句柄泄漏分析装置的结构框图,如图11所示,包括:接收模块1110,用于接收进程的多个文件句柄泄漏信息,其中,文件句柄泄漏信息包括创建文件句柄操作的调用栈,至少部分文件句柄泄漏信息是在被缓存达到预设时长而未被清除的情况下被发送的;聚合模块1120,与接收模块1110相连,用于对多个文件句柄泄漏信息包含的调用栈进行聚合分类,得到一个或多个调用路径以及每个调用路径出现的第一次数。
[0163] 在一些实施例中,每个文件句柄泄漏信息还包括:创建文件句柄操作创建的文件句柄的类型。聚合模块1120用于按照文件句柄的类型对多个文件句柄泄漏信息包含的调用栈进行聚合分类,得到各个文件句柄的类型对应的一个或多个调用路径以及每个调用路径出现的第一次数。
[0164] 在一些实施例中,每个文件句柄泄漏信息还包括:文件句柄泄漏信息对应的泄漏等级。聚合模块1120还用于确定至少部分调用路径在各个泄漏等级出现的第二次数。
[0165] 在一些实施例中,每个文件句柄泄漏信息还包括:创建文件句柄操作创建的文件句柄的名称。聚合模块1120还用于确定至少部分调用路径对应的每个文件句柄的名称及每个文件句柄的名称出现的第三次数。
[0166] 在一些实施例中,聚合模块1120还用于对于每个调用路径,根据调用路径的第一次数和第二次数确定调用路径的根因指数,其中,根因指数指示调用路径为导致文件句柄泄漏原因的可能性,泄漏等级越高泄漏等级对应的第二次数对根因指数的贡献越高。
[0167] 在一些实施例中,接收模块1110还用于接收周期性上报的进程的文件句柄数量;判断进程的文件句柄数量是否超过预设报警阈值;如果进程的文件句柄数量超过预设报警阈值,发送报警通知。
[0168] 本公开示例性实施例还提供一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器。所述存储器存储有能够被所述至少一个处理器执行的计算机程序,所述计算机程序在被所述至少一个处理器执行时用于使所述电子设备执行根据本公开实施例的方法。
[0169] 本公开示例性实施例还提供一种存储有计算机程序的非瞬时计算机可读存储介质,其中,所述计算机程序在被计算机的处理器执行时用于使所述计算机执行根据本公开实施例的方法。
[0170] 本公开示例性实施例还提供一种计算机程序产品,包括计算机程序,其中,所述计算机程序在被计算机的处理器执行时用于使所述计算机执行根据本公开实施例的方法。
[0171] 参考图12,现将描述可以作为本公开的服务器或客户端的电子设备1200的结构框图,其是可以应用于本公开的各方面的硬件设备的示例。电子设备旨在表示各种形式的数字电子的计算机设备,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
[0172] 如图12所示,电子设备1200包括计算单元1201,其可以根据存储在只读存储器(ROM)1202中的计算机程序或者从存储单元1208加载到随机访问存储器(RAM)1203中的计算机程序,来执行各种适当的动作和处理。在RAM 1203中,还可存储设备1200操作所需的各种程序和数据。计算单元1201、ROM 1202以及RAM 1203通过总线1204彼此相连。输入/输出(I/O)接口1205也连接至总线1204。
[0173] 电子设备1200中的多个部件连接至I/O接口1205,包括:输入单元1206、输出单元1207、存储单元1208以及通信单元1209。输入单元1206可以是能向电子设备1200输入信息的任何类型的设备,输入单元1206可以接收输入的数字或字符信息,以及产生与电子设备的用户设置和/或功能控制有关的键信号输入。输出单元1207可以是能呈现信息的任何类型的设备,并且可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器和/或打印机。存储单元1208可以包括但不限于磁盘、光盘。通信单元1209允许电子设备1200通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据,并且可以包括但不限于调制解调器、网卡、红外通信设备、无线通信收发机和/或芯片组,例如蓝牙设备、WiFi设备、WiMax设备、蜂窝通信设备和/或类似物。
[0174] 计算单元1201可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元1201的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元1201执行上文所描述的各个方法和处理。例如,在一些实施例中,文件句柄监测、泄漏分析方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1208。在一些实施例中,计算机程序的部分或者全部可以经由ROM 1202和/或通信单元1209而被载入和/或安装到电子设备1200上。在一些实施例中,计算单元1201可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行文件句柄监测、泄漏分析方法。
[0175] 用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0176] 在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD‑ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0177] 如本公开使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(PLD)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。
[0178] 为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0179] 可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
[0180] 计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端‑服务器关系的计算机程序来产生客户端和服务器的关系。