CN107423213B - 一种文件描述符分配检测方法和装置 - Google Patents
一种文件描述符分配检测方法和装置 Download PDFInfo
- Publication number
- CN107423213B CN107423213B CN201710233321.XA CN201710233321A CN107423213B CN 107423213 B CN107423213 B CN 107423213B CN 201710233321 A CN201710233321 A CN 201710233321A CN 107423213 B CN107423213 B CN 107423213B
- Authority
- CN
- China
- Prior art keywords
- file
- application program
- file descriptor
- descriptors
- descriptor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
- G06F11/3072—Monitoring arrangements determined by the means or processing involved in reporting the monitored data where the reporting involves data filtering, e.g. pattern matching, time or event triggered, adaptive or policy-based reporting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Storage Device Security (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种文件描述符分配检测方法和装置,用以对文件描述符分配泄露情况进行检测,减少由于文件描述符不足导致的应用程序崩溃问题。所述文件描述符分配检测方法,包括:在应用程序运行过程中,在应用程序运行过程中,记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的分配路径以及所述文件描述符的释放信息;如果根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息判断出所述系统为所述应用程序分配的文件描述符数量超过第一预设阈值,则分析记录的每一文件描述符对应的分配路径;根据分析结果,确定所述应用程序是否存在文件描述符分配泄露。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种文件描述符分配检测方法和装置。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
文件描述符是linux系统中非常宝贵的系统资源,用来唯一标识已经打开的文件,应用程序每打开一个文件,系统就会有为其分配一个文件描述符与其对应,应用程序可以用文件描述符访问到对应的文件。
通常系统允许应用程序使用的文件描述符是有上限的,通常为1024个,linux系统用整数来表示文件描述符,如果上限是1024,那么系统返回的文件描述符的范围是在0-1023,每次系统分配的文件描述符总是最小且可用的,每次应用程序访问完毕文件后,需要释放文件描述符,以便应用程序下次打开文件时有可用的文件描述符,如果没有可用的文件描述符,系统就会报错,造成应用程序崩溃,这将导致应用程序在运行过程中被强制退出,影响了应用程序运行的稳定性。
发明内容
本发明实施例提供一种文件描述符分配检测方法和装置,用以对文件描述符分配泄露情况进行检测,减少由于文件描述符不足导致的应用程序崩溃问题,提高应用程序运行的稳定性。
本发明实施例提供一种文件描述符分配检测方法,包括:
在应用程序运行过程中,记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的分配路径以及所述文件描述符的释放信息;
如果根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息判断出所述系统为所述应用程序分配的文件描述符数量超过第一预设阈值,则分析记录的每一文件描述符对应的分配路径;
根据分析结果,确定所述应用程序是否存在文件描述符分配泄露。
优选地,记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的分配路径以及所述文件描述符的释放信息,具体包括:
在监控到所述应用程序调用文件描述符分配函数时,记录所述系统为所述应用程序分配的文件描述符及其对应的分配路径;
在监控到所述应用程序调用文件描述符释放函数时,删除被释放的文件描述符及其对应的分配路径。
优选地,采用数据队列的方式记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的调用堆栈以及所述文件描述符的释放信息;以及
在监控到所述应用程序调用文件描述符分配函数时,记录所述系统为所述应用程序分配的文件描述符及其对应的分配路径,具体包括:
在监控到所述应用程序调用文件描述符分配函数时,在所述数据队列中添加所述系统为所述应用程序分配的文件描述符及其对应的分配路径;
在监控到所述应用程序调用文件描述符释放函数时,删除被释放的文件描述符及其对应的分配路径,具体包括:
在监控到所述应用程序调用文件描述符释放函数时,从所述数据队列中删除被释放的文件描述符及其对应的分配路径。
优选地,根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息,按照以下流程判断所述系统为所述应用程序分配的文件描述符数量是否超过第一预设阈值:
根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息,统计所述系统为所述应用程序分配的文件描述符的数量;
根据统计结果确定所述应用程序分配的文件描述符的数量是否超过第一预设阈值。
优选地,所述系统每次为所述应用程序分配的文件描述符为系统中最小且可用的;以及
根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息,按照以下流程判断所述系统为所述应用程序分配的文件描述符数量是否超过第一预设阈值:
根据记录的、所述系统为所述应用程序分配的文件描述符,判断所述文件描述符是否超过第一预设阈值。
优选地,分析记录的每一文件描述符对应的分配路径,具体包括:
根据记录的每一文件描述符对应的分配路径,统计相同分配路径的数量;以及
根据分析结果,确定所述应用程序是否存在文件描述符分配泄露,具体包括:
如果相同分配路径的数量超过第二预设阈值,则确定所述应用程序存在文件描述符分配泄露;否则,确定所述应用程序不存在文件描述符分配泄露。
可选地,在确定所述应用程序存在文件描述符分配泄露之后,还包括:
针对数量超过第二预设阈值的分配路径对应的文件描述符,调用文件描述符释放函数,释放相应的文件描述符;和/或
输出所述应用程序存在文件描述符泄露的第一提示信息,所述第一提示信息中包含有数量超过第二预设阈值的分配路径。
可选地,在确定所述应用程序不存在文件描述符分配泄露之后,还包括:
输出所述应用程序依赖文件超限的第二提示信息,所述第二提示信息中携带有所有记录的分配路径,所述第二提示信息用于提示用户根据所有记录的分配路径针对所述应用程序进行依赖文件的合并。
优选地,所述文件描述符对应的分配路径包括所述文件描述符对应的调用堆栈。
本发明实施例提供一种文件描述符分配检测装置,包括:
记录单元,用于在应用程序运行过程中,记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的分配路径以及所述文件描述符的释放信息;
分析单元,用于如果根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息判断出所述系统为所述应用程序分配的文件描述符数量超过第一预设阈值,则分析记录的每一文件描述符对应的分配路径;
确定单元,用于根据分析结果,确定所述应用程序是否存在文件描述符分配泄露。
优选地,所述记录单元,具体用于在监控到所述应用程序调用文件描述符分配函数时,记录所述系统为所述应用程序分配的文件描述符及其对应的分配路径;在监控到所述应用程序调用文件描述符释放函数时,删除被释放的文件描述符及其对应的分配路径。
优选地,所述记录单元,具体用于采用数据队列的方式记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的调用堆栈以及所述文件描述符的释放信息;以及在监控到所述应用程序调用文件描述符分配函数时,在所述数据队列中添加所述系统为所述应用程序分配的文件描述符及其对应的分配路径;在监控到所述应用程序调用文件描述符释放函数时,从所述数据队列中删除被释放的文件描述符及其对应的分配路径。
优选地,所述分析单元,具体用于根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息,统计所述系统为所述应用程序分配的文件描述符的数量;根据统计结果确定所述应用程序分配的文件描述符的数量是否超过第一预设阈值。
优选地,所述系统每次为所述应用程序分配的文件描述符为系统中最小且可用的;以及
所述分析单元,具体用于根据记录的、所述系统为所述应用程序分配的文件描述符,判断所述文件描述符是否超过第一预设阈值。
优选地,所述分析单元,具体用于根据记录的每一文件描述符对应的分配路径,统计相同分配路径的数量;
确定单元,具体用于如果相同分配路径的数量超过第二预设阈值,则确定所述应用程序存在文件描述符分配泄露;否则,确定所述应用程序不存在文件描述符分配泄露。
可选地,本发明实施例提供的文件描述符分配检测装置,还可以包括:
第一处理单元,用于在所述确定单元确定出所述应用程序存在文件描述符分配泄露之后,针对数量超过第二预设阈值的分配路径对应的文件描述符,调用文件描述符释放函数,释放相应的文件描述符;和/或输出所述应用程序存在文件描述符分配泄露的第一提示信息,所述第一提示信息中包含有数量超过第二预设阈值的分配路径。
可选地,本发明实施例提供的文件描述符分配检测装置,还可以包括:
第二处理单元,用于在所述确定单元确定出所述应用程序不存在文件描述符分配泄露之后,输出所述应用程序依赖文件超限的第二提示信息,所述第二提示信息中携带有所有记录的分配路径,所述第二提示信息用于提示用户根据所有记录的分配路径针对所述应用程序进行依赖文件的合并。
优选地,所述文件描述符对应的分配路径包括所述文件描述符对应的调用堆栈。
本发明实施例还提供了一种电子设备,包括:至少一个处理器;以及存储器;其中,所述存储器存储有可被所述至少一个处理器执行的程序,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明上述的文件描述符分配检测方法:在应用程序运行过程中,记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的分配路径以及所述文件描述符的释放信息;如果根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息判断出所述系统为所述应用程序分配的文件描述符数量超过第一预设阈值,则分析记录的每一文件描述符对应的分配路径;根据分析结果,确定所述应用程序是否存在文件描述符分配泄露。
本发明实施例提供的文件描述符分配检测方法和装置,通过在应用程序运行过程中,记录系统为该应用程序分配的文件描述符、文件描述符的分配路径以及文件描述符的释放信息,如果根据记录的信息监测到系统为该应用程序分配的文件描述符数量超多预设阈值时,则通过对记录的文件描述符的分配路径进行分析,以确定该应用程序是否存在文件描述符分配泄露,使得用户能够据此针对文件描述符泄露问题进行修复,减少由于文件描述符泄露导致的应用程序运行崩溃。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例中,文件描述符分配检测方法的实施流程示意图;
图2为本发明实施例中,文件描述符分配检测方法的实施流程示意图;
图3为本发明实施例中,文件描述符分配检测装置的结构示意图;
图4为本发明实施例中,基于文件描述符分配检测方法的设备的硬件结构示意图。
具体实施方式
为了减少由于文件描述符分配泄露导致的应用程序运行崩溃的问题,提高应用程序运行的稳定性,本发明实施例提供了一种文件描述符分配检测方法和装置。
以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
发明人发现,由于文件描述符不足导致的应用程序崩溃,通常都是因为忘记释放文件描述符或者应用程序同时打开了太多的文件导致的,而现有技术中可以通过FindBugs对应用程序代码进行检查,FindBugs是一种静态分析工具,其可以发现java层的文件描述符分配泄露,但是,应用程序中不止有java层的代码,还有很多JNI(Java NativeInterface,JaVa本地调用)调用的C/C++代码,所以FindBugs发现的问题并不彻底。
有鉴于此,本发明实施例中采用对应用程序代码动态检测的方案,即在应用程序运行过程中,通过记录文件描述符分配和释放情况,从而定位出文件描述符不足的原因,使得用户可以根据文件描述符不足的原因对应用程序代码进行相应的修复,减少由于文件描述符不足导致的应用程序运行崩溃,提高应用程序运行的稳定性。
本发明实施例提供的文件描述符分配检测方法适用于所有基于Linux的系统,如Android(安卓)系统,iOS(苹果移动设备操作系统)系统等。
如图1所示,其为本发明实施例提供的文件描述符分配检测方法的实施流程示意图,可以包括以下步骤:
S11、在应用程序运行过程中,记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的分配路径以及所述文件描述符的释放信息。
通常,应用程序通过文件描述符分配函数来请求系统为其分配文件描述符,在相应的文件访问完毕后,应用程序通过文件描述符释放函数来释放系统为其分配的文件描述符。由此,通过监控应用程序调用文件描述符分配函数和文件描述符释放函数可以根据文件描述符的分配和释放。
具体实施时,可以通过hook(钩子)技术来实现对应用程序对文件描述符分配函数和文件描述符释放函数的调用的跟踪。在hook到应用程序调用文件描述符分配函数时,记录系统为应用程序分配的文件描述符,本发明实施例中,为了实现对文件描述符分配情况的分析,检测应用程序是否存在文件描述符分配泄露,在记录系统为应用程序分配的文件描述符的同时,还需要记录系统所分配的文件描述符对应的分配路径,优选地,这里的分配路径可以为文件描述符对应的调用堆栈。在hook到应用程序调用文件描述符释放函数时,从记录的数据中删除被释放的文件描述符及其对应的分配路径。
较佳地,具体实施时,可以采用数据队列的方式来记录系统为应用程序分配的文件描述符、文件描述符对应的调用堆栈以及文件描述符的释放信息,这样,在监控到应用程序调用文件描述符函数时,在数据队列中添加系统为所述应用程序分配的文件描述符及其对应的分配路径,如果监控到应用程序调用文件描述符释放函数,则从数据队列中删除被释放的文件描述符及其对应的分配路径。这样,数据队列中存储的数据包括系统为应用程序分配的文件描述符及其对应的分配路径信息。
S12、如果根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息判断出所述系统为所述应用程序分配的文件描述符数量超过第一预设阈值,则分析记录的每一文件描述符对应的分配路径。
S13、根据分析结果,确定应用程序是否存在文件描述符分配泄露。
步骤S12中,如果根据记录的数据判断出为应用程序分配的文件描述符数量超过第一预设阈值,则可以对记录的每一文件描述符对应的分配路径进行分析,确定文件描述符分配溢出的原因。其中,文件描述符分配溢出的原因可能有两个,一个是应用程序存在文件描述符分配泄露,另外一个是应用程序运行依赖的文件确实很多。无论哪种情况,都需要通过对应用程序代码进行修复来降低文件描述符分配溢出风险。
优选地,可以按照以下任一实施方式判断系统为应用程序分配的文件描述符数量是否超过第一预设阈值:
第一种实施方式、统计系统为应用程序分配的文件描述符的数量。
这种实施方式下,由于步骤S11中,当监控到应用程序调用文件描述符分配函数时,在数据队列中添加系统为应用程序分配的文件描述符,当监控到应用程序调用文件描述符释放函数时,在数据队列中删除被释放的文件描述符,因此,数据队列中存储的文件描述符为系统为应用程序分配且未被释放的文件描述符,基于此,步骤S12中,可以统计数据队列中存储的、系统为应用程序分配的文件描述符的数量,根据统计结果判断系统为应用程序分配的文件描述符数量超过第一预设阈值。
第二种实施方式、按照系统为应用程序分配的文件描述符判断。
这种实施方式依赖于文件描述符的分配方式,例如,当系统为应用程序每次都分配当前最小且可用的文件描述符时,这样,系统为应用程序分配的文件描述符为当前可用的文件描述符中最小的,假设第一预设阈值为1000,由于应用程序运行过程中,系统为应用程序分配的部分文件描述符可以通过文件描述符释放函数被释放,因此,则只要系统中存在小于1000的文件描述符,当应用程序调用文件描述符分配函数时,系统将为应用程序分配小于1000的文件描述符,当系统为应用程序分配文件描述符1000时,说明系统中小于1000的文件描述符当前均被分配且应用程序未释放,由此根据系统为应用程序分配的文件描述符可以确定系统为应用程序分配的文件描述符数量。即当系统为应用程序分配的文件描述符超过第一预设阈值时,可以确定系统为应用程序分配的文件描述符数量超过第一预设阈值,相应地,当系统为应用程序分配的文件描述符不超过第一预设阈值时,可以确定系统为应用程序分配的文件描述符数量也不超过第一预设阈值。
其中,第一预设阈值可以根据实际需要进行设置,本发明实施例中对此不进行限定,例如,如果系统设置的可用文件描述符上限为1024,则第一预设阈值可以设置为1000。
具体实施时,步骤S12中,可以根据记录的每一文件描述符对应的分配路径,统计相同分配路径的数量,针对每一分配路径,判断该分配路径的数量是否超过第二预设阈值。其中,第二预设阈值也可以根据实际需要进行设置,本发明实施例中对此不进行限定,例如,第二预设阈值可以设置为300。
根据步骤S12的统计结果,如果相同分配路径的数量超过第二预设阈值,则确定应用程序存在文件描述符分配泄露,由此,可以确定文件描述符溢出是由于文件描述符分配泄露导致;否则,确定应用程序不存在文件描述符分配泄露,即文件描述符溢出是由于该应用程序运行依赖的文件过多导致的。
针对定位出的不同的文件描述符溢出原因,本发明实施例中还提供了相应的处理方式,以下详细介绍之。
一、针对文件描述符溢出的原因为文件描述符分配泄露的处理方式
具体实施时,如果确定应用程序存在文件描述符分配泄露,则说明应用程序在调用文件描述符分配函数后,没有及时调用文件描述符释放函数来释放占用的文件描述符。这种情况下,可以按照以下任一方式处理:
第一种处理方式、输出存在文件描述符分配泄露的第一提示信息,在第一提示信息中可以包含有数量超过第一预设阈值的分配路径。其中,第一提示信息中包含的分配路径用于指示用户针对相应的分配路径对应的应用程序代码进行修复,例如,在调用文件描述符分配函数后,增加文件描述符释放函数以及时释放占用的文件描述符。
第二种处理方式、针对数量超过第一预设阈值的分配路径对应的文件描述符,调用文件描述符释放函数,释放相应的文件描述符。
二、针对文件描述符溢出的原因为应用程序运行依赖的文件太多的处理方式
如果确定应用程序不存在文件描述符分配泄露,则说明该应用程序运行需要依赖的文件过多,这种情况下,可以输出应用程序依赖文件超限的第二提示信息,在第二提示信息中包含有所有记录的文件描述符对应的分配路径。其中,第二提示信息用于提示用户根据所有记录的分配路径针对所述应用程序进行依赖文件的合并,以减少应用程序运行所依赖的文件,例如,用户可以根据通过文件描述符对应的分配路径定位对应位置的应用程序代码,通过修改应用程序代码来进行依赖文件合并减少应用程序运行所需要依赖的文件,。
需要说明的是,在Linux系统中,可以生成文件描述符的系统函数包括open、open64、creat、create64、socket、socketpair和pipe,即当应用程序调用这些函数时,可以确定监控到文件描述符分配函数,而可以释放文件描述符的系统函数包括close函数,即当应用程序调用close函数时,可以确定监控到文件描述符释放函数。
为了更好地理解本发明实施例,以下以文件描述符为例,对本发明实施例提供的文件描述符分配检测方法的具体实施流程进行说明,如图2所示,可以包括以下步骤:
S21、在应用程序运行过程中,判断是否监控到文件描述符分配函数或者文件描述符释放函数,如果是,则执行步骤S22,否则,继续监控。
S22、如果监控到文件描述符分配函数,则记录系统为应用程序分配的文件描述符及其对应的函数调用堆栈;如果监控到文件描述符释放函数,则删除被释放的文件描述符及其对应的函数调用堆栈。
本步骤中,当应用程序调用文件描述符分配函数时,系统将返回最小且可用的文件描述符,根据系统返回的文件描述符,在数据队列中增加相应的文件描述符和应用程序中文件描述符分配函数调用堆栈。当应用程序调用文件描述符释放函数时,从数据队列中删除相应的文件描述符及其对应的函数调用堆栈。
S23、判断本次系统返回的文件描述符是否超过第一预设阈值,如果是,执行步骤S24,否则,执行步骤S21。
S24、获取记录的每一文件描述符对应的函数调用堆栈。
S25、针对每一文件描述符对应的函数调用堆栈,分别统计相同函数调用堆栈的数量。
S26、针对每一函数调用堆栈,判断该系统函数调用堆栈的数量是否超过第二预设阈值,如果是,执行步骤S27,否则,执行步骤S29。
S27、确定存在文件描述符分配泄露。
S28、针对数量超过第二预设阈值的函数调用堆栈所对应的文件描述符进行修复,流程结束。
具体的,可以调用close函数释放相应的文件描述符;或者输出存在文件描述符分配泄露的提示信息,在输出的提示信息中包含有数量超过第二预设阈值的函数调用堆栈,使得用户可以据此定位到相应位置的应用程序代码并进行修复。
S29、确定不存在文件描述符分配泄露。
S210、输出应用程序依赖文件过多的提示信息,流程结束。
其中,在本步骤输出的提示信息中携带有记录的所有系统函数调用堆栈,使得用户可以据此定位到相应位置的应用程序代码进行修复。例如,用户可以通过修改相应位置的程序代码将应用程序依赖的文件进行合并,减少应用程序运行需要占用的文件描述符。
本发明实施例提供的文件描述符分配检测方法中,通过记录文件描述符分配信息,当判断出文件描述符溢出时,对记录的数据进行分析,以确定文件描述符溢出的原因,并根据确定出的文件描述符溢出原因进行针对性的修复,从而能够减少由于文件描述符溢出导致的应用程序崩溃,提高了应用程序运行的稳定性。本发明实施例可以集成在应用程序中,从而在测试阶段可以发现和解决文件描述符不足导致的应用程序崩溃问题。
基于同一发明构思,本发明实施例中还提供了一种文件描述符分配检测装置,由于上述装置解决问题的原理与文件描述符分配检测方法相似,因此上述装置的实施可以参见方法的实施,重复之处不再赘述。
如图3所示,其为本发明实施例提供的文件描述符分配检测装置的结构示意图,可以包括:
记录单元31,用于在应用程序运行过程中,记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的分配路径以及所述文件描述符的释放信息;
分析单元32,用于如果根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息判断出所述系统为所述应用程序分配的文件描述符数量超过第一预设阈值,则分析记录的每一文件描述符对应的分配路径;
确定单元33,用于根据分析结果,确定所述应用程序是否存在文件描述符分配泄露。
优选地,所述记录单元31,具体用于在监控到所述应用程序调用文件描述符分配函数时,记录所述系统为所述应用程序分配的文件描述符及其对应的分配路径;在监控到所述应用程序调用文件描述符释放函数时,删除被释放的文件描述符及其对应的分配路径。
优选地,所述记录单元31,具体用于采用数据队列的方式记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的调用堆栈以及所述文件描述符的释放信息;以及在监控到所述应用程序调用文件描述符分配函数时,在所述数据队列中添加所述系统为所述应用程序分配的文件描述符及其对应的分配路径;在监控到所述应用程序调用文件描述符释放函数时,从所述数据队列中删除被释放的文件描述符及其对应的分配路径。
优选地,所述分析单元32,具体用于根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息,统计所述系统为所述应用程序分配的文件描述符的数量;根据统计结果确定所述应用程序分配的文件描述符的数量是否超过第一预设阈值。
优选地,所述系统每次为所述应用程序分配的文件描述符为系统中最小且可用的。所述分析单元32,具体用于根据记录的、所述系统为所述应用程序分配的文件描述符,判断所述文件描述符是否超过第一预设阈值。
优选地,所述分析单元32,具体用于根据记录的每一文件描述符对应的分配路径,统计相同分配路径的数量;
确定单元33,具体用于如果相同分配路径的数量超过第二预设阈值,则确定所述应用程序存在文件描述符分配泄露;否则,确定所述应用程序不存在文件描述符分配泄露。
可选地,本发明实施例提供的文件描述符分配检测装置,还可以包括:
第一处理单元,用于在所述确定单元33确定出所述应用程序存在文件描述符分配泄露之后,针对数量超过第二预设阈值的分配路径对应的文件描述符,调用文件描述符释放函数,释放相应的文件描述符;和/或输出所述应用程序存在文件描述符泄露的第一提示信息,所述第一提示信息中包含有数量超过第二预设阈值的分配路径。
可选地,本发明实施例提供的文件描述符分配检测装置,还可以包括:
第二处理单元,用于在所述确定单元33确定出所述应用程序不存在文件描述符分配泄露之后,输出所述应用程序依赖文件超限的第二提示信息,所述第二提示信息中携带有所有记录的分配路径,所述第二提示信息用于提示用户根据所有记录的分配路径针对所述应用程序进行依赖文件的合并。
优选地,所述文件描述符对应的分配路径包括所述文件描述符对应的调用堆栈。
为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本发明时可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。
本发明实施例还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述的文件描述符分配检测方法。
如图4所示,其为本发明实施例提供的基于文件描述符分配检测方法的电子设备的硬件结构示意图,如图4所示,该设备包括:
一个或多个处理器410以及存储器420,图4中以一个处理器410为例。
执行文件描述符分配检测方法的设备还可以包括:输入装置430和输出装置440。
处理器410、存储器420、输入装置430和输出装置440可以通过总线或者其他方式连接,图4中以通过总线连接为例。
存储器420作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本发明实施例中的文件描述符分配检测方法对应的程序指令/模块/单元(例如,附图3所示的记录单元31、分析单元32、确定单元33)。处理器410通过运行存储在存储器420中的非易失性软件程序、指令以及模块/单元,从而执行服务器或者智能终端的各种功能应用以及数据处理,实现上述的文件描述符分配检测方法。
存储器420可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据基于情绪识别的信息推荐装置的使用所创建的数据等。此外,存储器420可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器420可选包括相对于处理器410远程设置的存储器,这些远程存储器可以通过网络连接至文件描述符分配检测装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置430可接收输入的数字或字符信息,以及产生与文件描述符分配检测装置的用户设置以及功能控制有关的键信号输入。输出装置440可包括显示屏等显示设备。
所述一个或者多个模块存储在所述存储器420中,当被所述一个或者多个处理器410执行时,执行上述的文件描述符分配检测方法。
上述产品可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。
本发明实施例的电子设备以多种形式存在,包括但不限于:
(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iPhone)、多媒体手机、功能性手机,以及低端手机等。
(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:PDA、MID和UMPC设备等,例如iPad。
(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如iPod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。
(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
(5)其他具有数据交互功能的电子装置。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (16)
1.一种文件描述符分配检测方法,其特征在于,包括:
在应用程序运行过程中,记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的分配路径以及所述文件描述符的释放信息;
如果根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息判断出所述系统为所述应用程序分配的文件描述符数量超过第一预设阈值,则分析记录的每一文件描述符对应的分配路径,统计相同分配路径的数量;
如果相同分配路径的数量超过第二预设阈值,则确定所述应用程序存在文件描述符分配泄露;否则,确定所述应用程序不存在文件描述符分配泄露。
2.如权利要求1所述的方法,其特征在于,记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的分配路径以及所述文件描述符的释放信息,具体包括:
在监控到所述应用程序调用文件描述符分配函数时,记录所述系统为所述应用程序分配的文件描述符及其对应的分配路径;
在监控到所述应用程序调用文件描述符释放函数时,删除被释放的文件描述符及其对应的分配路径。
3.如权利要求2所述的方法,其特征在于,采用数据队列的方式记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的调用堆栈以及所述文件描述符的释放信息;以及
在监控到所述应用程序调用文件描述符分配函数时,记录所述系统为所述应用程序分配的文件描述符及其对应的分配路径,具体包括:
在监控到所述应用程序调用文件描述符分配函数时,在所述数据队列中添加所述系统为所述应用程序分配的文件描述符及其对应的分配路径;
在监控到所述应用程序调用文件描述符释放函数时,删除被释放的文件描述符及其对应的分配路径,具体包括:
在监控到所述应用程序调用文件描述符释放函数时,从所述数据队列中删除被释放的文件描述符及其对应的分配路径。
4.如权利要求1所述的方法,其特征在于,根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息,按照以下流程判断所述系统为所述应用程序分配的文件描述符数量是否超过第一预设阈值:
根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息,统计所述系统为所述应用程序分配的文件描述符的数量;
根据统计结果确定所述应用程序分配的文件描述符的数量是否超过第一预设阈值。
5.如权利要求1所述的方法,其特征在于,所述系统每次为所述应用程序分配的文件描述符为系统中最小且可用的;以及
根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息,按照以下流程判断所述系统为所述应用程序分配的文件描述符数量是否超过第一预设阈值:
根据记录的、所述系统为所述应用程序分配的文件描述符,判断所述文件描述符是否超过第一预设阈值。
6.如权利要求1所述的方法,其特征在于,在确定所述应用程序存在文件描述符泄露之后,还包括:
针对数量超过第二预设阈值的分配路径对应的文件描述符,调用文件描述符释放函数,释放相应的文件描述符;和/或
输出所述应用程序存在文件描述符泄露的第一提示信息,所述第一提示信息中包含有数量超过第二预设阈值的分配路径。
7.如权利要求1所述的方法,其特征在于,在确定所述应用程序不存在文件描述符分配泄露之后,还包括:
输出所述应用程序依赖文件超限的第二提示信息,所述第二提示信息中携带有所有记录的分配路径,所述第二提示信息用于提示用户根据所有记录的分配路径针对所述应用程序进行依赖文件的合并。
8.如权利要求1~7任一权利要求所述的方法,其特征在于,所述文件描述符对应的分配路径包括所述文件描述符对应的调用堆栈。
9.一种文件描述符分配检测装置,其特征在于,包括:
记录单元,用于在应用程序运行过程中,记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的分配路径以及所述文件描述符的释放信息;
分析单元,用于如果根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息判断出所述系统为所述应用程序分配的文件描述符数量超过第一预设阈值,则分析记录的每一文件描述符对应的分配路径,统计相同分配路径的数量;
确定单元,用于当相同分配路径的数量超过第二预设阈值时,确定所述应用程序存在文件描述符分配泄露;否则,确定所述应用程序不存在文件描述符分配泄露。
10.如权利要求9所述的装置,其特征在于,
所述记录单元,具体用于在监控到所述应用程序调用文件描述符分配函数时,记录所述系统为所述应用程序分配的文件描述符及其对应的分配路径;在监控到所述应用程序调用文件描述符释放函数时,删除被释放的文件描述符及其对应的分配路径。
11.如权利要求10所述的装置,其特征在于,
所述记录单元,具体用于采用数据队列的方式记录系统为所述应用程序分配的文件描述符、所述文件描述符对应的调用堆栈以及所述文件描述符的释放信息;以及在监控到所述应用程序调用文件描述符分配函数时,在所述数据队列中添加所述系统为所述应用程序分配的文件描述符及其对应的分配路径;在监控到所述应用程序调用文件描述符释放函数时,从所述数据队列中删除被释放的文件描述符及其对应的分配路径。
12.如权利要求9所述的装置,其特征在于,
所述分析单元,具体用于根据记录的、所述系统为所述应用程序分配的文件描述符及其释放信息,统计所述系统为所述应用程序分配的文件描述符的数量;根据统计结果确定所述应用程序分配的文件描述符的数量是否超过第一预设阈值。
13.如权利要求9所述的装置,其特征在于,所述系统每次为所述应用程序分配的文件描述符为系统中最小且可用的;以及
所述分析单元,具体用于根据记录的、所述系统为所述应用程序分配的文件描述符,判断所述文件描述符是否超过第一预设阈值。
14.如权利要求9所述的装置,其特征在于,还包括:
第一处理单元,用于在所述确定单元确定出所述应用程序存在文件描述符分配泄露之后,针对数量超过第二预设阈值的分配路径对应的文件描述符,调用文件描述符释放函数,释放相应的文件描述符;和/或输出所述应用程序存在文件描述符泄露的第一提示信息,所述第一提示信息中包含有数量超过第二预设阈值的分配路径。
15.如权利要求9所述的装置,其特征在于,还包括:
第二处理单元,用于在所述确定单元确定出所述应用程序不存在文件描述符分配泄露之后,输出所述应用程序依赖文件超限的第二提示信息,所述第二提示信息中携带有所有记录的分配路径,所述第二提示信息用于提示用户根据所有记录的分配路径针对所述应用程序进行依赖文件的合并。
16.如权利要求9~15任一权利要求所述的装置,其特征在于,所述文件描述符对应的分配路径包括所述文件描述符对应的调用堆栈。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710233321.XA CN107423213B (zh) | 2017-04-11 | 2017-04-11 | 一种文件描述符分配检测方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710233321.XA CN107423213B (zh) | 2017-04-11 | 2017-04-11 | 一种文件描述符分配检测方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107423213A CN107423213A (zh) | 2017-12-01 |
CN107423213B true CN107423213B (zh) | 2020-12-18 |
Family
ID=60423232
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710233321.XA Active CN107423213B (zh) | 2017-04-11 | 2017-04-11 | 一种文件描述符分配检测方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107423213B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108628740A (zh) * | 2018-04-10 | 2018-10-09 | 杭州迪普科技股份有限公司 | 一种文件描述符泄露检测方法及装置 |
CN109542778A (zh) * | 2018-11-12 | 2019-03-29 | 中国银联股份有限公司 | 一种资源泄露检测的方法及装置 |
CN110795400B (zh) * | 2019-10-12 | 2022-03-22 | 苏州浪潮智能科技有限公司 | 一种文件的管理方法、装置、设备及介质 |
CN110837465A (zh) * | 2019-10-15 | 2020-02-25 | 珠海金山网络游戏科技有限公司 | 一种基于Android的句柄泄露检测方法及其系统 |
CN112199195B (zh) * | 2020-10-16 | 2023-10-27 | 新华三信息安全技术有限公司 | 进程资源处理方法及装置 |
CN112346927B (zh) * | 2020-10-22 | 2024-02-27 | 北京罗克维尔斯科技有限公司 | 一种文件描述符的检测方法、装置、车载设备及车辆 |
CN112732640B (zh) * | 2020-12-28 | 2023-07-25 | 杭州迪普科技股份有限公司 | 一种文件描述符泄漏检测的方法及装置 |
CN112732560B (zh) * | 2020-12-31 | 2023-10-27 | 杭州迪普科技股份有限公司 | 文件描述符泄露风险的检测方法及装置 |
CN112925754B (zh) * | 2021-03-31 | 2023-04-07 | 四川虹美智能科技有限公司 | 文件描述符溢出上报方法、装置及计算机可读介质 |
CN114598687B (zh) * | 2022-01-19 | 2024-02-23 | 深圳智游网安科技有限公司 | 一种https数据包的抓取方法、系统及终端 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101162436A (zh) * | 2006-10-13 | 2008-04-16 | 中兴通讯股份有限公司 | 一种通信设备系统中内存泄漏的检测方法 |
US7765528B2 (en) * | 2005-09-21 | 2010-07-27 | Hewlett-Packard Development Company, L.P. | Identifying sources of memory retention |
CN103440196A (zh) * | 2013-07-11 | 2013-12-11 | 大连交通大学 | 一种新型操作系统资源问题检测方法 |
CN103460194A (zh) * | 2011-03-15 | 2013-12-18 | 爱立信(中国)通信有限公司 | 对资源泄漏的检测 |
CN105446871A (zh) * | 2014-08-26 | 2016-03-30 | 华为技术有限公司 | 一种资源泄漏检测方法、装置及系统 |
-
2017
- 2017-04-11 CN CN201710233321.XA patent/CN107423213B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7765528B2 (en) * | 2005-09-21 | 2010-07-27 | Hewlett-Packard Development Company, L.P. | Identifying sources of memory retention |
CN101162436A (zh) * | 2006-10-13 | 2008-04-16 | 中兴通讯股份有限公司 | 一种通信设备系统中内存泄漏的检测方法 |
CN103460194A (zh) * | 2011-03-15 | 2013-12-18 | 爱立信(中国)通信有限公司 | 对资源泄漏的检测 |
CN103440196A (zh) * | 2013-07-11 | 2013-12-11 | 大连交通大学 | 一种新型操作系统资源问题检测方法 |
CN105446871A (zh) * | 2014-08-26 | 2016-03-30 | 华为技术有限公司 | 一种资源泄漏检测方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN107423213A (zh) | 2017-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107423213B (zh) | 一种文件描述符分配检测方法和装置 | |
CN102831045B (zh) | 一种终端设备中启动项检测的方法和装置 | |
WO2020108085A1 (zh) | 资源配置方法、装置、终端及存储介质 | |
CN107832100B (zh) | 一种apk插件的加载方法及其终端 | |
CN107229559B (zh) | 针对业务系统的测试完整度的检测方法和装置 | |
CN103838663A (zh) | 一种应用程序的测试方法及装置 | |
CN109726067B (zh) | 一种进程监控方法以及客户端设备 | |
CN109359118B (zh) | 一种数据写入方法及装置 | |
CN105487966A (zh) | 程序测试方法、装置及系统 | |
CN110704202B (zh) | 多媒体录制数据共享方法及终端设备 | |
CN107729231B (zh) | 一种基于操作系统的故障注入方法及装置 | |
CN111858112B (zh) | 一种检测内存泄露的方法、客户端及服务器 | |
CN109473121B (zh) | 语音合成质量测试方法及装置 | |
CN107533596B (zh) | 指纹识别方法及移动终端 | |
US20100077385A1 (en) | Debugger exception filtering with target-based rules | |
CN107193729B (zh) | 一种应用程序兼容性测试方法和装置 | |
CN113127314A (zh) | 一种检测程序性能瓶颈的方法、装置及计算机设备 | |
CN112241362A (zh) | 一种测试方法、装置、服务器及存储介质 | |
CN110889116A (zh) | 一种广告拦截方法、装置及电子设备 | |
CN106682494B (zh) | 一种信息访问方法、装置和设备 | |
CN115905137A (zh) | 一种文件描述符泄露监控方法、装置、设备及存储介质 | |
CN111796731B (zh) | 一种自动排列图标的方法与设备 | |
WO2019076254A1 (zh) | 游戏应用控制方法及设备 | |
CN111797014A (zh) | 跨应用的案例追踪方法及装置 | |
CN114296986B (zh) | 内存泄漏定位方法、装置、介质和电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |