CN112346927B - 一种文件描述符的检测方法、装置、车载设备及车辆 - Google Patents

一种文件描述符的检测方法、装置、车载设备及车辆 Download PDF

Info

Publication number
CN112346927B
CN112346927B CN202011136954.7A CN202011136954A CN112346927B CN 112346927 B CN112346927 B CN 112346927B CN 202011136954 A CN202011136954 A CN 202011136954A CN 112346927 B CN112346927 B CN 112346927B
Authority
CN
China
Prior art keywords
file descriptor
files
file
target
alarm threshold
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
Application number
CN202011136954.7A
Other languages
English (en)
Other versions
CN112346927A (zh
Inventor
孔川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Co Wheels Technology Co Ltd
Original Assignee
Beijing Co Wheels Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Co Wheels Technology Co Ltd filed Critical Beijing Co Wheels Technology Co Ltd
Priority to CN202011136954.7A priority Critical patent/CN112346927B/zh
Publication of CN112346927A publication Critical patent/CN112346927A/zh
Application granted granted Critical
Publication of CN112346927B publication Critical patent/CN112346927B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3051Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/06Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Mathematical Physics (AREA)
  • Human Computer Interaction (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本公开实施例涉及一种文件描述符的检测方法、装置、车载设备及车辆,其中该方法包括:获取正在运行的各个进程分别打开的文件数量;将文件数量大于或等于报警阈值的进程确定为目标进程;其中,报警阈值基于各个进程支持的文件数量上限值和系统支持进程打开的文件数量最大值确定;将目标进程的文件描述符记录信息上传至云端。本公开实施例的报警阈值可以适用于各个不同的进程,可以基于该报警阈值自动监控每个进程并提前预警文件描述符的泄露,避免文件描述符的严重泄露。

Description

一种文件描述符的检测方法、装置、车载设备及车辆
技术领域
本公开涉及车辆控制技术领域,尤其涉及一种文件描述符的检测方法、装置、车载设备及车辆。
背景技术
随着车辆技术和互联网技术的不断发展,车辆变得越来越智能化,可以提供多种功能。
车辆中的车载设备中可以运行多个进程,每个进程可以打开的文件最大数量是有限的。但是,在发生文件描述符(File Descriptor,FD)泄漏之前,不同进程支持的文件数量的上限值是不同的,因为无法精准的确认是否发生文件描述符泄露,只能通过泄露到一定数量进行泄露确定。目前,在进程打开的文件数量大于或等于最大数量,例如1024时,车辆控制器才会报警,而此时,文件描述符已经严重泄露。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种文件描述符的检测方法、装置、车载设备及车辆。
第一方面,本公开实施例提供了一种文件描述符的检测方法,所述方法包括:
获取正在运行的各个进程分别打开的文件数量;
将文件数量大于或等于报警阈值的进程确定为目标进程;其中,所述报警阈值基于各个进程支持的文件数量上限值和系统支持进程打开的文件数量最大值确定;
将所述目标进程的文件描述符记录信息上传至云端。
可选的,所述获取正在运行的各个进程分别打开的文件数量,包括:
通过监控文件描述符的文件操作函数,获取正在运行的各个进程分别打开的文件数量。
可选的,所述文件操作函数包括文件描述符的打开函数和关闭函数。
可选的,所述方法还包括:
将各个进程分别支持的文件数量上限值的最大值和系统支持进程打开的文件数量最大值之间的任意一个值确定为所述报警阈值。
可选的,所述文件描述符记录信息包括文件描述符信息、调用文件描述符的堆栈信息和时间信息。
可选的,所述将文件数量大于或等于报警阈值的进程确定为目标进程之后,所述方法还包括:
确定所述目标进程的数量。
可选的,所述将所述目标进程的文件描述符记录信息上传至云端,包括:
若所述目标进程的数量等于设定进程数量阈值,则将所述目标进程的文件描述符记录信息上传至云端。
可选的,所述将所述目标进程的文件描述符记录信息上传至云端之后,所述方法还包括:
基于所述目标进程的文件描述符记录信息定位文件描述符泄露的位置。
第二方面,本公开实施例还提供了一种文件描述符的检测装置,所述装置包括:
文件数量模块,用于获取正在运行的各个进程分别打开的文件数量;
目标进程模块,用于将文件数量大于或等于报警阈值的进程确定为目标进程;其中,所述报警阈值基于各个进程支持的文件数量上限值和系统支持进程打开的文件数量最大值确定;
信息上传模块,用于将所述目标进程的文件描述符记录信息上传至云端。
可选的,所述文件数量模块具体用于:
通过监控文件描述符的文件操作函数,获取正在运行的各个进程分别打开的文件数量。
可选的,所述文件操作函数包括文件描述符的打开函数和关闭函数。
可选的,所述装置还包括阈值确定模块,用于:
将各个进程分别支持的文件数量上限值的最大值和系统支持进程打开的文件数量最大值之间的任意一个值确定为所述报警阈值。
可选的,所述文件描述符记录信息包括文件描述符信息、调用文件描述符的堆栈信息和时间信息。
可选的,所述装置还包括进程数量模块,具体用于:所述将文件数量大于或等于报警阈值的进程确定为目标进程之后,
确定所述目标进程的数量。
可选的,所述信息上传模块具体用于:
若所述目标进程的数量等于设定进程数量阈值,则将所述目标进程的文件描述符记录信息上传至云端。
可选的,所述装置还包括泄露定位模块,具体用于:所述将所述目标进程的文件描述符记录信息上传至云端之后,
基于所述目标进程的文件描述符记录信息定位文件描述符泄露的位置。
第三方面,本公开实施例提供一种车载设备,所述车载设备包括:处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行如第一方面所述的方法。
第四方面,本公开实施例提供一种车辆,包括如第三方面所述的车载设备。
本公开实施例提供的文件描述符的检测方法、装置、车载设备及车辆,通过获取正在运行的各个进程分别打开的文件数量,将文件数量大于或等于报警阈值的进程确定为目标进程,其中,报警阈值基于各个进程支持的文件数量上限值和系统支持进程打开的文件数量最大值确定,将目标进程的文件描述符记录信息上传至云端。本公开实施例的报警阈值可以适用于各个不同的进程,可以基于该报警阈值自动监控每个进程并提前预警文件描述符的泄露,避免文件描述符的严重泄露。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例提供的一种文件描述符的检测方法的流程示意图;
图2为本公开实施例提供的另一种文件描述符的检测方法的流程示意图;
图3为本公开实施例提供的一种文件描述符的检测的示意图;
图4为本公开实施例提供的一种文件描述符的检测装置的结构示意图;
图5为本公开实施例提供的一种车载设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
车辆中的车载设备能够运行多个进程,每个进程在执行具体的任务时需要打开对应的文件,例如进程需要显示图片时,可以打开图片文件进行显示,每个进程可以打开的文件最大数量是有限的,例如,当车载设备为一种运行安卓(Android)系统的设备时,每个进程允许处于打开状态的文件最大个数是1024。但是,在发生文件描述符泄漏之前,不同进程支持的文件数量的上限值是不同的,因为无法精准的确认是否发生文件描述符泄露,只能通过泄露到一定数量进行泄露判定。例如,在发生文件描述符泄漏之前,进程A支持的打开的文件个数的上限值是100,也就是说,当进程A中处于打开状态的文件个数大于100时,可能会引发文件描述符泄漏;又如,在发生文件描述符泄漏之前,进程B支持打开的文件个数的上限值是500,也就是说,当进程B中处于打开状态的文件个数大于500时,可能引发文件描述符泄漏。
目前,在进程打开的文件数量大于或等于最大数量,例如1024时,车辆控制器才会打开文件失败并输出错误信息,并进行报警,而此时,文件描述符已经严重泄露,严重时会导致模块崩溃,对文件描述符的泄露问题难于复现和分析。针对上述问题,本公开实施例提供了一种文件描述符的检测方法,基于适用于各个不同进程的报警阈值可以自动监控每个进程并提前预警文件描述符的泄露,避免文件描述符的严重泄露,下面结合具体的实施例对该方法进行介绍。
图1为本公开实施例提供的一种文件描述符的检测方法的流程示意图,该方法可以由文件描述符的检测装置执行,其中该装置可以采用软件和/或硬件实现,一般可集成在车载设备中。如图1所示,该方法包括:
S101、获取正在运行的各个进程分别打开的文件数量。
本公开实施例所述的文件描述符的检测方法可以由车辆控制器,也即车辆中的整车控制器(Vehicle Control Unit,VCU)来执行。其中,进程可以为Zygote进程,Zygote进程为所有的安卓进程的父进程,包括系统进程和各种应用进程都是通过Zygote进程孵化出来的,通过监控Zygote进程可以监控到所有的进程。
具体的,获取正在运行的各个进程分别打开的文件数量,可以包括:通过监控文件描述符的文件操作函数,获取正在运行的各个进程分别打开的文件数量。其中,文件操作函数包括文件描述符的打开函数和关闭函数。
文件描述符,又称文件句柄,是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。文件操作函数可以理解为用于对文件描述符进行操作的函数,具体可以包括创建函数、打开函数、关闭函数、套接字(socket)、管道(pipe)和复制(dup)等的入口函数等,由于套接字(socket)、管道(pipe)和复制(dup)等执行时也可以文件描述符的打开函数,也监控该入口函数。本公开实施例中,通过监控各个进程中所有文件描述符的文件操作函数,当监控到文件描述符的打开函数时,则可以将文件数量加一,当监控到文件描述符的关闭函数时,可以将文件数量减一,得到各个进程中处于打开状态的文件数量。
目前,安卓设备上的Watchdog监控系统只能监控系统进程,不能监控其他进程。本公开实施例中可以监控所有Zygote进程的文件描述符的占用数量来确定各进程分别打开的文件数量,监控更加全面,文件描述符的泄露检测更加准确。
S102、将文件数量大于或等于报警阈值的进程确定为目标进程;其中,报警阈值基于各个进程支持的文件数量上限值和系统支持进程打开的文件数量最大值确定。
其中,报警阈值是用于进行文件描述符泄露预警判断的数量阈值,该报警阈值可以适用于各个不同的进程。
本公开实施例中,在进行检测之前,还可以包括:将各个进程分别支持的文件数量上限值的最大值和系统支持进程打开的文件数量最大值之间的任意一个值确定为报警阈值。进程支持的文件数量上限值是指进程支持的文件个数的上限值,每个进程支持的文件数量上限值可以不同,文件数量最大值为文件最大个数,系统支持各进程打开的文件数量最大值是相同的,例如为1024。报警阈值的具体值可以根据实际情况进行设定,本公开实施例中对此不作限定。
示例性的,车辆控制器中运行有进程A、进程B和进程C,在文件描述符泄漏之前,进程A支持的文件个数的上限值是100,进程B支持的文件个数的上限值是500,进程C支持的文件个数的上限值是300,从进程A、进程B、进程C分别对应的上限值中确定出最大值,例如,500;进一步,根据500和每个进程可以打开的文件最大个数(例如,1024),确定出报警阈值;具体的,该报警阈值可以是500-1024中的任意一个值,例如,800。
上述目标进程为可能已经发生文件描述符泄露的进程。将各个进程分别打开的文件数量与报警阈值进行比较,如果一个进程的文件数量大于或等于该报警阈值,则该进程为目标进程。目标进程的数量可以为多个。
S103、将目标进程的文件描述符记录信息上传至云端。
其中,文件描述符记录信息可以理解为发生泄露时记录的相关信息,文件描述符记录信息可以包括文件描述符信息、调用文件描述符的堆栈信息和时间信息等。通过记录调用文件描述符的堆栈信息,当进程发生通用节点的泄露时,也可以快速定位问题。
确定目标进程之后,可以记录目标进程的文件描述符记录信息,并将该文件描述符记录信息上传至云端。可选的,将目标进程的文件描述符记录信息上传至云端之后,还可以包括:基于目标进程的文件描述符记录信息定位文件描述符泄露的位置。通过问题定位程序可以文件描述符记录信息进行分析,定位文件描述符泄露的位置,或者工作人员可以根据云端中的文件描述符记录信息分析问题,定位文件描述符泄露的位置,从而可以进行修正,并更新车辆控制器的软件版本。
在本实施例中,上述报警阈值通过选取各个进程支持的文件数量上限值的最大值和每个进程可以打开的文件最大个数之间的值,使得该报警阈值可以适用于各个不同的进程,从而根据该报警阈值可以对每个进程导致的文件描述符泄漏进行监控,并且由于该报警阈值小于每个进程可以打开的文件最大个数,也是就说,在文件描述符发生严重泄漏之前,就可以进行报警提示,从而可以避免文件描述符泄露进一步严重。
本公开实施例通过获取正在运行的各个进程分别打开的文件数量,将文件数量大于或等于报警阈值的进程确定为目标进程,其中,报警阈值基于各个进程支持的文件数量上限值和系统支持进程打开的文件数量最大值确定,将目标进程的文件描述符记录信息上传至云端。本公开实施例的报警阈值可以适用于各个不同的进程,可以基于该报警阈值自动监控每个进程并提前预警文件描述符的泄露,避免文件描述符的严重泄露。
在一些实施例中,将文件数量大于或等于报警阈值的进程确定为目标进程之后,方法还包括:确定目标进程的数量。可选的,若目标进程的数量等于设定进程数量阈值,则将目标进程的文件描述符记录信息上传至云端。
其中,设定进程数量阈值可以为信息上传云端的进程数量间隔,可以根据实际情况设定,例如设定进程数量阈值可以为20、100或200等。示例性的,假设设定进程数量阈值为20,若目标进程的数量等于20,则将20个目标进程的文件描述符记录信息上传至云端,也即每20个目标进程上传一次文件描述符记录信息。
可选的,将目标进程的文件描述符记录信息上传至云端之后,可以清除本地的文件描述符记录信息。本公开实施例中通过设置进程数量阈值,批量上传文件描述符记录信息,可以提高信息上传的效率。
图2为本公开实施例提供的另一种文件描述符的检测方法的流程示意图,本实施例在上述实施例的基础上,进一步对上述文件描述符的检测方法进行具体说明。如图2所示,该方法包括:
S201、通过监控文件描述符的文件操作函数,获取正在运行的各个进程分别打开的文件数量。
本公开实施例所述的文件描述符的检测方法可以由车辆控制器,也即车辆中的整车控制器(Vehicle Control Unit,VCU)来执行。其中,进程可以为Zygote进程,Zygote进程为所有的安卓进程的父进程,包括系统进程和各种应用进程都是通过Zygote进程孵化出来的,通过监控Zygote进程可以监控到所有的进程。
其中,文件操作函数包括文件描述符的打开函数和关闭函数。文件描述符,又称文件句柄,是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。文件操作函数可以理解为用于对文件描述符进行操作的函数,具体可以包括创建函数、打开函数、关闭函数、套接字(socket)、管道(pipe)和复制(dup)等的入口函数等,由于套接字(socket)、管道(pipe)和复制(dup)等执行时也可以文件描述符的打开函数,也监控该入口函数。
本公开实施例中,通过监控各个Zygote进程中所有文件描述符的文件操作函数,当监控到文件描述符的创建函数和打开函数时,则可以将文件数量加一,当监控到文件描述符的关闭函数时,可以将文件数量减一,得到各个进程中处于打开状态的文件数量。
目前,安卓设备上的Watchdog监控系统只能监控系统进程,不能监控其他进程。本公开实施例中可以监控所有Zygote进程的文件描述符的占用数量来确定各进程分别打开的文件数量,监控更加全面,文件描述符的泄露检测更加准确。
S202、将文件数量大于或等于报警阈值的进程确定为目标进程。
其中,报警阈值基于各个进程支持的文件数量上限值和系统支持进程打开的文件数量最大值确定。
可选的,本公开实施例中的文件描述符的检测方法还可以包括:将各个进程分别支持的文件数量上限值的最大值和系统支持进程打开的文件数量最大值之间的任意一个值确定为报警阈值。
示例性的,车辆控制器中运行有进程A、进程B和进程C,在文件描述符泄漏之前,进程A支持的文件个数的上限值是100,进程B支持的文件个数的上限值是500,进程C支持的文件个数的上限值是300,从进程A、进程B、进程C分别对应的上限值中确定出最大值,例如,500;进一步,根据500和每个进程可以打开的文件最大个数(例如,1024),确定出报警阈值;具体的,该报警阈值可以是500-1024中的任意一个值,例如,800。
上述目标进程为可能已经发生文件描述符泄露的进程。将各个进程分别打开的文件数量与报警阈值进行比较,如果一个进程的文件数量大于或等于该报警阈值,则该进程为目标进程。目标进程的数量可以为多个。
上述报警阈值通过选取各个进程支持的文件数量上限值的最大值和每个进程可以打开的文件最大个数之间的值,使得该报警阈值可以适用于各个不同的进程,从而根据该报警阈值可以对每个进程导致的文件描述符泄漏进行监控,并且由于该报警阈值小于每个进程可以打开的文件最大个数,也是就说,在文件描述符发生严重泄漏之前,就可以进行报警提示,从而可以避免文件描述符泄露进一步严重。
S203、确定目标进程的数量。
S204、目标进程的数量是否等于设定进程数量阈值,若是,则执行S205;否则,返回执行S201。
其中,设定进程数量阈值可以为信息上传云端的进程数量间隔,可以根据实际情况设定,例如设定进程数量阈值可以为20、100或200等。示例性的,假设设定进程数量阈值为20,若目标进程的数量等于20,则将20个目标进程的文件描述符记录信息上传至云端,也即每20个目标进程上传一次文件描述符记录信息。
可选的,将目标进程的文件描述符记录信息上传至云端之后,可以清除本地的文件描述符记录信息。本公开实施例中通过设置进程数量阈值,批量上传文件描述符记录信息,可以提高信息上传的效率。
S205、将目标进程的文件描述符记录信息上传至云端。
文件描述符记录信息可以包括文件描述符信息、调用文件描述符的堆栈信息和时间信息等。通过记录调用文件描述符的堆栈信息,当进程发生通用节点的泄露时,也可以快速定位问题。
S206、基于目标进程的文件描述符记录信息定位文件描述符泄露的位置。
通过问题定位程序可以文件描述符记录信息进行分析,定位文件描述符泄露的位置,或者工作人员可以根据云端中的文件描述符记录信息分析问题,定位文件描述符泄露的位置,从而可以进行修正,并更新车辆控制器的软件版本。
本公开实施例中可以对所有Zygote进程的文件描述符的泄露问题进行自动监控,当某个进程的文件描述符的占用个数达到一个预定的阀值还未达到每个进程可以打开的文件最大个数时,车辆控制器就可以提前开始记录一段时间内该进程的文件描述符的调用栈信息,以备网络连接良好时把记录的内容上传云端并通知研发人员,供研发人员定位解决问题使用,便于下一个软件版本解决。
接下来通过一个具体的示例对本公开实施例提供的文件描述符的检测方法进行进一步说明。示例性的,图3为本公开实施例提供的一种文件描述符的检测的示意图,以一个进程的监控为例,具体过程可以包括:
S301、开始。
S302、监控所有文件描述符的打开和关闭函数。
具体可以监控当前进程中文件描述符的打开函数和关闭函数,包括套接字(socket)、管道(pipe)和复制(dup)等的入口函数,由于这些入口函数间接调用文件描述符的打开函数,因此也在监控范围内。本公开实施例监控的进程为Zygote进程。
S303、有无调用,若有,则执行S304;若无,则返回执行S302。
S304、打开时,Count+1;关闭时,Count-1。
其中,Count为全局变量,用于表征一个进程中文件描述符的占用个数,也即一个进程中打开的文件数量。
当调用打开函数,进行文件描述符的打开时,全局变量Count+1,当调用关闭函数,进行文件描述符的关闭时,全局变量Count-1。
S305、Count>800?若是,则执行S306;若否,则返回执行S302。
其中,800表示当前确定的报警阈值,报警阈值选取各个进程支持的文件数量上限值的最大值和每个进程可以打开的文件最大个数(例如1024)之间的值,使得该报警阈值可以适用于各个不同的进程,800仅为示例。
如果全局变量Count大于报警阈值800,则执行S306;如果全局变量小于或等于报警阈值800,则返回执行S302。
S306、Add<Count?若是,则执行S307;若否,则返回执行S302。
其中,Add表示一个中间变量,可以表征全局变量Count的当前最大值,用于保证全局变量Count单向递增时才进行后续信息记录,Add可以设置初始值为0。
如果Add小于全局变量Count,则说明全局变量Count单向递增,执行S307;如果Add大于或等于全局变量Count,则说明全局变量Count虽然大于800但是减少过,也即当前进程打开的文件个数虽然大于800但是文件被关闭过,则此时返回执行S302。
示例性的,当Add为0,Count为820时,Add小于Count;下一次判断时,Add为820,当Count为830时,Add依然小于Count,说明单向递增;但是Add为820,当Count为810时,Add大于Count,说明不满足单向递增。
S307、Add=Count。
将全局变量Count的值赋值给Add,以进行下一次的判断。
S308、Add≤1024?若是,则执行S309;若否,则执行S313。
如果Add小于或等于1024,则说明可能发生文件描述符泄露,可以进行提前预警,执行S309;如果Add大于1024,则说明已经发生文件描述符严重泄露,预警无效,执行S313。
S309、开始记录调用栈及当前时间,记录条数Num+1。
其中,Num表示记录信息的条数,调用栈及当前时间为上述文件描述符记录信息中的两个。
S310、Num=100‖Num=200?若是,则执行S311;若否,则返回执行S302。
其中,100和200为设定进程数量阈值,也即文件描述符记录信息的条数。当Num等于100或200时,则执行S311;否则,则返回执行S302。
可以理解的是,上述100和200仅为示例,可以根据实际情况进行适当的调整,例如设定进程数量阈值可以为20,每20条就上传一次,则可以是Num%20等于零作为判断条件,当Num%20等于零时,执行S311;否则,则返回执行S302。
S311、等待网络良好且系统不忙时将记录的信息上传云端。
本公开实施例中,当Num等于100或200时,在确保网络良好的前提下,将记录的文件描述符记录信息上传云端。
之后研发人员便可以根据云端上传的文件描述符记录信息定位文件描述符的泄露位置,从而可以进行修正。
S312、清除调用栈及对应的时间。
车辆控制器将文件描述符记录信息上传云端之后,可以在本地清楚已上传的信息。
S313、结束。
现有技术中,安卓设备上的Watchdog监控系统只能监控系统进程,当进程发生通用节点泄露时,无法快速定位问题;即使系统进程的文件描述符泄露至预设值后,也仅输出该进程当前已打开的节点信息,并且当判定某个进程发生文件描述泄露后,通常需要研发人员复现泄露场景,再经过分析确认泄漏点,无法提前预知存文件描述符的泄露问题,让部分文件描述符的泄露问题难于复现和分析。
本公开实施例可以监控所有Zygote孵化进程的文件描述符的占用,进程中任何节点的文件描述符均可以实现监控;并且可以在某个进程占用文件描述符个数小于每个进程可以打开的文件最大个数(例如1024)且大于报警阀值时提前判定进程已发生文件描述符泄露,便于问题复现;在判定进程已发生文件描述符泄露时,系统开始记录一段时间内该进程的文件描述符的相关信息,并通过云端提供给研发人员,便于问题快速定位解决。本公开实施例可以自动监控并提前预警该设备的某个进程已发生文件描述符的泄露,并且可以大大缩短定位解决文件描述符的泄露问题的时间。
本公开实施例通过监控文件描述符的文件操作函数,获取正在运行的各个进程分别打开的文件数量,将文件数量大于或等于报警阈值的进程确定为目标进程,确定目标进程的数量,如果目标进程的数量等于设定进程数量阈值,将目标进程的文件描述符记录信息上传至云端,基于目标进程的文件描述符记录信息定位文件描述符泄露的位置。本公开实施例的报警阈值可以适用于各个不同的进程,可以基于该报警阈值自动监控每个进程并提前预警文件描述符的泄露,避免文件描述符的严重泄露,进而缩短定位解决文件描述符的泄露问题的时间;并且可以监控进程中任何节点的文件描述符,提高了监控的全面性和可靠性。
图4为本公开实施例提供的一种文件描述符的检测装置的结构示意图,该装置可由软件和/或硬件实现,一般可集成在车载设备中。如图4所示,该装置包括:
文件数量模块401,用于获取正在运行的各个进程分别打开的文件数量;
目标进程模块402,用于将文件数量大于或等于报警阈值的进程确定为目标进程;其中,所述报警阈值基于各个进程支持的文件数量上限值和系统支持进程打开的文件数量最大值确定;
信息上传模块403,用于将所述目标进程的文件描述符记录信息上传至云端。
其中,进程可以为Zygote进程,Zygote进程为所有的安卓进程的父进程,包括系统进程和各种应用进程都是通过Zygote进程孵化出来的,通过监控Zygote进程可以监控到所有的进程。报警阈值是用于进行文件描述符泄露预警判断的数量阈值,该报警阈值可以适用于各个不同的进程。
将各个进程分别打开的文件数量与报警阈值进行比较,如果一个进程的文件数量大于或等于该报警阈值,则该进程为目标进程。目标进程的数量可以为多个。确定目标进程之后,可以记录目标进程的文件描述符记录信息,并将该文件描述符记录信息上传至云端。
可选的,所述文件数量模块401具体用于:
通过监控文件描述符的文件操作函数,获取正在运行的各个进程分别打开的文件数量。
可选的,所述文件操作函数包括文件描述符的打开函数和关闭函数。
其中,文件操作函数包括文件描述符的打开函数和关闭函数。文件描述符,又称文件句柄,是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。文件操作函数可以理解为用于对文件描述符进行操作的函数,具体可以包括创建函数、打开函数、关闭函数、套接字(socket)、管道(pipe)和复制(dup)等的入口函数等,由于套接字(socket)、管道(pipe)和复制(dup)等执行时也可以文件描述符的打开函数,也监控该入口函数。
本公开实施例中,通过监控各个Zygote进程中所有文件描述符的文件操作函数,当监控到文件描述符的创建函数和打开函数时,则可以将文件数量加一,当监控到文件描述符的关闭函数时,可以将文件数量减一,得到各个进程中处于打开状态的文件数量。
目前,安卓设备上的Watchdog监控系统只能监控系统进程,不能监控其他进程。本公开实施例中可以监控所有Zygote进程的文件描述符的占用数量来确定各进程分别打开的文件数量,监控更加全面,文件描述符的泄露检测更加准确。
可选的,所述装置还包括阈值确定模块,用于:
将各个进程分别支持的文件数量上限值的最大值和系统支持进程打开的文件数量最大值之间的任意一个值确定为所述报警阈值。
进程支持的文件数量上限值是指进程支持的文件个数的上限值,每个进程支持的文件数量上限值可以不同,文件数量最大值为文件最大个数,系统支持各进程打开的文件数量最大值是相同的,例如为1024。报警阈值的具体值可以根据实际情况进行设定,本公开实施例中对此不作限定。
示例性的,车辆控制器中运行有进程A、进程B和进程C,在文件描述符泄漏之前,进程A支持的文件个数的上限值是100,进程B支持的文件个数的上限值是500,进程C支持的文件个数的上限值是300,从进程A、进程B、进程C分别对应的上限值中确定出最大值,例如,500;进一步,根据500和每个进程可以打开的文件最大个数(例如,1024),确定出报警阈值;具体的,该报警阈值可以是500-1024中的任意一个值,例如,800。
上述报警阈值通过选取各个进程支持的文件数量上限值的最大值和每个进程可以打开的文件最大个数之间的值,使得该报警阈值可以适用于各个不同的进程,从而根据该报警阈值可以对每个进程导致的文件描述符泄漏进行监控,并且由于该报警阈值小于每个进程可以打开的文件最大个数,也是就说,在文件描述符发生严重泄漏之前,就可以进行报警提示,从而可以避免文件描述符泄露进一步严重。
可选的,所述文件描述符记录信息包括文件描述符信息、调用文件描述符的堆栈信息和时间信息。
可选的,所述装置还包括进程数量模块,具体用于:所述将文件数量大于或等于报警阈值的进程确定为目标进程之后,
确定所述目标进程的数量。
可选的,所述信息上传模块403具体用于:
若所述目标进程的数量等于设定进程数量阈值,则将所述目标进程的文件描述符记录信息上传至云端。
其中,设定进程数量阈值可以为信息上传云端的进程数量间隔,可以根据实际情况设定,例如设定进程数量阈值可以为20、100或200等。示例性的,假设设定进程数量阈值为20,若目标进程的数量等于20,则将20个目标进程的文件描述符记录信息上传至云端,也即每20个目标进程上传一次文件描述符记录信息。
可选的,将目标进程的文件描述符记录信息上传至云端之后,可以清除本地的文件描述符记录信息。本公开实施例中通过设置进程数量阈值,批量上传文件描述符记录信息,可以提高信息上传的效率。
可选的,所述装置还包括泄露定位模块,具体用于:所述将所述目标进程的文件描述符记录信息上传至云端之后,
基于所述目标进程的文件描述符记录信息定位文件描述符泄露的位置。
现有技术中,安卓设备上的Watchdog监控系统只能监控系统进程,当进程发生通用节点泄露时,无法快速定位问题;即使系统进程的文件描述符泄露至预设值后,也仅输出该进程当前已打开的节点信息,并且当判定某个进程发生文件描述泄露后,通常需要研发人员复现泄露场景,再经过分析确认泄漏点,无法提前预知存文件描述符的泄露问题,让部分文件描述符的泄露问题难于复现和分析。
本公开实施例中可以对所有Zygote进程的文件描述符的泄露问题进行自动监控,当某个进程的文件描述符的占用个数达到一个预定的阀值还未达到每个进程可以打开的文件最大个数时,车辆控制器就可以提前开始记录一段时间内该进程的文件描述符的调用栈信息,以备网络连接良好时把记录的内容上传云端并通知研发人员,供研发人员定位解决问题使用,便于下一个软件版本解决。
本公开实施例提供的文件描述符的检测装置,通过各模块间的配合,通过监控文件描述符的文件操作函数,获取正在运行的各个进程分别打开的文件数量,将文件数量大于或等于报警阈值的进程确定为目标进程,确定目标进程的数量,如果目标进程的数量等于设定进程数量阈值,将目标进程的文件描述符记录信息上传至云端,基于目标进程的文件描述符记录信息定位文件描述符泄露的位置。本公开实施例的报警阈值可以适用于各个不同的进程,可以基于该报警阈值自动监控每个进程并提前预警文件描述符的泄露,避免文件描述符的严重泄露,进而缩短定位解决文件描述符的泄露问题的时间;并且可以监控进程中任何节点的文件描述符,提高了监控的全面性和可靠性。
本公开实施例所提供的文件描述符的检测装置可执行本公开任意实施例所提供的文件描述符的检测方法,具备执行方法相应的功能模块和有益效果。
图5为本公开实施例提供的一种车载设备的结构示意图。该车载设备例如可以是如上所述的车辆控制器或整车控制器。如图5所示,车载设备500包括一个或多个处理器501和存储器502。
处理器501可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制车载设备500中的其他组件以执行期望的功能。
存储器502可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器501可以运行所述程序指令,以实现上文所述的本公开的实施例的文件描述符的检测方法以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储诸如输入信号、信号分量、噪声分量等各种内容。
在一个示例中,车载设备500还可以包括:输入装置503和输出装置504,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
此外,该输入装置503还可以包括例如键盘、鼠标等等。
该输出装置504可以向外部输出各种信息,包括确定出的距离信息、方向信息等。该输出装置504可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图5中仅示出了该车载设备500中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,车载设备500还可以包括任何其他适当的组件。
在上述实施方式的基础上,本公开实施例还提供一种车辆,该车辆可包括上述实施方式提供的任一种车载设备。因此,该车辆也可具有上述实施方式中的文件描述符的检测方法和装置所具有的有益效果,相同之处可参照上文中对文件描述符的检测方法和装置的解释说明进行理解,在此不赘述。
除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例所提供的文件描述符的检测方法。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例所提供的文件描述符的检测方法。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (13)

1.一种文件描述符的检测方法,其特征在于,所述方法包括:
获取正在运行的各个进程分别打开的文件数量;
将各个进程分别支持的文件数量上限值的最大值和系统支持进程打开的文件数量最大值之间的任意一个值确定为报警阈值;
将文件数量大于或等于所述报警阈值且单向递增的进程确定为目标进程;其中,所述报警阈值基于各个进程支持的文件数量上限值和系统支持进程打开的文件数量最大值确定;
将所述目标进程的文件描述符记录信息上传至云端。
2.根据权利要求1所述的方法,其特征在于,所述获取正在运行的各个进程分别打开的文件数量,包括:
通过监控文件描述符的文件操作函数,获取正在运行的各个进程分别打开的文件数量。
3.根据权利要求2所述的方法,其特征在于,所述文件操作函数包括文件描述符的打开函数和关闭函数。
4.根据权利要求1所述的方法,其特征在于,所述文件描述符记录信息包括文件描述符信息、调用文件描述符的堆栈信息和时间信息。
5.根据权利要求看1所述的方法,其特征在于,所述将文件数量大于或等于报警阈值的进程确定为目标进程之后,所述方法还包括:
确定所述目标进程的数量。
6.根据权利要求5所述的方法,其特征在于,所述将所述目标进程的文件描述符记录信息上传至云端,包括:
若所述目标进程的数量等于设定进程数量阈值,则将所述目标进程的文件描述符记录信息上传至云端。
7.根据权利要求1所述的方法,其特征在于,所述将所述目标进程的文件描述符记录信息上传至云端之后,所述方法还包括:
基于所述目标进程的文件描述符记录信息定位文件描述符泄露的位置。
8.一种文件描述符的检测装置,其特征在于,所述装置包括:
文件数量模块,用于获取正在运行的各个进程分别打开的文件数量;
阈值确定模块,用于将各个进程分别支持的文件数量上限值的最大值和系统支持进程打开的文件数量最大值之间的任意一个值确定为报警阈值;
目标进程模块,用于将文件数量大于或等于所述报警阈值且单向递增的进程确定为目标进程;其中,所述报警阈值基于各个进程支持的文件数量上限值和系统支持进程打开的文件数量最大值确定;
信息上传模块,用于将所述目标进程的文件描述符记录信息上传至云端。
9.根据权利要求8所述的装置,其特征在于,所述文件数量模块具体用于:
通过监控文件描述符的文件操作函数,获取正在运行的各个进程分别打开的文件数量。
10.根据权利要求9所述的装置,其特征在于,所述文件操作函数包括文件描述符的打开函数和关闭函数。
11.根据权利要求8所述的装置,其特征在于,所述文件描述符记录信息包括文件描述符信息、调用文件描述符的堆栈信息和时间信息。
12.一种车载设备,其特征在于,所述车载设备包括处理器和存储器;
所述处理器通过调用所述存储器存储的程序或指令,用于执行如权利要求1-7中任一所述的方法。
13.一种车辆,其特征在于,包括权利要求12所述的车载设备。
CN202011136954.7A 2020-10-22 2020-10-22 一种文件描述符的检测方法、装置、车载设备及车辆 Active CN112346927B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011136954.7A CN112346927B (zh) 2020-10-22 2020-10-22 一种文件描述符的检测方法、装置、车载设备及车辆

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011136954.7A CN112346927B (zh) 2020-10-22 2020-10-22 一种文件描述符的检测方法、装置、车载设备及车辆

Publications (2)

Publication Number Publication Date
CN112346927A CN112346927A (zh) 2021-02-09
CN112346927B true CN112346927B (zh) 2024-02-27

Family

ID=74359641

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011136954.7A Active CN112346927B (zh) 2020-10-22 2020-10-22 一种文件描述符的检测方法、装置、车载设备及车辆

Country Status (1)

Country Link
CN (1) CN112346927B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112925754B (zh) * 2021-03-31 2023-04-07 四川虹美智能科技有限公司 文件描述符溢出上报方法、装置及计算机可读介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107423213A (zh) * 2017-04-11 2017-12-01 腾讯科技(深圳)有限公司 一种文件描述符分配检测方法和装置
CN107608852A (zh) * 2017-09-01 2018-01-19 清华大学 一种进程监控方法及装置
CN108628740A (zh) * 2018-04-10 2018-10-09 杭州迪普科技股份有限公司 一种文件描述符泄露检测方法及装置
CN111258847A (zh) * 2020-01-13 2020-06-09 北京字节跳动网络技术有限公司 一种文件句柄监控及分析方法、装置、介质和设备

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107423213A (zh) * 2017-04-11 2017-12-01 腾讯科技(深圳)有限公司 一种文件描述符分配检测方法和装置
CN107608852A (zh) * 2017-09-01 2018-01-19 清华大学 一种进程监控方法及装置
CN108628740A (zh) * 2018-04-10 2018-10-09 杭州迪普科技股份有限公司 一种文件描述符泄露检测方法及装置
CN111258847A (zh) * 2020-01-13 2020-06-09 北京字节跳动网络技术有限公司 一种文件句柄监控及分析方法、装置、介质和设备

Also Published As

Publication number Publication date
CN112346927A (zh) 2021-02-09

Similar Documents

Publication Publication Date Title
CN112100072B (zh) 应用程序代码的静态检测方法、装置、设备及介质
JP6334733B2 (ja) ユーザの操作行為に基いて解決策をレコメンドする方法および装置
US11321081B2 (en) Affinity recommendation in software lifecycle management
CN106133698A (zh) 用于用户模式崩溃报告的框架
WO2020237877A1 (zh) 日志监控方法、装置、终端与存储介质
CN111130897A (zh) 报警日志监控方法、系统、电子设备及可读存储介质
CN112346927B (zh) 一种文件描述符的检测方法、装置、车载设备及车辆
CN112631737B (zh) 容器镜像构建方法、装置、电子设备及存储介质
CN110781075A (zh) 一种内存泄漏的检测方法、装置、系统及存储介质
CN111045926A (zh) 一种应用程序卡顿的检测方法、装置、介质和电子设备
CN115795489A (zh) 一种基于硬件级进程跟踪的软件漏洞静态分析方法及装置
CN109150993B (zh) 一种获取网络请求切面的方法、终端装置及存储介质
CN112463431A (zh) 一种bios错误定位方法、装置、设备及存储介质
CN110597724A (zh) 应用安全测试组件的调用方法、装置、服务器及存储介质
CN112162533B (zh) 一种基于集散控制系统的指令控制方法及装置
CN118012715A (zh) 一种监测处理方法、装置、电子设备及存储介质
CN115118781A (zh) 业务状态的处理方法、装置、电子设备及存储介质
CN117170736A (zh) 用于代码回退的数据处理方法、装置、设备及存储介质
CN114090398A (zh) 一种系统告警的方法和装置
CN118113562A (zh) 异常告警方法、装置、设备及计算机程序产品
CN111639007A (zh) 一种数据处理方法、装置、终端及计算机可读存储介质
CN117112343A (zh) 基于云原生部署的Linstor存储系统的检测方法
CN117130897A (zh) 安装包检测方法、装置、介质与电子设备
KR20240011218A (ko) 딥러닝 모델을 이용한 부트로더 진단 방법 및 장치
CN112685246A (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