CN109710578A - 一种日志记录方法及系统 - Google Patents
一种日志记录方法及系统 Download PDFInfo
- Publication number
- CN109710578A CN109710578A CN201811347343.XA CN201811347343A CN109710578A CN 109710578 A CN109710578 A CN 109710578A CN 201811347343 A CN201811347343 A CN 201811347343A CN 109710578 A CN109710578 A CN 109710578A
- Authority
- CN
- China
- Prior art keywords
- processor
- target
- specified memory
- memory queue
- specified
- 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.)
- Granted
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种日志记录方法及系统,属于计算机技术领域。其中,目标处理器可以从所处理的数据包中获取目标数据,以及将获取的目标数据写入指定内存队列中,代理处理器可以从指定内存队列中读取目标数据并写入指定文件中。在记录日志时,目标处理器只需将需要记录的目标数据写入指定内存队列中,进而可以避免目标处理器对指定文件频繁进行打开关闭的操作,减少目标处理器为记录日志所需耗费的时间,进而在实现记录日志的同时,使目标处理器的性能能够最大程度的用在对数据包的正常处理中,保证目标应用各个主线程的正常运行。
Description
技术领域
本发明属于计算机技术领域,特别是涉及一种日志记录方法及系统。
背景技术
日志文件作为对应用程序运行时所做出的处理操作的记录,对应用程序的维护具有重要的参考意义,因此,大部分应用程序在运行时,都会记录日志文件。
现有技术中,通常是由运行这应用程序主线程的目标处理器在对数据包进行正常处理的同时,提取各个数据包中需要记录的数据,然后写入指定文件中。
但是,由于存储日志数据的指定文件需要长久保存,因此,指定文件需要存储在磁盘区域中,这样,目标处理器在向指定文件写入数据时,需要先打开指定文件,并在完成写入操作之后关闭指定文件,整个操作过程较为复杂,对目标处理器的性能消耗较大,且耗费的时间较长,进而会导致目标处理器对数据包的正常处理受到影响,使应用程序的各个主线程的正常运行受到影响。
发明内容
有鉴于此,本发明提供一种日志记录方法及系统,以便解决记录日志时,对应用程序的整体性能造成较大损耗,进而影响应用的各个主线程正常运行的问题。
依据本发明的第一方面,提供了一种日志记录方法,应用于包含至少一个目标处理器、至少一个代理处理器以及指定内存队列的系统,该方法可以包括:
对所述至少一个目标处理器中的任一目标处理器,所述目标处理器从所处理的数据包中获取目标数据;其中,所述目标处理器为运行目标应用主线程的处理器;
所述目标处理器将获取的目标数据写入指定内存队列;
对于所述至少一个代理处理器中的任一代理处理器,所述代理处理器从所述指定内存队列中读取所述目标数据,并写入指定文件,得到日志文件。
可选的,所述目标处理器将获取的目标数据写入指定内存队列,包括:
所述目标处理器在所述指定内存队列的长度值不为零时,将获取的所述数据包中的目标数据作为所述指定内存队列中的一个元素,写入所述指定内存队列;
所述目标处理器将所述指定内存队列的长度值减去预设量;其中,所述长度值的初始值为所述指定内存队列所包含的元素个数与预设量的乘积。
可选的,所述代理处理器从所述指定内存队列中读取所述目标数据,并写入指定文件,得到日志文件,包括:
所述代理处理器读取所述指定内存队列中的每个元素中的目标数据,并将所述指定内存队列的长度值增加所述预设量;
所述代理处理器在读取的元素个数满足预设个数阈值时,将所读取的每个元素中的目标数据写入所述指定文件中。
可选的,所述系统还包括划分处理器;
所述目标处理器从所处理的数据包中获取目标数据之前,所述方法还包括:
所述划分处理器根据预设的数量比值,将所述系统中包含的处理器划分为目标处理器以及代理处理器;
所述划分处理器在所述目标应用启动时,将所述目标应用启动的各个主线程分别与所述目标处理器绑定;所述划分处理器为所述系统包含的任一处理器。
可选的,所述划分处理器将所述目标应用启动的各个主线程分别与所述目标处理器绑定之后,所述方法还包括:
所述划分处理器判断所述目标应用启动的主线程的个数是否大于所述目标处理器的个数;
若所述目标应用启动的主线程的个数大于所述目标处理器的个数,则所述划分处理器控制目标设备显示处理器扩增提醒;
其中,所述目标设备为运行所述系统的设备,所述处理器扩容提醒用于指示用户为所述目标设备增加处理器。
依据本发明的第二方面,提供了一种日志记录系统,该系统包括:至少一个目标处理器、至少一个代理处理器以及指定内存队列;
其中,对于所述至少一个目标处理器中的任一目标处理器,所述目标处理器,用于从所处理的数据包中获取目标数据;其中,所述目标处理器为运行目标应用主线程的处理器;
所述目标处理器,还用于将获取的目标数据写入指定内存队列中;
对于所述至少一个代理处理器中的任一代理处理器,所述代理处理器,用于从所述指定内存队列中读取所述目标数据,并写入指定文件,得到日志文件。
可选的,所述目标处理器,还用于在所述指定内存队列的长度值不为零时,将获取的所述数据包中的目标数据作为所述指定内存队列中的一个元素,写入所述指定内存队列;
所述目标处理器,还用于将所述指定内存队列的长度值减去预设量;
其中,所述长度值的初始值为所述指定内存队列所包含的元素个数与预设量的乘积。
可选的,所述代理处理器,还用于读取所述指定内存队列中的每个元素中的目标数据,并将所述指定内存队列的长度值增加所述预设量;
所述代理处理器,还用于在读取的元素个数满足预设个数阈值时,将所读取的每个元素中的目标数据写入所述指定文件中。
可选的,所述系统还包括划分处理器;
所述划分处理器,用于根据预设的数量比值,将所述系统中包含的处理器划分为目标处理器以及代理处理器;
所述划分处理器,还用于在所述目标应用启动时,将所述目标应用启动的各个主线程分别与所述目标处理器绑定;所述划分处理器为所述系统包含的任一处理器。
可选的,所述划分处理器,还用于判断所述目标应用启动的主线程的个数是否大于所述目标处理器的个数;
所述划分处理器,还用于若所述目标应用启动的主线程的个数大于所述目标处理器的个数,则控制目标设备显示处理器扩增提醒;
其中,所述目标设备为运行所述系统的设备,所述处理器扩容提醒用于指示用户为所述目标设备增加处理器。
针对在先技术,本发明具备如下优点:
目标处理器可以从所处理的数据包中获取目标数据,其中,目标处理器为运行目标应用主线程的处理器,接着,目标处理器可以将获取的目标数据写入指定内存队列中,最后,代理处理器可以从指定内存队列中读取目标数据,并写入指定文件,实现了数据读取与写入文件的操作分离。在记录日志时,目标处理器只需将需要记录的目标数据写入指定内存队列中,代理处理器会从指定内存队列中读取目标数据并写入指定文件中,进而可以避免目标处理器对指定文件频繁进行打开关闭的操作,减少目标处理器为记录日志所需耗费的时间,进而在实现记录日志的同时,使目标处理器的性能能够最大程度的用在对数据包的正常处理中,保证目标应用各个主线程的正常运行。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是本发明实施例提供的一种日志记录方法的步骤流程图;
图2-1是本发明实施例提供的另一种日志记录方法的步骤流程图;
图2-2是本发明实施例提供的一种日志记录系统的应用示意图;
图3是本发明实施例提供的一种日志记录系统的框图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
本发明实施例给出一种日志记录方法,该日志记录方法应用于包含至少一个目标处理器、至少一个代理处理器以及指定内存队列的系统,其中,目标处理器为运行目标应用主线程的处理器,代理处理器为独立于目标处理器的处理器,代理处理器用于执行除运行目标应用主线程之外的其他操作,指定内存队列为预先在运行该系统的设备的内部存储区中建立的队列。
本发明实施例中,日志记录系统的基本工作流程包括获取目标数据→将目标数据写入指定内存队列→将指定内存队列中的目标数据写入指定文件,具体如下:
获取目标数据:
目标处理器从所处理的数据包中获取目标数据。
将目标数据写入指定内存队列:
目标处理器将获取的目标数据写入指定内存队列。
将指定内存队列中的目标数据写入指定文件:
代理处理器从指定内存队列中读取目标数据,并写入指定文件,进而得到日志文件。
本发明实施例中,针对现有技术所存在的:在记录日志时,由目标处理器执行向位于磁盘区域的指定文件写入目标数据,所导致的对目标应用的整体性能造成较大损耗,进而影响目标应用的各个主线程正常运行的问题,本发明实施例提供了相应的解决思路:由目标处理器从所处理的数据包中获取目标数据,然后将获取的目标数据写入指定内存队列中,由代理处理器将指定内存队列中的目标数据写入指定文件中,从而在实现了日志记录的同时,达到了避免目标处理器对指定文件频繁进行打开关闭的操作,减少目标处理器为记录日志所需耗费的时间,使目标处理器的性能能够最大程度的用在对数据包的正常处理中,保证目标应用各个主线程的正常运行。
下面对上述提到的日志记录方法进行具体描述。
图1是本发明实施例提供的一种日志记录方法的步骤流程图,应用于包含至少一个目标处理器、至少一个代理处理器以及指定内存队列的系统,如图1所示,该方法可以包括:
步骤101、对所述至少一个目标处理器中的任一目标处理器,所述目标处理器从所处理的数据包中获取目标数据;其中,所述目标处理器为运行目标应用主线程的处理器。
本发明实施例中,该系统可以运行在设备上,该系统中包含的目标处理器以及代理处理器可以为该设备中的处理器,该设备可以为服务器,也可以为手机、平板电脑、个人电脑等可以运行目标应用的设备,例如,该设备可以为包含32个处理器的服务器,本发明实施例对此不做限定。实际的应用场景中,在运行目标应用时,设备通常会基于目标处理器上运行的主线程对数据包进行正常处理,例如,进行收发处理,进而实现目标应用的各种功能,进一步地,为了对所处理的数据包进行记录,一般会提取数据包中特定类型的数据,来生成日志文件,以便于为目标应用的维护提高参考信息。其中,该特定类型的数据可以是开发人员预先设定的,示例的,该特定类型的数据可以为数据包的目标网络协议(InternetProtocol,IP)地址,数据包的源地址,等等,本发明实施例对此不作限定。进一步地,为了记录日志,每个目标处理器可以从由其所处理的数据包中提取该数据包的特定类型的数据,得到目标数据。
步骤102、所述目标处理器将获取的目标数据写入指定内存队列中。
本发明实施例中,该指定内存队列可以是预先在运行该系统的设备的内部存储区中建立的队列,该指定内存队列的大小可以根据实际需求来设定,本发明实施例对此不作限定,本步骤中,目标处理器可以将每次获取到的目标数据直接写入指定内存队列中,进而可以省略对指定文件的打开关闭操作,整个操作过程较为简便,所耗费的时间也大大缩短,进而可以减少对目标处理器性能的性能,使得目标处理器的性能能够最大程度的用于运行主线程,保证在记录日志的同时,目标应用各个主线程的正常运行能够不受影响。
步骤103、对于所述至少一个代理处理器中的任一代理处理器,所述代理处理器从所述指定内存队列中读取所述目标数据,并写入指定文件,得到日志文件。
本发明实施例中,指定文件为位于该设备磁盘区域的文件,代理处理器为与目标处理器独立的处理器,其中,代理处理器可以仅用于执行将指定内存队列中的目标数据写入指定文件,当然,代理处理器也可以还执行除运行目标应用主线程之外的其他操作,只要保证代理处理器能够及时的将目标数据写入指定文件即可。
综上所述,本发明实施例提供的日志记录方法,目标处理器可以从所处理的数据包中获取目标数据,其中,目标处理器为运行目标应用主线程的处理器,接着,目标处理器可以将获取的目标数据写入指定内存队列中,最后,代理处理器可以从指定内存队列中读取目标数据,并写入指定文件,得到日志文件。在记录日志时,目标处理器只需将需要记录的目标数据写入指定内存队列中,代理处理器会从指定内存队列中读取目标数据并写入指定文件中,进而可以避免目标处理器对指定文件频繁进行打开关闭的操作,减少目标处理器为记录日志所需耗费的时间,进而在实现记录日志的同时,使目标处理器的性能能够最大程度的用在对数据包的正常处理中,保证目标应用各个主线程的正常运行。
图2-1是本发明实施例提供的另一种日志记录方法的步骤流程图,应用于包含至少一个目标处理器、至少一个代理处理器、指定内存队列以及划分处理器的系统,其中,该为该划分处理器为该系统中包含的任一处理器,如图2-1所示,该方法可以包括:
步骤201、所述划分处理器根据预设的数量比值,将所述设备的多个处理器划分为目标处理器以及代理处理器。
本发明实施例中,由于指定内存队列的大小有限,如果目标处理器向指定内存队列写入目标数据的速度超过代理处理器从指定内存队列读取目标数据的速度时,就会出现指定内存队列被目标数据占满,目标处理器无法及时将从其他数据包中提取的目标数据写入指定内存队列的情况,进而会导致最终记录的日志文件中存在信息缺失。例如,目标处理器提取了数据包a中的目标数据,在向指定内存队列中写入该数据包a中的目标数据时,检测到指定内存队列已满,此时,则只能等待代理处理器将其中的部分数据读取出去,有剩余空间,才能进行写入操作,而为了保证对数据包的正常处理不受影响,目标处理器在等待过程中,只能对数据包a之后的数据包直接进行发送,直至目标处理器提取的数据包a中的目标数据写入指定内存队列,才能继续提取其他数据包中的目标数据,这样,最终记录的日志文件中就会缺失等待过程中直接进行发送的数据包中的数据。
因此,本步骤中,划分处理器可以根据预设的数量比值,将运行该系统的目标设备中的包括多个处理器划分为目标处理器以及代理处理器,即就是,将系统中包含的处理器划分为目标处理器以及代理处理器,示例的,可以由开发人员预先指定其中一个处理器作为划分处理器,该划分处理器可以根据预设的指令,对设备中的所有处理器执行划分目标处理器以及代理处理器的操作。具体的,该预设的数量比值可以是由开发人员根据目标应用的性能需求预先设定,示例的,该预设的数量比值可以为1∶1,当然,也可以为其他值,例如,1.3∶1,只要保证基于该比值划分的目标处理器及代理处理器进行处理时,速度能够达到平衡即可,本发明实施例对此不作限定。示例的,假设该设备有10个处理器,该预设的数量比值为1∶1,那么在划分时,可以将其中5个处理器作为目标处理器,将另外5个处理器作为代理处理器。
本发明实施例中,通过预先划分,限定作为目标处理器的处理器的数量与作为代理处理器的处理器的数量,进而保证目标处理器向指定内存队列写入目标数据的速度不会超过代理处理器从指定内存队列读取目标数据的速度,避免出现信息缺失的问题。
步骤202、所述划分处理器在所述目标应用启动时,将所述目标应用启动的各个主线程分别与所述目标处理器绑定。
本发明实施例中,划分处理器可以在目标设备的配置文件中,定义各个主线程与目标处理器的对应关系,例如,建立主线程的标识与目标处理器的标识的对应关系,进而实现将目标应用启动的各个主线程分别与目标处理器绑定,其中,该目标设备为运行该系统的设备。
进一步地,实际应用场景中,每个设备的具体配置不同,因此,划分后的目标处理器的数量可能会小于目标应用的主线程的数量,这样一个目标处理器上可能会绑定多个主线程,进而降低主线程的运行效率,因此,本发明实施例中,设备可以在将目标应用启动的各个主线程分别与目标处理器绑定之后,判断目标应用启动的主线程的个数是否大于目标处理器的个数,若目标应用启动的主线程的个数大于目标处理器的个数,则显示处理器扩增提醒,其中,该处理器扩容提醒用于指示用户为目标设备增加处理器,进而使得用户能够及时为目标设备增加处理器,使得后续步骤中目标处理器的数量能够增加,进而提高主线程的运行效率。
当然为了保证主线程的运行效率,还可以在设置预设数量比值时,综合考虑设备的处理器数量以及目标应用的主线程数量,使得每个主线程可以单独运行在目标处理器上,当然,在本发明的另一可选实施例中,也可以直接根据目标应用的主线程的数量来确定作为目标处理器的处理器数量,将剩余的处理器作为代理处理器,以保证每个主线程可以单独运行在目标处理器上,本发明实施例对此不作限定。
步骤203、对所述至少一个目标处理器中的任一目标处理器,所述目标处理器从所处理的数据包中获取目标数据。
具体的,本步骤的实现方式与上述步骤101的实现方式类似,可以参照上述步骤101,本发明实施例对此不作限定。
步骤204、所述目标处理器将获取的目标数据写入指定内存队列中。
具体的,本步骤可以通过下述子步骤(1)~子步骤(2)来实现:
子步骤(1):所述目标处理器在所述指定内存队列的长度值不为零时,将获取的所述数据包中的目标数据作为所述指定内存队列中的一个元素,写入所述指定内存队列。
本步骤中,每个目标处理器可以将从每个数据包中提取的目标数据作为指定内存队列中的一个元素写入该指定内存队列中,其中,该指定内存队列可以为无锁环形队列,其中,无锁表示下一处理器无需等待当前处理器对该队列的操作完成之后才能进行操作,而是多个处理器可以同时对该队列进行操作时,这样,可以提高目标处理器的写入操作的效率,进一步地,环形队列为首尾相连的环形空间,环形队列的指针在需要指向的下一元素超出该队列的最后一个元素时,会指向这片环形空间的起始地址,进而可以使得队列空间重复使用,进而提高处理资源的利用率。进一步地,该指定内存队列的形式可以为共享内存无锁环形队列,当然,也可以通过其他方式来实现,例如,设置该指定内存队列的形式可以为基于管道的缓冲区的无锁环形队列,本发明实施例对此不作限定。
进一步地,目标处理器在向指定内存队列写入数据时,可以先基于指定内存队列的长度值来判断该指定内存队列是否已满,具体的,可以在指定内存队列的长度值为零时认为指定内存队列中没有空余的元素位置,指定内存队列已满,此时,目标处理器可以停止执行写入操作,直到指定内存队列的长度值不为零,即,指定内存队列中有空余的元素位置时,再执行写入操作,以避免在指定内存队列中没有空余的元素位置时执行写入操作,出现写入操作无效,浪费操作资源的问题。
子步骤(2):所述目标处理器将所述指定内存队列的长度值减去预设量;其中,所述长度值的初始值为所述指定内存队列所包含的元素个数与预设量的乘积。
本步骤中,该指定内存队列的长度值可以体现队列的长度,该预设量的具体值可以是由开发人员根据实际情况预先设置的,示例的,该预设量可以为1,该预设量也可以为2,本发明实施例对此不作限定。进一步地,为了监控队列是否已满,本步骤中,每个目标处理器在向队列中写入数据之后,会将该指定内存队列的长度值减去预设量,示例的,假设预设量为1,那么该指定内存队列的长度值即为队列的实际长度,那么目标处理器在执行一次写入操作之后,可以将预设队列长度值减去1,假设预设量为2,那么该指定内存队列的长度值即为队列的实际长度的2倍值,那么目标处理器在执行一次写入操作之后,可以将指定内存队列的长度值减去2,以便于通过该指定内存队列的长度值来确定队列中是否还有空余的元素位置。
步骤205、对于所述至少一个代理处理器中的任一代理处理器,所述代理处理器从所述指定内存队列中读取所述目标数据,并写入指定文件,得到日志文件。
具体的,本步骤205可以通过下述子步骤(3)~子步骤(4)来实现:
子步骤(3):所述代理处理器读取所述指定内存队列中的每个元素中的目标数据,并将所述指定内存队列的长度值增加所述预设量。
本步骤中,代理处理器在将元素中的目标数据读取之后,相应地,指定内存队列中就增加了空余的元素位置,因此,本步骤中,代理处理器在将元素中的目标数据读取之后可以为指定内存队列的长度值增加预设量,以使该指定内存队列的长度值可以精确的反映指定内存队列中空余的元素位置情况。
子步骤(4):所述代理处理器在读取的元素个数满足预设个数阈值时,将所读取的每个元素中的目标数据写入所述指定文件中。
由于代理处理器向指定文件写入目标数据时,需要先执行打开操作,并且在写入之后,还需要执行关闭操作,因为,为了减少不必要的打开关闭操作,本步骤中,每个代理处理器可以在读取的元素个数满足预设个数阈值时,再将所读取的每个元素中的目标数据写入指定文件中,其中,该预设个数阈值可以是根据实际需求预先设定的,示例的,该预设个数阈值可以为10,这样,只需执行一次打开关闭操作,即可实现向指定文件中写入多个元素中的目标数据,进而可以提高操作效率,节省操作资源。
进一步地,以日志记录系统中包括的目标处理器以及代理处理器的数量均为2为例,图2-2是本发明实施例提供的一种日志记录系统的应用示意图,如图2-2所示,目标处理器a以及目标处理器b可以将从所处理的数据包中获取目标数据写入指定内存队列c中,代理处理器d以及代理处理器e可以从指定内存队列c中读取目标数据,然后将读取到的目标数据写入指定文件f中,进而实现记录日志。
综上所述,本发明实施例提供的日志记录方法,划分处理器可以先根据预设的数量比值,将系统中的处理器划分为目标处理器以及代理处理器,以使目标处理器的写入速度不会超过代理处理器的读取速度,进而保证写入指定内存队列中的目标数据能够被及时读取,进而避免信息丢失的问题,接着,在目标应用启动时,将目标应用启动的各个主线程分别与目标处理器绑定,然后,目标处理器可以从所处理的数据包中获取目标数据,其中,目标处理器为运行目标应用主线程的处理器,接着,目标处理器可以将获取的目标数据写入指定内存队列中,最后,代理处理器可以读取指定内存队列中的目标数据,并写入指定文件,得到日志文件。在记录日志时,目标处理器只需将需要记录的目标数据写入指定内存队列中,代理处理器会从指定内存队列中读取目标数据并写入指定文件中,进而可以避免目标处理器对指定文件频繁进行打开关闭的操作,减少目标处理器为记录日志所需耗费的时间,进而在实现记录日志的同时,使目标处理器的性能能够最大程度的用在对数据包的正常处理中,保证目标应用各个主线程的正常运行。
图3是本发明实施例提供的一种日志记录系统的框图,如图3所示,该系统30可以包括:至少一个目标处理器301、至少一个代理处理器302以及指定内存队列303;
其中,对于所述至少一个目标处理器301中的任一目标处理器301,所述目标处理器301,用于从所处理的数据包中获取目标数据;其中,所述目标处理器301为运行目标应用主线程的处理器;
所述目标处理器301,还用于将获取的目标数据写入指定内存队列303中;
对于所述至少一个代理处理器302中的任一代理处理器302,所述代理处理器302,用于从所述指定内存队列303中读取所述目标数据,并写入指定文件,得到日志文件。
综上所述,本发明实施例提供的日志记录系统,目标处理器可以从所处理的数据包中获取目标数据,其中,目标处理器为运行目标应用主线程的处理器,接着,目标处理器可以将获取的目标数据写入指定内存队列中,最后,代理处理器可以从指定内存队列中读取目标数据,并写入指定文件,得到日志文件。在记录日志时,目标处理器只需将需要记录的目标数据写入指定内存队列中,代理处理器会从指定内存队列中读取目标数据并写入指定文件中,进而可以避免目标处理器对指定文件频繁进行打开关闭的操作,减少目标处理器为记录日志所需耗费的时间,进而在实现记录日志的同时,使目标处理器的性能能够最大程度的用在对数据包的正常处理中,保证目标应用各个主线程的正常运行。
可选的,所述目标处理器301,还用于在所述指定内存队列303的长度值不为零时,将获取的所述数据包中的目标数据作为所述指定内存队列303中的一个元素,写入所述指定内存队列303;
所述目标处理器301,还用于将所述指定内存队列303的长度值减去预设量;
其中,所述长度值的初始值为所述指定内存队列303所包含的元素个数与预设量的乘积。
可选的,所述代理处理器302,还用于读取所述指定内存队列303中的每个元素中的目标数据,并将所述指定内存队列303的长度值增加所述预设量;
所述代理处理器302,还用于在读取的元素个数满足预设个数阈值时,将所读取的每个元素中的目标数据写入所述指定文件中。
可选的,所述系统30还包括划分处理器;所述划分处理器,用于根据预设的数量比值,将所述系统30中包含的处理器划分为目标处理器301以及代理处理器302;
所述划分处理器,还用于在所述目标应用启动时,将所述目标应用启动的各个主线程分别与所述目标处理器301绑定;所述划分处理器为所述系统30包含的任一处理器。
可选的,所述划分处理器,还用于判断所述目标应用启动的主线程的个数是否大于所述目标处理器301的个数;
所述划分处理器,还用于若所述目标应用启动的主线程的个数大于所述目标处理器301的个数,则控制目标设备显示处理器扩增提醒;其中,所述目标设备为运行所述系统30的设备,所述处理器扩容提醒用于指示用户为所述目标设备增加处理器。
综上所述,本发明实施例提供的日志记录系统,划分处理器可以先根据预设的数量比值,将系统中的处理器划分为目标处理器以及代理处理器,以使目标处理器的写入速度不会超过代理处理器的读取速度,进而保证写入指定内存队列中的目标数据能够被及时读取,进而避免信息丢失的问题,接着,在目标应用启动时,将目标应用启动的各个主线程分别与目标处理器绑定,然后,目标处理器可以从所处理的数据包中获取目标数据,其中,目标处理器为运行目标应用主线程的处理器,接着,目标处理器可以将获取的目标数据写入指定内存队列中,最后,代理处理器可以读取指定内存队列中的目标数据,并写入指定文件,得到日志文件。在记录日志时,目标处理器只需将需要记录的目标数据写入指定内存队列中,代理处理器会从指定内存队列中读取目标数据并写入指定文件中,进而可以避免目标处理器对指定文件频繁进行打开关闭的操作,减少目标处理器为记录日志所需耗费的时间,进而在实现记录日志的同时,使目标处理器的性能能够最大程度的用在对数据包的正常处理中,保证目标应用各个主线程的正常运行。
对于上述装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
优选的,本发明实施例还提供一种设备,包括多个处理器,存储器,存储在存储器上并可在所述多个处理器上运行的计算机程序,该计算机程序被多个处理器执行时实现上述日志记录方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述日志记录方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域技术人员易于想到的是:上述各个实施例的任意组合应用都是可行的,故上述各个实施例之间的任意组合都是本发明的实施方案,但是由于篇幅限制,本说明书在此就不一一详述了。
在此提供的日志记录方法不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造具有本发明方案的系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的日志记录方法中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
Claims (10)
1.一种日志记录方法,其特征在于,应用于包含至少一个目标处理器、至少一个代理处理器以及指定内存队列的系统,所述方法包括:
对所述至少一个目标处理器中的任一目标处理器,所述目标处理器从所处理的数据包中获取目标数据;其中,所述目标处理器为运行目标应用主线程的处理器;
所述目标处理器将获取的目标数据写入指定内存队列;
对于所述至少一个代理处理器中的任一代理处理器,所述代理处理器从所述指定内存队列中读取所述目标数据,并写入指定文件,得到日志文件。
2.根据权利要求1所述的方法,其特征在于,所述目标处理器将获取的目标数据写入指定内存队列,包括:
所述目标处理器在所述指定内存队列的长度值不为零时,将获取的所述数据包中的目标数据作为所述指定内存队列中的一个元素,写入所述指定内存队列;
所述目标处理器将所述指定内存队列的长度值减去预设量;
其中,所述长度值的初始值为所述指定内存队列所包含的元素个数与预设量的乘积。
3.根据权利要求2所述的方法,其特征在于,所述代理处理器从所述指定内存队列中读取所述目标数据,并写入指定文件,得到日志文件,包括:
所述代理处理器读取所述指定内存队列中的每个元素中的目标数据,并将所述指定内存队列的长度值增加所述预设量;
所述代理处理器在读取的元素个数满足预设个数阈值时,将所读取的每个元素中的目标数据写入所述指定文件中。
4.根据权利要求1所述的方法,其特征在于,所述系统还包括划分处理器;所述目标处理器从所处理的数据包中获取目标数据之前,所述方法还包括:
所述划分处理器根据预设的数量比值,将所述系统中包含的处理器划分为目标处理器以及代理处理器;
所述划分处理器在所述目标应用启动时,将所述目标应用启动的各个主线程分别与所述目标处理器绑定;所述划分处理器为所述系统包含的任一处理器。
5.根据权利要求4所述的方法,其特征在于,所述划分处理器将所述目标应用启动的各个主线程分别与所述目标处理器绑定之后,所述方法还包括:
所述划分处理器判断所述目标应用启动的主线程的个数是否大于所述目标处理器的个数;
若所述目标应用启动的主线程的个数大于所述目标处理器的个数,则所述划分处理器控制目标设备显示处理器扩增提醒;
其中,所述目标设备为运行所述系统的设备,所述处理器扩容提醒用于指示用户为所述目标设备增加处理器。
6.一种日志记录系统,其特征在于,所述系统包括:至少一个目标处理器、至少一个代理处理器以及指定内存队列;
其中,对于所述至少一个目标处理器中的任一目标处理器,所述目标处理器,用于从所处理的数据包中获取目标数据;其中,所述目标处理器为运行目标应用主线程的处理器;
所述目标处理器,还用于将获取的目标数据写入指定内存队列中;
对于所述至少一个代理处理器中的任一代理处理器,所述代理处理器,用于从所述指定内存队列中读取所述目标数据,并写入指定文件,得到日志文件。
7.根据权利要求6所述的系统,其特征在于,所述目标处理器,还用于在所述指定内存队列的长度值不为零时,将获取的所述数据包中的目标数据作为所述指定内存队列中的一个元素,写入所述指定内存队列;
所述目标处理器,还用于将所述指定内存队列的长度值减去预设量;
其中,所述长度值的初始值为所述指定内存队列所包含的元素个数与预设量的乘积。
8.根据权利要求7所述的系统,其特征在于,所述代理处理器,还用于读取所述指定内存队列中的每个元素中的目标数据,并将所述指定内存队列的长度值增加所述预设量;
所述代理处理器,还用于在读取的元素个数满足预设个数阈值时,将所读取的每个元素中的目标数据写入所述指定文件中。
9.根据权利要求6所述的系统,其特征在于,所述系统还包括划分处理器;
所述划分处理器,用于根据预设的数量比值,将所述系统中包含的处理器划分为目标处理器以及代理处理器;
所述划分处理器,还用于在所述目标应用启动时,将所述目标应用启动的各个主线程分别与所述目标处理器绑定;所述划分处理器为所述系统包含的任一处理器。
10.根据权利要求9所述的系统,其特征在于,所述划分处理器,还用于判断所述目标应用启动的主线程的个数是否大于所述目标处理器的个数;
所述划分处理器,还用于若所述目标应用启动的主线程的个数大于所述目标处理器的个数,则控制目标设备显示处理器扩增提醒;
其中,所述目标设备为运行所述系统的设备,所述处理器扩容提醒用于指示用户为所述目标设备增加处理器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811347343.XA CN109710578B (zh) | 2018-11-13 | 2018-11-13 | 一种日志记录方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811347343.XA CN109710578B (zh) | 2018-11-13 | 2018-11-13 | 一种日志记录方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109710578A true CN109710578A (zh) | 2019-05-03 |
CN109710578B CN109710578B (zh) | 2021-01-12 |
Family
ID=66254203
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811347343.XA Active CN109710578B (zh) | 2018-11-13 | 2018-11-13 | 一种日志记录方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109710578B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110888865A (zh) * | 2019-12-04 | 2020-03-17 | 北京明略软件系统有限公司 | 一种基于单向链表的数据处理方法及装置 |
CN111416825A (zh) * | 2020-03-24 | 2020-07-14 | 河南信大网御科技有限公司 | 线程间无锁日志管理方法和系统、终端、存储介质 |
CN111444154A (zh) * | 2020-03-26 | 2020-07-24 | 涵涡智航科技(玉溪)有限公司 | 一种在单片机系统中高效存储日志文件的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103514131A (zh) * | 2012-06-29 | 2014-01-15 | 联想(北京)有限公司 | 系统信息输出方法和电子设备 |
CN104239133A (zh) * | 2014-09-26 | 2014-12-24 | 北京国双科技有限公司 | 一种日志处理方法、装置及服务器 |
CN106708578A (zh) * | 2016-12-23 | 2017-05-24 | 北京五八信息技术有限公司 | 基于双线程的日志输出方法及装置 |
US20180167259A1 (en) * | 2016-12-13 | 2018-06-14 | Canon Kabushiki Kaisha | Information processing apparatus and method |
-
2018
- 2018-11-13 CN CN201811347343.XA patent/CN109710578B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103514131A (zh) * | 2012-06-29 | 2014-01-15 | 联想(北京)有限公司 | 系统信息输出方法和电子设备 |
CN104239133A (zh) * | 2014-09-26 | 2014-12-24 | 北京国双科技有限公司 | 一种日志处理方法、装置及服务器 |
US20180167259A1 (en) * | 2016-12-13 | 2018-06-14 | Canon Kabushiki Kaisha | Information processing apparatus and method |
CN106708578A (zh) * | 2016-12-23 | 2017-05-24 | 北京五八信息技术有限公司 | 基于双线程的日志输出方法及装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110888865A (zh) * | 2019-12-04 | 2020-03-17 | 北京明略软件系统有限公司 | 一种基于单向链表的数据处理方法及装置 |
CN111416825A (zh) * | 2020-03-24 | 2020-07-14 | 河南信大网御科技有限公司 | 线程间无锁日志管理方法和系统、终端、存储介质 |
CN111444154A (zh) * | 2020-03-26 | 2020-07-24 | 涵涡智航科技(玉溪)有限公司 | 一种在单片机系统中高效存储日志文件的方法 |
CN111444154B (zh) * | 2020-03-26 | 2020-11-27 | 涵涡智航科技(玉溪)有限公司 | 一种在单片机系统中高效存储日志文件的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109710578B (zh) | 2021-01-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109710578A (zh) | 一种日志记录方法及系统 | |
CN109144695A (zh) | 一种任务拓扑关系的处理方法、装置、设备和介质 | |
US9639459B2 (en) | I/O latency and IOPs performance in thin provisioned volumes | |
CN107766101A (zh) | App启动事件的处理方法、装置和设备 | |
US10552812B2 (en) | Scenario based logging | |
CN105045632A (zh) | 一种多核环境下实现免锁队列的方法和设备 | |
CN106227769B (zh) | 数据存储方法及装置 | |
CN106354536A (zh) | 在Windows系统中加载Linux系统ELF文件的方法及装置 | |
CN103729166B (zh) | 程序的线程关系确定方法、设备及系统 | |
CN108763963A (zh) | 基于数据访问权限的分布式处理方法、装置及系统 | |
AU2011229395B2 (en) | Dual mode reader writer lock | |
US9778969B2 (en) | Automatic memory leak detection | |
US7779230B2 (en) | Data flow execution of methods in sequential programs | |
CN109521966A (zh) | 存储设备虚拟化方法、装置、终端及计算机可读存储介质 | |
US10496524B2 (en) | Separating test coverage in software processes using shared memory | |
CN109491827A (zh) | 应用软件的日志数据存储方法、装置、设备及存储介质 | |
CN109408141A (zh) | 应用程序的启动处理方法、装置及电子设备 | |
CN104866285A (zh) | 可编程序控制器 | |
CN104391662B (zh) | 一种数据读写方法及装置 | |
CN105659216B (zh) | 多核处理器系统的缓存目录处理方法和目录控制器 | |
EP2960798A1 (en) | Automatic memory leak detection | |
CN109977096A (zh) | 一种数据库连接管理方法及装置 | |
CN107038021B (zh) | 用于访问随机存取存储器ram的方法、装置和系统 | |
JPS6051947A (ja) | 仮想記憶計算機における命令先取方式 | |
US11966619B2 (en) | Background processing during remote memory access |
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 |