CN116701320B - 一种日志生成方法及相关装置 - Google Patents

一种日志生成方法及相关装置 Download PDF

Info

Publication number
CN116701320B
CN116701320B CN202211531743.2A CN202211531743A CN116701320B CN 116701320 B CN116701320 B CN 116701320B CN 202211531743 A CN202211531743 A CN 202211531743A CN 116701320 B CN116701320 B CN 116701320B
Authority
CN
China
Prior art keywords
state
resource
log
information
lock
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
CN202211531743.2A
Other languages
English (en)
Other versions
CN116701320A (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.)
Honor Device Co Ltd
Original Assignee
Honor Device 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 Honor Device Co Ltd filed Critical Honor Device Co Ltd
Priority to CN202211531743.2A priority Critical patent/CN116701320B/zh
Publication of CN116701320A publication Critical patent/CN116701320A/zh
Application granted granted Critical
Publication of CN116701320B publication Critical patent/CN116701320B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/17Details of further file system functions
    • G06F16/1734Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请实施例提供一种日志生成方法及相关装置,涉及终端技术领域。方法包括:确定第一进程,第一进程为进入第一状态超过预设时长的进程;生成第一进程的日志,第一进程的日志包括:第一进程的进程信息、第一进程的堆栈信息以及第二进程的进程信息,第二进程为引起第一进程进入第一状态超过预设时长的进程。这样,终端设备在日志中可以打印进程间的依赖关系,以及可以全量查找各个进程间的资源依赖关系,从而使终端设备打印的日志信息内容更为详细,使开发人员可以快速定位异常原因,提升终端设备运行异常的问题解决效率。

Description

一种日志生成方法及相关装置
技术领域
本申请涉及终端技术领域,尤其涉及一种日志生成方法及相关装置。
背景技术
随着终端技术的发展,终端设备中可以实现各种各样的功能。当用户在使用终端设备时,可能会出现终端设备运行异常的问题。
可能的实现中,开发人员可以通过终端设备生成的日志信息来定位终端设备运行异常的问题,然而,目前的日志信息通常难以支持快速定位异常原因,导致定位终端设备运行异常的问题解决率较低。
发明内容
本申请实施例提供一种日志生成方法及相关装置,当终端设备中的进程长时间处于D状态时,终端设备在日志中可以打印进程间的依赖关系,以及可以全量查找各个进程间的资源依赖关系。从而使终端设备打印的日志信息内容更为详细,使开发人员可以快速定位异常原因,提升终端设备运行异常的问题解决效率。
第一方面,本申请实施例提供一种日志生成方法,方法包括:
确定第一进程,第一进程为进入第一状态超过预设时长的进程;生成第一进程的日志,第一进程的日志包括:第一进程的进程信息、第一进程的堆栈信息以及第二进程的进程信息,第二进程为引起第一进程进入第一状态超过预设时长的进程。这样,可以使终端设备打印的日志信息内容更为详细,方便开发人员进行问题定位,减少了人力工作量,同时减少了对工具的依赖,提升问题解决效率。
一种可能的实现中,第一进程的日志中还可以包括:第二进程的堆栈信息,和/或,用于表示第一进程与第二进程之间的资源依赖关系的信息。这样,通过在日志中生成进程间的资源依赖关系,可以更为直观的了解到进程间的调用关系,减少对问题场景复现的依赖,提高了开发人员定位问题的效率。
一种可能的实现中,生成第一进程的日志之前,可以包括:确定引起第一进程进入第一状态超过预设时长的第一目标资源;确定持有第一目标资源的第二进程。这样,根据第一目标资源确定出第二进程,开发人员可以通过分析第二进程的相关信息确定第二进程持续持有第一目标资源的原因,进而可以找到阻塞第一进程执行以及导致hungtask问题的根本原因。
一种可能的实现中,确定引起第一进程进入第一状态超过预设时长的第一目标资源,可以包括:确定引起第一进程进入第一状态超过预设时长的目标函数;确定执行目标函数时所缺少的资源,得到第一目标资源。这样,终端设备通过设置多个目标函数,可以更快更准确的确定缺少第一目标资源的函数,从而更快找到引起第一进程进入第一状态的第二进程,提升问题解决效率。
一种可能的实现中,目标函数包括与锁有关的函数,第一目标资源包括目标锁,确定持有第一目标资源的第二进程,可以包括:在目标锁的结构体信息中查找持有目标锁的第二进程。这样,通过目标锁可以更为方便的查找到第二进程,提升问题定位效率。
一种可能的实现中,确定持有第一目标资源的第二进程之后,可以包括:确定第二进程的状态;生成第一进程的日志,可以包括:当第二进程的状态为第二状态时,生成不包括第二进程的堆栈信息的第一进程的日志;或者,当第二进程的状态不为第一状态且不为第二状态时,生成包括第二进程的堆栈信息的第一进程的日志。这样,通过在日志文件中增加进程的堆栈信息和进程信息,以及打印进程间的函数调用关系和资源依赖信息,可以为开发人员定位问题提供有效的日志信息。
一种可能的实现中,确定引起第一进程进入第一状态超过预设时长的第一目标资源之前,可以包括:确定引起第一进程进入第一状态超过预设时长的的第二目标资源;确定持有第二目标资源的第三进程;确定引起第一进程进入第一状态超过预设时长的第一目标资源,可以包括:当第三进程的状态为第一状态时,确定引起第三进程进入第一状态的第一目标资源。这样,终端设备根据资源依赖关系可以找到阻塞第一进程执行以及导致hungtask问题的根本原因,进而,开发人员可以根据第二进程的运行状况分析造成hungtask问题的原因,提高问题解决率。
一种可能的实现中,第一进程的日志中还包括:第三进程的进程信息以及第三进程的堆栈信息。这样,通过在日志中打印进程之间的进程相关信息,可以更为全面的了解进程间的函数调用关系,方便开发人员进行问题定位。
第二方面,本申请实施例提供一种日志生成的装置,该装置可以是终端设备,也可以是终端设备内的芯片或者芯片系统。该装置可以包括处理单元。处理单元用于实现第一方面或第一方面的任意一种可能的实现方式中终端设备执行的与处理相关的任意方法。当该装置是终端设备时,该处理单元可以是处理器。该装置还可以包括存储单元,该存储单元可以是存储器。该存储单元用于存储指令,该处理单元执行该存储单元所存储的指令,以使该终端设备实现第一方面或第一方面的任意一种可能的实现方式中描述的方法。当该装置是终端设备内的芯片或者芯片系统时,该处理单元可以是处理器。该处理单元执行存储单元所存储的指令,以使该终端设备实现第一方面或第一方面的任意一种可能的实现方式中描述的方法。该存储单元可以是该芯片内的存储单元(例如,寄存器、缓存等),也可以是该终端设备内的位于该芯片外部的存储单元(例如,只读存储器、随机存取存储器等)。
一种可能的实现方式中,处理单元,用于确定第一进程;还用于生成第一进程的日志。
一种可能的实现方式中,第一进程的日志中还包括:第二进程的堆栈信息,和/或,用于表示第一进程与第二进程之间的资源依赖关系的信息。
一种可能的实现方式中,处理单元,用于确定引起第一进程进入第一状态超过预设时长的第一目标资源,还用于确定持有第一目标资源的第二进程。
一种可能的实现方式中,处理单元,用于确定引起第一进程进入第一状态超过预设时长的目标函数;还用于确定执行目标函数时所缺少的资源,得到第一目标资源。
一种可能的实现方式中,处理单元,用于在目标锁的结构体信息中查找持有目标锁的第二进程。
一种可能的实现方式中,处理单元,用于确定第二进程的状态,具体还用于当第二进程的状态为第二状态时,生成不包括第二进程的堆栈信息的第一进程的日志;或者,当第二进程的状态不为第一状态且不为第二状态时,生成包括第二进程的堆栈信息的第一进程的日志。
一种可能的实现方式中,处理单元,用于确定引起第一进程进入第一状态超过预设时长的的第二目标资源,还用于确定持有第二目标资源的第三进程,具体还用于确定引起第三进程进入第一状态的第一目标资源。
一种可能的实现方式中,第一进程的日志中还包括:第三进程的进程信息以及第三进程的堆栈信息。
第三方面,本申请实施例提供一种终端设备,包括处理器和存储器,存储器用于存储代码指令,处理器用于运行代码指令,以执行第一方面或第一方面的任意一种可能的实现方式中描述的日志生成方法。
第四方面,本申请实施例提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序或指令,当计算机程序或指令在计算机上运行时,使得计算机执行第一方面或第一方面的任意一种可能的实现方式中描述的日志生成方法。
第五方面,本申请实施例提供一种包括计算机程序的计算机程序产品,当计算机程序在计算机上运行时,使得计算机执行第一方面或第一方面的任意一种可能的实现方式中描述的日志生成方法。
第六方面,本申请提供一种芯片或者芯片系统,该芯片或者芯片系统包括至少一个处理器和通信接口,通信接口和至少一个处理器通过线路互联,至少一个处理器用于运行计算机程序或指令,以执行第一方面或第一方面的任意一种可能的实现方式中描述的日志生成方法。其中,芯片中的通信接口可以为输入/输出接口、管脚或电路等。
在一种可能的实现中,本申请中上述描述的芯片或者芯片系统还包括至少一个存储器,该至少一个存储器中存储有指令。该存储器可以为芯片内部的存储单元,例如,寄存器、缓存等,也可以是该芯片的存储单元(例如,只读存储器、随机存取存储器等)。
应当理解的是,本申请的第二方面至第六方面与本申请的第一方面的技术方案相对应,各方面及对应的可行实施方式所取得的有益效果相似,不再赘述。
附图说明
图1为本申请实施例提供的一种终端设备的结构示意图;
图2为本申请实施例提供的一种终端设备的软件结构示意图;
图3为本申请实施例提供的一种进程间的资源依赖关系示意图;
图4为本申请实施例提供的一种具体的日志生成方法的流程示意图;
图5为本申请实施例提供的一种日志生成方法的示意图;
图6为本申请实施例提供的一种芯片的结构示意图。
具体实施方式
为了便于清楚描述本申请实施例的技术方案,以下,对本申请实施例中所涉及的部分术语和技术进行简单介绍:
1、进程状态:用于表示进程执行过程中的一些状态,例如进程状态可以包括D状态、R状态和kill状态。
D状态:进程的一种等待状态,处于D状态的进程不能接收信号,且该进程无法被终止,但可以通过重启终端设备进行恢复。
R状态:进程正在运行的状态,或者进程具备了运行条件,在运行队列中等待的状态。
kill状态:进程被杀死的状态,该状态通常很短暂,终端设备可以回收该进程的资源,例如,进程资源可以包括进程运行时相关的代码和数据等。其中,kill状态也可以称为dead状态。
其中,本申请实施例中的进程也可以包括进程中的线程,或理解为线程也可以有上述进程的各种状态。
2、hungtask机制:可能的场景中,在终端设备的内核中,当进程在等待某种资源时可以进入D状态。正常情况下,该资源被释放后,可以唤醒处于D状态的该进程进行执行。然而,在特殊情况下,例如该资源一直不被释放,或者该进程出现死锁等情况时,该进程就可能长时间处于D状态而无法运行。
针对这种情况,终端设备的内核中提供了hungtask机制,该机制可以用于检测长时间处于D状态的进程,例如,该机制可以检测处于D状态达到120秒左右的进程。当hungtask机制检测到存在进程长时间处于D状态时,可以产生告警信息,以及指示终端设备进行重启。
3、fp寄存器:栈指针寄存器(frame pointer,fp)用于保存进程的回溯堆栈地址信息。可以理解的是,进程中每个函数的栈地址信息可以保存在其后调用的函数的栈中,也就是说,当前函数的栈中可以保存上一个函数的栈地址信息。因此,终端设备可以根据进程的栈地址信息得到函数之间的调用关系,也就是说,终端设备可以通过fp寄存器找到某个函数在进程栈中的位置。
4、死锁:进程间处于互相等待锁资源的现象。示例性的,进程1持有锁A资源并等待锁B资源,而进程2持有锁B资源并等待锁A资源,这样,进程1与进程2就可以发生死锁现象。当进程间发生死锁现象时,进程可以长时间处于D状态,进而可以触发hungtask机制。
5、术语
在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。例如,第一芯片和第二芯片仅仅是为了区分不同的芯片,并不对其先后顺序进行限定。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
需要说明的是,本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
本申请实施例中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a--c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。
6、终端设备
本申请实施例的终端设备也可以为任意形式的电子设备,例如,电子设备可以包括手持式设备、车载设备等。例如,一些电子设备为:手机(mobile phone)、平板电脑、掌上电脑、笔记本电脑、移动互联网设备(mobile internet device,MID)、可穿戴设备,虚拟现实(virtual reality,VR)设备、增强现实(augmented reality,AR)设备、工业控制(industrial control)中的无线终端、无人驾驶(self driving)中的无线终端、远程手术(remote medical surgery)中的无线终端、智能电网(smart grid)中的无线终端、运输安全(transportation safety)中的无线终端、智慧城市(smart city)中的无线终端、智慧家庭(smart home)中的无线终端、蜂窝电话、无绳电话、会话启动协议(session initiationprotocol,SIP)电话、无线本地环路(wireless local loop,WLL)站、个人数字助理(personal digital assistant,PDA)、具有无线通信功能的手持设备、计算设备或连接到无线调制解调器的其它处理设备、车载设备、可穿戴设备,5G网络中的终端设备或者未来演进的公用陆地移动通信网络(public land mobile network,PLMN)中的终端设备等,本申请实施例对此并不限定。
作为示例而非限定,在本申请实施例中,该电子设备还可以是可穿戴设备。可穿戴设备也可以称为穿戴式智能设备,是应用穿戴式技术对日常穿戴进行智能化设计、开发出可以穿戴的设备的总称,如眼镜、手套、手表、服饰及鞋等。可穿戴设备即直接穿在身上,或是整合到用户的衣服或配件的一种便携式设备。可穿戴设备不仅仅是一种硬件设备,更是通过软件支持以及数据交互、云端交互来实现强大的功能。广义穿戴式智能设备包括功能全、尺寸大、可不依赖智能手机实现完整或者部分的功能,例如:智能手表或智能眼镜等,以及只专注于某一类应用功能,需要和其它设备如智能手机配合使用,如各类进行体征监测的智能手环、智能首饰等。
此外,在本申请实施例中,电子设备还可以是物联网(internet of things,IoT)系统中的终端设备,IoT是未来信息技术发展的重要组成部分,其主要技术特点是将物品通过通信技术与网络连接,从而实现人机互连,物物互连的智能化网络。
本申请实施例中的电子设备也可以称为:终端设备、用户设备(user equipment,UE)、移动台(mobile station,MS)、移动终端(mobile terminal,MT)、接入终端、用户单元、用户站、移动站、移动台、远方站、远程终端、移动设备、用户终端、终端、无线通信设备、用户代理或用户装置等。
在本申请实施例中,电子设备或各个网络设备包括硬件层、运行在硬件层之上的操作系统层,以及运行在操作系统层上的应用层。该硬件层包括中央处理器(centralprocessing unit,CPU)、内存管理单元(memory management unit,MMU)和内存(也称为主存)等硬件。该操作系统可以是任意一种或多种通过进程(process)实现业务处理的计算机操作系统,例如,Linux操作系统、Unix操作系统、Android操作系统、iOS操作系统或windows操作系统等。该应用层包含浏览器、通讯录、文字处理软件、即时通信软件等应用。
示例性的,图1示出了电子设备的结构示意图。
电子设备可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
可以理解的是,本发明实施例示意的结构并不构成对电子设备的具体限定。在本申请另一些实施例中,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从上述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,SIM卡接口,和/或USB接口等。
可以理解的是,本发明实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备的结构限定。在本申请另一些实施例中,电子设备也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器121可以用于存储计算机可执行程序代码,可执行程序代码包括指令。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。处理器110通过运行存储在内部存储器121的指令,和/或存储在设置于处理器中的存储器的指令,执行电子设备的各种功能应用以及数据处理。例如,可以执行本申请实施例的日志生成方法。
天线1和天线2用于发射和接收电磁波信号。终端设备中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。
移动通信模块150可以提供应用在终端设备上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。
无线通信模块160可以提供应用在终端设备上的包括无线局域网(wirelesslocal area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。
无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160经由天线接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器110。无线通信模块160还可以从处理器110接收待发送的信号,对其进行调频,放大,经天线转为电磁波辐射出去。
终端设备通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。终端设备可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
终端设备可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音频播放或录音等。
显示屏194用于显示图像,视频等。显示屏194包括显示面板。在一些实施例中,终端设备可以包括1个或N个显示屏194,N为大于1的正整数。终端设备通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。
图2是本申请实施例的终端设备的软件结构框图。分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为四层,从上至下分别为应用程序层,应用程序框架层,安卓运行时(Android runtime)和系统库,以及内核层。
应用程序层可以包括一系列应用程序包。如图2所示,应用程序包可以包括电话、音乐、日历、相机、游戏、备忘录、视频等应用程序。应用程序可以包括系统应用和三方应用。
应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。
如图2所示,应用程序框架层可以包括窗口管理器、资源管理器、通知管理器、内容提供器和视图系统等。
窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏、锁定屏幕、触摸屏幕、拖拽屏幕、截取屏幕等。
资源管理器为应用程序提供各种资源,例如本地化字符串、图标、图片、布局文件、视频文件等。
通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息、发出提示音、终端设备振动、指示灯闪烁等。
内容提供器用于在不同的应用程序之间实现数据共享的功能,允许一个程序访问另一个程序中的数据,同时还能保证被访问的数据的安全性。
视图系统可以负责应用程序的界面绘制和事件处理。
Android runtime包括核心库和虚拟机。Android runtime负责安卓系统的调度和管理。
核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。例如本申请实施例中,虚拟机可以用于执行hungtask机制、获取进程相关信息,以及打印终端设备运行时的堆栈信息等功能。
系统库可以包括多个功能模块。例如:媒体库(media libraries)、函数库(function libraries)、图形处理库(例如:OpenGL ES)等。
媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。
函数库为开发者提供多种服务的API接口,方便开发者快速集成并实现各种功能。
图形处理库用于实现三维图形绘图、图像渲染、合成和图层处理等。
内核层是硬件和软件之间的层。内核层可以包括显示驱动、摄像头驱动、音频驱动、电池驱动、蓝牙驱动、中央处理器驱动、USB驱动等。内核层可以包括异常监测处理模块,其中,异常监测处理模块可以用于检测终端设备运行时出现的异常,并可以将异常信息保存下来。
随着终端技术的发展,终端设备中可以实现各种各样的功能。当用户在使用终端设备时,可能会出现终端设备运行异常的问题。通常,开发人员可以通过终端设备生成的日志信息来定位终端设备运行异常的问题。
可能的实现中,终端设备中可以保存有第一类型的日志文件和/或第二类型的日志文件。其中,第一类型的日志文件中可以打印终端设备运行时的全量日志信息,日志内容较为全面,例如,第一类型的日志文件可以为fulldump文件。但是,该类文件无法上传至服务器,导致开发人员无法获取用户终端设备中的第一类型的日志文件,无法依据该日志文件进行问题定位与解决。此外,通过第一类型的日志文件分析异常信息时,需要结合使用分析日志的相关工具,对工具的依赖性较强,日志生成流程繁琐。
第二类型的日志文件虽然可以上传至服务器,使开发人员可以获取,例如,第二类型的日志文件可以为kmsg文件。但是,第二类型的日志文件中无法打印各个进程间的调用关系,以及没有各个进程间的资源依赖关系,保存的日志信息较少,导致开发人员依据该第二类型的日志文件无法准确定位问题原因,不足以进行问题定位与解决。
因此,通过当前终端设备中的日志信息定位终端设备运行异常的问题解决率较低,影响开发人员的问题定位。
有鉴于此,本申请实施例提供的一种日志生成方法,当终端设备中的进程长时间处于D状态时,终端设备在日志中可以打印进程间的依赖关系,以及可以全量查找各个进程间的资源依赖关系。从而使终端设备打印的日志信息内容更为详细,使开发人员可以快速定位异常原因,提升终端设备运行异常的问题解决效率。
可以理解的是,使进程处于长时间D状态的原因有很多,例如,进程长时间等待CPU调用执行,或者进程长时间等待释放锁资源等。
其中,对于进程长时间等待释放锁资源的场景中,进程之间往往存在锁资源调用的依赖关系。示例性的,以进程等待释放互斥锁资源为例,在终端设备中,同一时间可以允许一个进程持有互斥锁资源,其他进程需要等待该互斥锁资源释放后再持有。当某一进程等待其他进程释放互斥锁资源时,该进程可以让出CPU,进入等待队列,并处于D状态。这时,如果该进程长时间无法获得互斥锁资源,则可以触发hungtask机制。
下面图3示出了在互斥锁场景中,进程间的锁资源的依赖关系。
如图3所示,进程1在执行的过程中,需要持有锁A资源、锁B资源,以及锁C资源才可以继续执行。然而,进程1当前未获取到锁C资源,当前锁C资源被进程2持有,进程1需要等待进程2释放锁C资源,因此,进程1进入D状态。
进程2在执行的过程中,需要持有锁C资源、锁D资源,以及锁E资源才可以继续执行。然而,进程2当前未获取到锁E资源,当前锁E资源被进程3持有,进程2需要等待进程3释放锁E资源,因此,进程2进入D状态。
进程3在执行的过程中,需要持有锁E资源、锁F资源。进程3在执行结束后,可以释放锁E资源和锁F资源。
可以理解的是,若进程3长时间未执行结束,进程2和进程1长时间处于D状态,进而可以触发hungtask机制,使hungtask机制产生告警信息,以及指示终端设备进行重启。
若进程3可以正常执行结束,并释放锁资源,则当进程2获得锁E资源后,可以取消D状态,开始执行。进程2在执行结束后,可以释放锁C资源、锁D资源,以及锁E资源。
若进程2可以正常执行结束,并释放锁资源,则当进程1获得锁C资源后,可以取消D状态,开始执行。进程1在执行结束后,可以释放锁A资源、锁B资源,以及锁C资源。
根据上述的锁资源依赖关系可以看出:当进程为D状态时,可以根据锁资源信息递归查找阻塞进程执行的原因。假设进程3长时间未结束执行,当递归查询到第一个阻塞进程(进程3)时,终端设备可以获取到进程3的堆栈信息以及进程信息,进而可以分析进程3长时间未执行结束的原因。也就是说,通过上述递归查询的方式可以找到导致hungtask问题的根本原因。
以上述互斥锁场景为例,图4示出了本申请实施例的一种日志生成方法。其中,该方法的实现过程可以分为两部分,第一部分为锁持有者的获取,可以包括下述步骤S401-步骤S405;第二部分为锁关系分析,可以包括下述步骤S406-步骤S411。具体方法包括:
第一部分:锁持有者的获取。
S401、查找触发hungtask机制的处于D状态的进程。
在终端设备运行时,终端设备的内核中可以创建内核线程,该内核线程可以定期遍历检测系统中处于D状态的关键进程,用于查找长时间处于D状态的关键进程。其中,该内核线程的遍历周期可以由终端设备自定义设置,例如,遍历周期可以设置为120秒左右等。具体该内核线程的遍历周期,本申请实施例不作限定。
可以理解的是,关键进程可以理解为在保证终端设备的正常运行中,比较重要的进程,或者影响用户使用或体验的进程。当关键进程运行异常时,可能会出现一些用户可感知的问题,例如,终端设备的屏幕卡死不动,用户修改的数据无法保存,因内存数据读写慢导致的运行卡顿或卡死等。
一种可能的hungtask机制确定长时间处于D状态进程的实现中,上述内核线程在定期遍历的过程中,可以统计处于D状态的进程在两次检测之间的调度次数。
如果该内核线程发现有处于D状态的进程在两次检测之间没有发生任何调度,则可以判断该进程已经长时间处于D状态,并可以打印相关警告信息以及输出该进程的堆栈信息,以供开发人员进行问题定位。示例性的,查找触发hungtask机制的处于D状态的进程可以为上述图3中的长时间处于D状态的进程1。
如果该内核线程发现处于D状态的进程在两次检测之间有发生过调度,则可以判断该进程未长时间处于D状态,不会触发hungtask机制打印警告信息以及重启终端设备。
可以理解的是,终端设备中处于D状态的进程可能不止一个,对于多个处于D状态的进程,hungtask机制均可以进行检测,并记录多个处于D状态的进程信息。可能的实现中,hungtask机制可以根据遍历进程的时间先后顺序对多个处于D状态的进程进行检测,或者,hungtask机制也可以根据进程的优先级顺序对多个处于D状态的进程进行检测。具体的hungtask机制检测多个处于D状态的进程的方式,本申请实施例不作限定。
为便于描述,后续将查找到触发hungtask机制的处于D状态的进程称为进程A。
S402、回溯堆栈、查找阻塞函数。
在终端设备运行时,由于终端设备中各个进程间可以存在函数调用关系,当终端设备运行出问题时,终端设备可以根据进程间的函数调用关系寻找到阻塞函数。可以理解的是,终端设备根据函数调用关系了解各进程间的调用关系的过程可以称为回溯堆栈。
其中,进程间的调用关系可以如上述图3所示,进程1未获取到锁C资源时,可以让出CPU,进而CPU可以调用进程2;进程2未获取到锁E资源时,可以让出CPU,进而CPU可以调用进程3。
示例性的,以进程1与进程2之间的进程调用为例,可能的实现中,当进程1无法获取锁C资源时,进程1可以根据锁C的地址信息获取锁C的结构体信息。其中,锁C的结构体信息中可以包括owner字段,通过该owner字段可以获取到当前持有该锁C的进程的task_struct结构体信息。
可以理解的是,进程的task_struct结构体信息中可以包括进程识别号(processidentification,pid)、fp寄存器信息等,通过该task_struct结构体可以确定出对应的进程。例如在上述图3中,进程1可以确定出持有锁C的进程为进程2。
在上述可能的实现中,当进程1确定进程2持有锁C资源时,进程1可以调用schedule()函数以及_switch_to函数,让出CPU,进而CPU可以调用进程2,这时,进程1处于D状态,等待进程2释放锁C资源。其中,schedule()函数可以为CPU调度函数,_switch_to函数可以为让出CPU函数,例如,_switch_to(进程1,进程2)可以表示进程1让出对CPU的调用,并把进程2拉进来执行任务。
在回溯堆栈的过程中,终端设备可以确定出因无法获取锁资源而导致处于D状态的进程。可能的实现中,终端设备可以通过预设的匹配机制确定出因无法获取锁资源而导致处于D状态的进程。
其中,预设的匹配机制可以为终端设备通过查找阻塞函数来确定。可以理解的是,阻塞函数可以为无法获取锁资源的函数,例如,阻塞函数可以包括:互斥锁函数(_mutex_lock)、读写信号量函数(rwsem_down_write)等。具体的,阻塞函数包括哪些函数可以由终端设备自定义设置,本申请实施例对此不作限定。
S403、回溯堆栈、寻找锁地址。
本申请实施例中,当终端设备查找到某一阻塞函数时,可以确定该函数缺少的锁资源信息,也就是说,终端设备可以获得阻塞该函数执行时所缺少的锁资源的结构体信息。由于锁的结构体信息中可以包括owner字段,因此,终端设备可以根据锁的结构体中的owner字段确定当前持有该锁且未释放的进程。
为便于描述,后续将根据owner字段确定的持有锁且未释放的进程称为进程B。
S404、当前锁是否有owner。
本申请实施例中,判断当前锁是否有owner字段,可以用于判断当前是否有进程持有该锁。当终端设备判断当前锁有owner字段信息时,可以执行步骤S405。
可以理解的是,当前锁的结构体中可能没有owner字段。可能的场景中,终端设备在运行过程中可能存在处于中间状态的情况,其中,中间状态可以理解为当前的终端设备中没有进程持有该锁的状态。例如,中间状态可以为进程B刚释放某一锁资源,进程A还没来得及拿到该锁资源的状态。这时,终端设备可以执行步骤S412,对当前锁没有owner字段的场景进行特殊处理。
S405、获得进程B的结构体信息。
本申请实施例中,进程B可以为持有该owner字段所对应的锁的进程。
可能的场景中,终端设备获取的owner字段可能出现异常的情况。例如,终端设备获取的owner字段的地址值是错的,例如终端设备无法访问内存中的该地址值,这时,终端设备可以执行步骤S412,对该owner字段异常的场景进行特殊处理。
若owner字段的地址信息未出现异常,则终端设备可以通过owner字段确定进程B的task_struct结构体信息。在获取到进程B的task_struct结构体信息后,则可以执行步骤S406,判断进程B的状态。
需要说明的是,对于死锁函数,在获得进程B的结构体信息后,可以判断进程B是不是之前已经判断过,若进程B之前已经判断过进程状态,则不再执行步骤S406,即不检查进程B状态,可以执行步骤S410,打印进程B的回溯堆栈信息和进程信息。这样,在执行本申请实施例的方法时,可以不会出现死循环的现象。
第二部分:锁关系分析。
S406、判断进程B的状态。
本申请实施例中,终端设备可以判断进程B是否处于下述状态中的一种状态:D状态、kill状态、other状态。针对进程B的不同状态,终端设备可以执行不同的步骤。
若进程B处于D状态,则可以执行步骤S407。
若进程B处于kill状态,则可以执行步骤S409。
若进程B处于other状态,则可以执行步骤S408。
S407、进程B为D状态。
当进程B处于D状态时,说明进程B也处于阻塞的状态,无法执行完成,因而无法释放锁。例如在上述图3中,进程B可以为进程2,进程2需要等待锁E资源的释放,所以进程2也可以处于D状态,并无法释放锁C资源。
此时,终端设备需要继续分析进程B处于D状态的原因,则可以重新执行步骤S402,回溯进程B的堆栈信息,查找阻塞进程B的阻塞函数。
S408、进程B为other状态。
本申请实施例中,other状态可以包括R状态。当进程B处于other状态时,可以说明进程B当前处于就绪状态或运行状态,由于尚未执行结束而没有释放锁,则不需要进一步回溯进程B的堆栈信息,终端设备可以执行步骤S410,打印该进程B的回溯堆栈和进程信息,方便后续分析其长时间未执行结束的原因。
S409、进程B为kill状态。
当进程B处于kill状态时,可以说明进程B还未释放锁就已经被异常终止。可以理解的是,处于kill状态的进程B是无法进程堆栈回溯的,因为当进程B被杀死后,对应的堆栈信息也会被删除。但是,终端设备中可以打印进程B的进程信息,也就是说,对于处于kill状态的进程B,打印的日志信息中可以不包括进程B的堆栈信息。
S410、打印进程B的回溯堆栈。
本申请实施例中,打印进程B的回溯堆栈,可以包括打印进程B中函数间的调用关系信息等。
S411、打印进程B的进程信息。
本申请实施例中,打印进程B的进程信息,可以包括打印与进程相关的信息,例如,打印进程B的进程信息可以包括打印进程B的pid、fp寄存器地址等信息。
需要说明的是,上述步骤S410中进程B的堆栈信息和步骤S411中进程B的进程信息可以保存在终端设备的同一个文件中,例如,可以保存在kmsg文件中。具体该文件的名称和保存地址,可以由终端设备自定义设置,本申请实施例不作限定。通过在日志文件中增加日志信息,打印进程间的函数调用关系以及资源依赖信息,可以为开发人员定位问题提供有效的日志信息。
S412、特殊处理。
本申请实施例中,终端设备可以将一些处于特殊状态的进程进行特殊处理,其中,特殊状态可以包括:进程锁没有owner字段、owner字段的地址值无意义,或者为读写信号量进程中的读锁owner字段等。
特殊处理可以包括打印进程调度的排队信息等。终端设备可以根据打印的进程调度的排队信息,确定是否存在某个进程的执行时间较长。
可以理解的是,进程在执行过程中,可以读取终端设备内存中的数据,或者向终端设备内存中写入数据。通常,为保证数据的正确性,会对读取或写入的操作加锁,其中,读取数据时加的锁可以称为读锁,写入数据时加的锁可以称为写锁。
可能的场景中,终端设备中可以存在多个进程一起读取数据,且后面可以存在进程等待写入数据的情况。这时,在进程读取数据的过程中,会对数据加读锁,写入数据的进程需要等全部读取数据的进程执行完,且将读锁释放后,才能写入数据。
如果读取数据的进程一直读不完,则后面写入数据的进程无法执行,也就是说,写入数据的进程可能出现长期处于D状态的情况。这时,终端设备在回溯堆栈的过程中,由于多个进程一起读取数据,可能存在获得的读取数据的进程的owner地址是不准确的,也就是说,在这种场景下,仅根据owner地址判断进程是没有意义,还可能需要看整个进程队列的排队情况等。因此,当终端设备确定owner字段为读写信号量进程中的读锁owner字段时,终端设备可以进行特殊处理,打印进程调度的排队信息等。
下面通过具体的实施例对本申请实施例的方法进行详细说明。下面的实施例可以相互结合或独立实施,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
图5示出了本申请实施例的一种日志生成方法,具体可以包括:
S501、确定第一进程,第一进程为进入第一状态超过预设时长的进程。
本申请实施例中,第一状态可以为进程的D状态,预设时长可以为时长较长的值,例如,预设时长可以设置为120秒左右等。示例性的,预设时长可以为上述图4对应实施例的步骤S401中内核线程的遍历周期。其中,预设时长可以由终端设备自定义设置,对于具体的预设时长,本申请实施例不作限定。
第一进程可以为处于D状态超过预设时长的进程,也可以理解为,第一进程为长时间处于D状态的进程。可能的实现中,终端设备可以通过hungtask机制确定第一进程,也可以通过其他方式确定第一进程,具体确定第一进程的方法,本申请实施例不作限定。
S502、生成第一进程的日志,第一进程的日志包括:第一进程的进程信息、第一进程的堆栈信息以及第二进程的进程信息,第二进程为引起第一进程进入第一状态超过预设时长的进程。
本申请实施例中,终端设备可以在终端设备的文件中生成第一进程的日志,例如,终端设备可以将第一进程的日志生成到kmsg文件中,也可以将第一进程的日志生成到其他文件中。具体第一进程的日志的文件名称和文件路径,可以由终端设备自定义设置,本申请实施例不作限定。
可以理解的是,终端设备可以将第一进程的日志文件上传至服务器,开发人员可以通过服务器获取到该第一进程的日志文件,进而可以根据该第一进程的日志文件进行问题的定位与解决。
本申请实施例中,第一进程与第二进程之间的资源依赖关系可以为直接资源依赖,也可以为间接资源依赖。例如,当第二进程持有第一进程运行时所需资源时,可以理解为第一进程与第二进程存在直接资源依赖关系;当第二进程未持有第一进程运行时所需资源,但是第一进程处于D状态与第二进程持有的资源有关时,可以理解为第一进程与第二进程存在间接资源依赖关系。
示例性的,以上述图3对应的实施例为例,假设第一进程为进程1,第二进程为进程2,由于进程2持有进程1运行时所需的锁C资源,因此,进程1与进程2存在直接资源依赖关系。
假设第一进程为进程1,第二进程为进程3,此时,进程3未持有进程1运行时所需的锁C资源。但是,由于进程2持有进程1运行时所需的锁C资源,进程3持有进程2运行时所需的锁E资源,若进程3不释放锁E资源,则进程2会一直处于D状态,导致进程1也一直处于D状态。因此,虽然进程3未持有进程1运行时所需的锁C资源,但是进程1处于D状态与进程3持有的资源有关,也就是说,进程1与进程3存在间接资源依赖关系。
本申请实施例中,第一进程的日志中第一进程的进程信息和第二进程的进程信息具体包括的内容可以参考上述图4对应实施例的步骤S411中的相关描述,不再赘述。第一进程的堆栈信息可以参考上述图4对应实施例的步骤S410中的相关描述,不再赘述。
当终端设备确定有长时间处于D状态的进程时,终端设备可以为存在资源依赖关系的进程生成相关的日志信息,从而使终端设备打印的日志信息内容更为详细,方便开发人员进行问题定位,减少了人力工作量,同时减少了对工具的依赖,提升问题解决效率。
可选的,在图5对应的实施例的基础上,第一进程的日志中还可以包括:第二进程的堆栈信息,和/或,用于表示第一进程与第二进程之间的资源依赖关系的信息。
第一进程的日志中的资源依赖关系信息可以包括:第一进程缺少的资源信息以及持有第一进程所缺少资源的进程的进程信息等。示例性的,以上述图3对应的实施例为例,假设第一进程为进程1,则第一进程的日志中可以包括:“进程1缺少锁C资源”、“锁C资源被进程2持有”、“进程2缺少锁E资源”、“锁E资源被进程3持有”等信息。具体的,第一进程的日志中包括的资源依赖信息以及日志信息的展现形式,本申请实施例不作限定。
本申请实施例中,通过在日志中生成进程间的资源依赖关系,可以更为直观的了解到进程间的调用关系,减少对问题场景复现的依赖,提高了开发人员定位问题的效率。
可选的,在图5对应的实施例的基础上,在生成第一进程的日志之前,可以包括:确定引起第一进程进入第一状态超过预设时长的第一目标资源;确定持有第一目标资源的第二进程。
本申请实施例中,第一目标资源可以为直接引起第一进程进入第一状态的资源,也可以为间接引起第一进程进入第一状态的资源。
若第一目标资源为第一进程运行时所需的资源,则第一目标资源可以为直接引起第一进程进入第一状态的资源;示例性的,以上述图3对应的实施例为例,假设第一进程为进程1,由于锁C资源可以直接引起进程1进入D状态,因此,第一目标资源可以为锁C资源。
若第一目标资源不是第一进程运行时所需资源,但是第一进程处于D状态与第一目标资源有关,则第一目标资源可以为间接引起第一进程进入第一状态的资源。示例性的,以上述图3对应的实施例为例,假设第一进程为进程1,由于锁E资源可以引起进程2进入D状态,进而引起进程1进入D状态,也就是说,锁E资源可以间接引起进程1进入D状态。因此,第一目标资源可以为锁E资源。
其中,第一目标资源可以为任意的阻塞第一进程执行的资源,例如,第一目标资源可以为锁相关的资源,也可以为CPU相关的资源,具体的第一目标资源的类型,本申请实施例不作限定。
可以理解的是,第二进程可以为阻塞第一进程运行的根本原因,也可以理解为,第二进程可以为导致hungtask问题的根本原因。其中,若第一目标资源为直接引起第一进程进入第一状态的资源,则第二进程与第一进程存在直接资源依赖关系;若第一目标资源为间接引起第一进程进入第一状态的资源,则第二进程与第一进程存在间接资源依赖关系。
需要说明的是,当第二进程与第一进程存在间接资源依赖关系时,终端设备中可以存在其他进程a和进程b,使得第一进程与进程a存在直接资源依赖关系,进程b与第二进程存在直接资源依赖关系,其中,进程a和进程b可以为同一个进程,也可以为不同的进程。
本申请实施例中,根据第一目标资源确定出第二进程,开发人员可以通过分析第二进程的相关信息确定第二进程持续持有第一目标资源的原因,进而可以找到阻塞第一进程执行以及导致hungtask问题的根本原因。
可选的,在图5对应的实施例的基础上,确定引起第一进程进入第一状态超过预设时长的第一目标资源,可以包括:确定引起第一进程进入第一状态超过预设时长的目标函数;确定执行目标函数时所缺少的资源,得到第一目标资源。
本申请实施例中,目标函数可以为第一进程中因缺少第一目标资源而无法运行的函数。其中,终端设备中可以包括多个目标函数。示例性的,目标函数可以为上述图4对应实施例的步骤S402中的阻塞函数,阻塞函数包括的函数可以参照步骤S402中的相关描述,不再赘述。具体的目标函数可以由终端设备自定义设置,本申请实施例不做限定。
可能的实现中,终端设备可以根据第一进程中函数间的调用关系确定出目标函数,也可以在运行代码中搜索得到目标函数,还可以通过其他的方式确定目标函数,具体确定目标函数的方式,本申请实施例不做限定。
终端设备通过设置多个目标函数,可以更快更准确的确定缺少第一目标资源的函数,从而更快找到引起第一进程进入第一状态的第二进程,提升问题解决效率。
可选的,在图5对应的实施例的基础上,目标函数包括与锁有关的函数,第一目标资源包括目标锁,确定持有第一目标资源的第二进程,可以包括:在目标锁的结构体信息中查找持有目标锁的第二进程。
本申请实施例中,目标锁的结构体中可以包括多个字段信息,示例性的,目标锁的结构体中可以包括owner字段、wait_lock字段,和wait_list字段等。其中,owner字段可以用于记录当前持有该目标锁的进程;wait_lock字段可以用于保证操作安全性;wait_list字段可以用于保存因无法获取锁而进入睡眠的进程信息,以及唤醒等待进程等。
可能的实现中,终端设备可以根据目标锁的结构体中的owner字段确定当前持有该目标锁的进程,也就是第二进程。具体的根据目标锁确定第二进程的方式,本申请实施例不作限定。
本申请实施例中,由于目标锁的结构体中可以包括确定持有该目标锁的进程信息的字段,因此,通过目标锁可以更为方便的查找到第二进程,提升问题定位效率。
可选的,在图5对应的实施例的基础上,确定持有第一目标资源的第二进程之后,可以包括:确定第二进程的状态;生成第一进程的日志,可以包括:当第二进程的状态为第二状态时,生成不包括第二进程的堆栈信息的第一进程的日志;或者,当第二进程的状态不为第一状态且不为第二状态时,生成包括第二进程的堆栈信息的第一进程的日志。
本申请实施例中,第二状态可以为进程的kill状态,当第二进程为kill状态时,生成的日志中不包括第二进程的堆栈信息,具体不包括第二进程的堆栈信息的原因可以参照上述的具体实施方式以及图4对应的实施例的步骤S409中的相关描述,不再赘述。
第二进程的状态不为第一状态且不为第二状态的状态可以称为进程的other状态,其中,other状态可以包括进程的R状态,具体的R状态可以参照上述的具体实施方式以及图4对应的实施例的步骤S408中的相关描述,不再赘述。
本申请实施例通过在日志文件中增加进程的堆栈信息和进程信息,以及打印进程间的函数调用关系和资源依赖信息,可以为开发人员定位问题提供有效的日志信息。
可选的,在图5对应的实施例的基础上,确定引起第一进程进入第一状态超过预设时长的第一目标资源之前,可以包括:确定引起第一进程进入第一状态超过预设时长的的第二目标资源;确定持有第二目标资源的第三进程;确定引起第一进程进入第一状态超过预设时长的第一目标资源,可以包括:当第三进程的状态为第一状态时,确定引起第三进程进入第一状态的第一目标资源。
本申请实施例中,当第一目标资源为间接引起第一进程进入第一状态的资源时,终端设备中还可以存在第二目标资源。其中,第二目标资源可以为直接引起第一进程进入第一状态的资源,也可以为间接引起第一进程进入第一状态的资源。
可以理解的是,若第二目标资源为直接引起第一进程进入第一状态的资源,则第三进程与第一进程存在直接资源依赖关系;若第二目标资源为间接引起第一进程进入第一状态的资源,则第三进程与第一进程存在间接资源依赖关系。具体的进程间的依赖关系可以参照上述图5对应的实施例中的相关描述,不再赘述。
需要说明的是,当第三进程与第一进程存在间接资源依赖关系时,终端设备中可以存在其他进程c和进程d,使得第一进程与进程c存在直接资源依赖关系,进程d与第三进程存在直接资源依赖关系,其中,进程c和进程d可以为同一个进程,也可以为不同的进程。
本申请实施例中,第一进程与第二进程之间可能存在其他多个进程,这些进程之间可以存在资源的相互依赖关系,使得终端设备根据这些资源依赖关系可以从第一进程回溯找到第二进程。也就是说,终端设备根据资源依赖关系可以找到阻塞第一进程执行以及导致hungtask问题的根本原因。进而,开发人员可以根据第二进程的运行状况分析造成hungtask问题的原因,提高问题解决率。
可选的,在图5对应的实施例的基础上,第一进程的日志中还可以包括:第三进程的进程信息以及第三进程的堆栈信息。
可以理解的是,当第一进程与第二进程存在间接资源依赖关系时,第一进程与第二进程中间可以存在与第一进程或第二进程有资源依赖关系的其他进程,例如第三进程。其中,第一进程的日志中可以生成第三进程的进程信息以及第三进程的堆栈信息,也可以不生成第三进程的进程信息以及第三进程的堆栈信息,本申请实施例不作限定。
本申请实施例中,通过在日志中打印第一进程与第二进程之间的进程相关信息,可以更为全面的了解进程间的函数调用关系,方便开发人员进行问题定位。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
上述主要从方法的角度对本申请实施例提供的方案进行了介绍。为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的方法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对实现日志生成方法的装置进行功能模块的划分,例如可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
如图6示为本申请实施例提供的一种芯片的结构示意图。芯片600包括一个或两个以上(包括两个)处理器601、通信线路602、通信接口603和存储器604。
在一些实施方式中,存储器604存储了如下的元素:可执行模块或者数据结构,或者他们的子集,或者他们的扩展集。
上述本申请实施例描述的方法可以应用于处理器601中,或者由处理器601实现。处理器601可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器601中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器601可以是通用处理器(例如,微处理器或常规处理器)、数字信号处理器(digitalsignal processing,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门、晶体管逻辑器件或分立硬件组件,处理器601可以实现或者执行本申请实施例中的公开的各处理相关的方法、步骤及逻辑框图。
结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。其中,软件模块可以位于随机存储器、只读存储器、可编程只读存储器或带电可擦写可编程存储器(electricallyerasable programmable read only memory,EEPROM)等本领域成熟的存储介质中。该存储介质位于存储器604,处理器601读取存储器604中的信息,结合其硬件完成上述方法的步骤。
处理器601、存储器604以及通信接口603之间可以通过通信线路602进行通信。
在上述实施例中,存储器存储的供处理器执行的指令可以以计算机程序产品的形式实现。其中,计算机程序产品可以是事先写入在存储器中,也可以是以软件形式下载并安装在存储器中。
本申请实施例还提供一种计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包括一个或多个可用介质集成的服务器、数据中心等数据存储设备。例如,可用介质可以包括磁性介质(例如,软盘、硬盘或磁带)、光介质(例如,数字通用光盘(digital versatile disc,DVD))、或者半导体介质(例如,固态硬盘(solid state disk,SSD))等。
本申请实施例还提供一种计算机可读存储介质。上述实施例中描述的方法可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。计算机可读介质可以包括计算机存储介质和通信介质,还可以包括任何可以将计算机程序从一个地方传送到另一个地方的介质。存储介质可以是可由计算机访问的任何目标介质。
作为一种可能的设计,计算机可读介质可以包括紧凑型光盘只读储存器(compactdisc read-only memory,CD-ROM)、RAM、ROM、EEPROM或其它光盘存储器;计算机可读介质可以包括磁盘存储器或其它磁盘存储设备。而且,任何连接线也可以被适当地称为计算机可读介质。例如,如果使用同轴电缆,光纤电缆,双绞线,DSL或无线技术(如红外,无线电和微波)从网站,服务器或其它远程源传输软件,则同轴电缆,光纤电缆,双绞线,DSL或诸如红外,无线电和微波之类的无线技术包括在介质的定义中。如本文所使用的磁盘和光盘包括光盘(CD),激光盘,光盘,数字通用光盘(digital versatile disc,DVD),软盘和蓝光盘,其中磁盘通常以磁性方式再现数据,而光盘利用激光光学地再现数据。
本申请实施例是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理单元以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理单元执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

Claims (7)

1.一种日志生成方法,其特征在于,所述方法包括:
确定第一进程,所述第一进程为进入第一状态超过预设时长的进程;生成所述第一进程的日志,所述第一进程的日志包括:所述第一进程的进程信息、所述第一进程的堆栈信息以及第二进程的进程信息,所述第二进程为引起所述第一进程进入所述第一状态超过所述预设时长的进程;
所述第一进程的日志中还包括:所述第二进程的堆栈信息,和/或,用于表示所述第一进程与所述第二进程之间的资源依赖关系的信息;
所述生成所述第一进程的日志之前,包括:
确定引起所述第一进程进入所述第一状态超过所述预设时长的第一目标资源;
确定持有所述第一目标资源的所述第二进程;
所述确定引起所述第一进程进入所述第一状态超过所述预设时长的第一目标资源,包括:
确定引起所述第一进程进入所述第一状态超过所述预设时长的目标函数;
确定执行所述目标函数时所缺少的资源,得到所述第一目标资源;
所述目标函数包括与锁有关的函数,所述第一目标资源包括目标锁,所述确定持有所述第一目标资源的所述第二进程,包括:
在所述目标锁的结构体信息中查找持有所述目标锁的所述第二进程。
2.根据权利要求1所述的方法,其特征在于,所述确定持有所述第一目标资源的所述第二进程之后,包括:确定所述第二进程的状态;
所述生成所述第一进程的日志,包括:
当所述第二进程的状态为第二状态时,生成不包括所述第二进程的堆栈信息的所述第一进程的日志;
或者,当所述第二进程的状态不为所述第一状态且不为所述第二状态时,生成包括所述第二进程的堆栈信息的所述第一进程的日志。
3.根据权利要求1所述的方法,其特征在于,所述确定引起所述第一进程进入所述第一状态超过所述预设时长的第一目标资源之前,包括:
确定引起所述第一进程进入所述第一状态超过所述预设时长的的第二目标资源;
确定持有所述第二目标资源的第三进程;
所述确定引起所述第一进程进入所述第一状态超过所述预设时长的第一目标资源,包括:当所述第三进程的状态为所述第一状态时,确定引起所述第三进程进入所述第一状态的所述第一目标资源。
4.根据权利要求3所述的方法,其特征在于,所述第一进程的日志中还包括:所述第三进程的进程信息以及所述第三进程的堆栈信息。
5.一种终端设备,其特征在于,包括:存储器和处理器,所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序,以执行如权利要求1-4任一项所述的方法。
6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有指令,当所述指令被执行时,使得计算机执行如权利要求1-4任一项所述的方法。
7.一种计算机程序产品,其特征在于,包括计算机程序,当所述计算机程序被运行时,使得终端设备执行如权利要求1-4任一项所述的方法。
CN202211531743.2A 2022-12-01 2022-12-01 一种日志生成方法及相关装置 Active CN116701320B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211531743.2A CN116701320B (zh) 2022-12-01 2022-12-01 一种日志生成方法及相关装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211531743.2A CN116701320B (zh) 2022-12-01 2022-12-01 一种日志生成方法及相关装置

Publications (2)

Publication Number Publication Date
CN116701320A CN116701320A (zh) 2023-09-05
CN116701320B true CN116701320B (zh) 2024-05-14

Family

ID=87834550

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211531743.2A Active CN116701320B (zh) 2022-12-01 2022-12-01 一种日志生成方法及相关装置

Country Status (1)

Country Link
CN (1) CN116701320B (zh)

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5872981A (en) * 1997-05-30 1999-02-16 Oracle Corporation Method for managing termination of a lock-holding process using a waiting lock
CN107704363A (zh) * 2017-09-28 2018-02-16 努比亚技术有限公司 冻屏监测方法、移动终端及计算机可读存储介质
CN108052430A (zh) * 2017-11-30 2018-05-18 努比亚技术有限公司 移动终端重启定位方法、移动终端及计算机可读存储介质
CN108255674A (zh) * 2017-12-31 2018-07-06 广东欧珀移动通信有限公司 多进程浏览器进程日志收集方法、装置以及移动终端
CN109165147A (zh) * 2018-08-10 2019-01-08 北京奇艺世纪科技有限公司 日志打印控制方法、装置、系统、后端服务器及前端设备
CN109918141A (zh) * 2019-03-15 2019-06-21 Oppo广东移动通信有限公司 线程执行方法、装置、终端及存储介质
CN109992397A (zh) * 2017-12-29 2019-07-09 广东欧珀移动通信有限公司 进程处理方法和装置、电子设备、计算机可读存储介质
CN111767155A (zh) * 2020-08-06 2020-10-13 腾讯科技(深圳)有限公司 死锁检测方法、装置、设备及计算机可读存储介质
CN112035318A (zh) * 2020-08-28 2020-12-04 北京浪潮数据技术有限公司 一种异常进程的定位方法、系统及相关装置
CN114625545A (zh) * 2020-12-10 2022-06-14 华为技术有限公司 进程持锁检测方法及其电子设备和可读介质
CN114860463A (zh) * 2022-03-31 2022-08-05 威胜信息技术股份有限公司 一种嵌入式实时操作系统死锁自动检测方法、系统及介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014207632A1 (en) * 2013-06-28 2014-12-31 Koninklijke Philips N.V. Logging device and log aggregation device
JP2017107357A (ja) * 2015-12-09 2017-06-15 セイコーエプソン株式会社 制御装置、制御装置の制御方法、サーバー、及び、ネットワークシステム
US11915062B2 (en) * 2020-12-17 2024-02-27 Oracle International Corporation Server instance introspection for shared resource collisions using call stack dependencies

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5872981A (en) * 1997-05-30 1999-02-16 Oracle Corporation Method for managing termination of a lock-holding process using a waiting lock
CN107704363A (zh) * 2017-09-28 2018-02-16 努比亚技术有限公司 冻屏监测方法、移动终端及计算机可读存储介质
CN108052430A (zh) * 2017-11-30 2018-05-18 努比亚技术有限公司 移动终端重启定位方法、移动终端及计算机可读存储介质
CN109992397A (zh) * 2017-12-29 2019-07-09 广东欧珀移动通信有限公司 进程处理方法和装置、电子设备、计算机可读存储介质
CN108255674A (zh) * 2017-12-31 2018-07-06 广东欧珀移动通信有限公司 多进程浏览器进程日志收集方法、装置以及移动终端
CN109165147A (zh) * 2018-08-10 2019-01-08 北京奇艺世纪科技有限公司 日志打印控制方法、装置、系统、后端服务器及前端设备
CN109918141A (zh) * 2019-03-15 2019-06-21 Oppo广东移动通信有限公司 线程执行方法、装置、终端及存储介质
CN111767155A (zh) * 2020-08-06 2020-10-13 腾讯科技(深圳)有限公司 死锁检测方法、装置、设备及计算机可读存储介质
CN112035318A (zh) * 2020-08-28 2020-12-04 北京浪潮数据技术有限公司 一种异常进程的定位方法、系统及相关装置
CN114625545A (zh) * 2020-12-10 2022-06-14 华为技术有限公司 进程持锁检测方法及其电子设备和可读介质
CN114860463A (zh) * 2022-03-31 2022-08-05 威胜信息技术股份有限公司 一种嵌入式实时操作系统死锁自动检测方法、系统及介质

Also Published As

Publication number Publication date
CN116701320A (zh) 2023-09-05

Similar Documents

Publication Publication Date Title
CN111625431B (zh) 一种日志信息生成方法、装置及电子设备
CN110866254B (zh) 一种检测漏洞方法与电子设备
CN116339818B (zh) 代码变更类型的筛选方法、电子设备及可读存储介质
CN117149476A (zh) 故障上报方法及相关装置
CN116701320B (zh) 一种日志生成方法及相关装置
CN116700768B (zh) 一种应用的处理方法及相关装置
CN114741256A (zh) 传感器监听方法、装置及终端设备
CN114896097B (zh) 一种应用程序无响应处理方法及电子设备
CN117130824A (zh) 一种处理异常的方法、电子设备及存储介质
US11815990B2 (en) Method for determining faulty computing core in multi-core processor and electronic device
CN114692137A (zh) 应用的安全性分析方法、装置、设备及存储介质
CN110417931B (zh) 域名解析记录获取方法、装置、计算机设备及存储介质
CN116701134B (zh) 一种数据处理方法和电子设备
CN116095685B (zh) 关键信息的保护方法和终端设备
CN116088955B (zh) 进程处理方法和终端设备
CN115016665B (zh) 冻屏故障检测方法、电子设备和计算机可读存储介质
CN116700815B (zh) 硬件资源控制方法、电子设备及可读存储介质
CN116737258B (zh) 卸载应用的方法及相关装置
CN113836540B (zh) 管理应用权限的方法、设备、存储介质和程序产品
CN114625428B (zh) 一种应用异常的处理方法及电子设备
CN113485923B (zh) 项目代码检测方法与装置、电子设备
CN117131497B (zh) 一种软件检测方法及电子设备
WO2023169212A1 (zh) 一种识别应用程序中sdk的方法、终端及服务器
WO2024083114A1 (zh) 一种软件分发方法、电子设备及系统
CN117707439A (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