CN108763108A - 记录报文数据的装置及方法 - Google Patents
记录报文数据的装置及方法 Download PDFInfo
- Publication number
- CN108763108A CN108763108A CN201810563968.3A CN201810563968A CN108763108A CN 108763108 A CN108763108 A CN 108763108A CN 201810563968 A CN201810563968 A CN 201810563968A CN 108763108 A CN108763108 A CN 108763108A
- Authority
- CN
- China
- Prior art keywords
- message data
- application
- message
- cache
- data
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
Abstract
本发明公开了一种记录报文数据的方法及装置,所述方法包括以下步骤:获取应用程序生成的报文数据;以单条报文数据为基本压缩元素,对应用程序生成的报文数据逐条进行流式压缩,将每条压缩后的报文数据存入应用缓存;每当应用缓存中的报文数据满足预设导出条件时,将应用缓存中的报文数据写入报文文件中,并清除应用缓存中的报文数据;所述装置包括获取模块、缓存模块、写入模块。本发明还公开了一种记录报文数据的装置。发明可以解决报文数据压缩过程中突发性的占用大量的处理资源,从而导致应用程序卡顿的问题。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种记录报文数据的方法及装置。
背景技术
应用程序在运行的过程中可以记录外部传感器发出的报文数据。一般,基于技术人员的设置,应用程序在接收到一条报文后,记录一条报文数据。报文数据可以帮助技术人员对应用程序进行事后回放、运行状态分析和故障分析等。
在早期的技术中,应用程序每生成一条报文数据时,就会将报文数据写入到报文文件中。将报文数据写入到报文文件的处理需要系统程序来执行,首先应用程序生成报文数据后可以向系统程序发送写入申请,然后由系统程序将报文数据写入报文文件中。上述处理过程中,每记录一条报文数据,就需要在应用程序处理和系统程序处理之间进行一次往复切换,而这种切换的时延很高。
为了减少应用程序处理和系统程序处理之间的切换,提出了一种新的记录报文数据的处理方式:应用程序每生成一条报文数据时,先对生成的报文数据进行缓存,当缓存的报文数据达到一定数据量时,对缓存的多条报文数据进行整体压缩,再将压缩后的报文数据写入报文文件。这样,将报文数据写入报文文件的频率降低,从而,应用程序处理和系统程序处理之间切换的频率也有所降低,可以降低处理过程的时延。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
上述处理中,当缓存的报文数据达到一定数据量时,对缓存的多条报文数据进行整体压缩,这样,需要压缩的数据量比较大,会突发性地占用大量的处理资源,从而,会导致应用程序运行卡顿。
发明内容
本发明的目的是针对上述现有技术的不足,提供一种记录报文数据的方法及装置,本发明可以解决报文数据压缩过程中由于压缩数据量大,突发性的占用大量的处理资源所导致的应用程序卡顿问题。
为实现上述技术目的,本发明采取的技术方案为:
记录报文数据的方法,包括以下步骤:
S1:获取应用程序生成的报文数据;
S2:以单条报文数据为基本压缩元素,对应用程序生成的报文数据逐条进行流式压缩,将每条压缩后的报文数据存入应用缓存;
S3:每当应用缓存中的报文数据满足预设导出条件时,将应用缓存中的报文数据写入报文文件中,并清除应用缓存中的报文数据。
进一步的,所述应用程序通过mmap函数或shm函数向系统程序申请应用缓存。
进一步的,所述步骤S2中,在进行流式压缩时,每当应用程序生成一条报文数据时,如果当前应用缓存中存有报文数据,则以当前应用缓存中的报文数据为参考数据,对当前应用程序生成的报文数据进行压缩;如果当前应用缓存中没有报文数据,则不参考其它报文数据,对当前应用程序生成的报文数据进行压缩。
进一步的,所述步骤S2还包括:
每当应用程序异常关闭时,将应用缓存中的报文数据写入预先建立的与应用缓存对应的映射文件中;
每当应用程序启动时,如果所述映射文件不为空,则将映射文件中的报文数据,标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空映射文件。
进一步的,所述步骤S2还包括:
每当应用程序正常关闭时,清空应用缓存中的报文数据;每当应用程序异常关闭时,保留应用缓存中的报文数据;
每当应用程序启动时,如果应用缓存不为空,则将应用缓存中的报文数据标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空所述应用缓存。
进一步的,所述预设导出条件为:应用缓存中的报文数据的数据量达到预设阈值或在预设时长内未发生变化,所述预设阈值的取值范围为20~80KB,所述预设时长的取值范围为5~20min。
为实现上述技术方案,本发明采取的另一种技术方案为:记录报文数据的装置,包括:
获取模块,用于获取应用程序生成的报文数据;
缓存模块,用于以单条报文数据为基本压缩元素,对应用程序生成的报文数据逐条进行流式压缩,将每条压缩后的报文数据存入应用缓存;
写入模块,用于每当应用缓存中的报文数据满足预设导出条件时,将应用缓存中的报文数据写入报文文件中,并清除应用缓存中的报文数据。
进一步的,所述缓存模块包括应用缓存,所述应用缓存是应用程序通过mmap函数或shm函数向系统程序申请的。
进一步的,所述缓存模块用于在进行流式压缩时,每当应用程序生成一条报文数据时,如果当前应用缓存中存有报文数据,则以当前应用缓存中的报文数据为参考数据,对当前应用程序生成的报文数据进行压缩;如果当前应用缓存中没有报文数据,则不参考其它报文数据,对当前应用程序生成的报文数据进行压缩。
进一步的,所述缓存模块用于每当应用程序异常关闭时,将应用缓存中的报文数据写入预先建立的与应用缓存对应的映射文件中;每当应用程序启动时,如果所述映射文件不为空,则将映射文件中的报文数据,标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空映射文件。
进一步的,所述缓存模块用于每当应用程序正常关闭时,清空应用缓存中的报文数据;每当应用程序异常关闭时,保留应用缓存中的报文数据;每当应用程序启动时,如果应用缓存不为空,则将应用缓存中的报文数据标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空所述应用缓存。
进一步的,所述写入模块中设置的预设导出条件为:应用缓存中的报文数据的数据量达到预设阈值或在预设时长内未发生变化,所述预设阈值的取值范围为20~80KB,所述预设时长的取值范围为5~20min。
本发明记录报文数据的方法,步骤S1中:在应用程序运行的过程中,当接收到报文数据时,应用程序会调用报文接口并输入需要记录的数据。进而应用程序中负责报文记录的模块,对输入的数据进行报文格式化,为该数据添加文件名、函数名、时间戳、报文级别、消息号等信息,即可生成报文数据。应用程序每生成一条报文数据,则可以获取该条报文数据,进行后续的处理。
步骤S2中:以单条报文数据为基本压缩元素,对应用程序生成的报文数据逐条进行流式压缩,将每条压缩后的报文数据存入应用缓存。流式压缩是一种参考历史数据对新生成的数据进行压缩的压缩方式,可以用于对实时生成或实时接收的数据进行压缩。基本压缩元素是流式压缩过程中进行数据压缩的基本单位,流式压缩每次压缩一个基本压缩元素。在流式压缩的过程中,每次压缩一个基本压缩元素时,以之前压缩的基本压缩元素作为参考数据,来进行压缩。基本压缩元素的可以基于流式压缩的实际需求进行设置,本实施例中,以单条报文数据为基本压缩元素。
所述应用缓存是应用程序通过mmap函数或shm函数向系统程序申请的。应用程序向系统程序申请应用缓存的方式可以多种多样,本发明将会以通过mmap(一种具有缓存调用功能的函数的名称)函数申请缓存和通过shm(一种具有缓存调用功能的函数的名称)函数申请缓存为例,进行方案的详细说明。
在进行流式压缩时,每当应用程序生成一条报文数据时,如果当前应用缓存中存有报文数据,则以当前应用缓存中的报文数据为参考数据,对当前应用程序生成的报文数据进行压缩;如果当前应用缓存中没有报文数据,则不参考其它报文数据,对当前应用程序生成的报文数据进行压缩。
每当应用程序生成一条报文数据时,应用程序可以以当前时刻之前生成的报文数据为参考数据,对当前生成的报文数据进行压缩。在获取参考数据时,可以从当前时刻开始获取之前生成的部分或全部报文数据。例如,可以从当前时刻开始,向前逐条获取报文数据,直到获取的报文数据的总数据量大于或等于预设数据量(如32K)时,停止获取报文数据,并将已获取的报文数据作为参考数据。其中,预设数据量的设置,可以基于压缩率和压缩处理量综合考虑,取值可以在16~64K。基于参考数据对报文数据进行压缩时,可以确定报文数据相对于参考数据的差别,将此差别记录下来作为压缩数据。每压缩一条报文数据,则可以将压缩后的报文数据以报文结构体的形式存储到应用缓存中。应用缓存即上述应用程序向系统程序申请的缓存,用于缓存应用程序的数据。
每当应用程序接收到一条报文数据时,应用程序可以检测应用缓存中是否缓存有报文数据。因为,应用程序每次将缓存的报文数据写入报文文件的时候,会将应用缓存中的报文数据清除掉,所以,在有些时候应用缓存中是没有报文数据的。如果应用程序这时检测到应用缓存中存有报文数据,则可以将这些报文数据作为参考数据,对当前生成的报文数据进行压缩,在应用缓存中的报文数据的数据量较大时,可以只将其中的部分报文数据作为参考数据。如果检测到应用缓存中不存在报文数据,则可以将当前生成的报文数据作为流式压缩的起始基本压缩单元,进行压缩,即不参考其它报文数据,对当前生成的报文数据进行压缩。这样,每次清除应用缓存中的报文数据后生成第一条报文数据时,则可以认为是流式压缩的一个起始点,该报文数据则可以认为是流式压缩的一个起始基本压缩单元。相应的,每次清除应用缓存中的报文数据时,则可以认为是流式压缩的一个结束点。此时缓存的最后一条报文数据则可以认为是流式压缩的一个结束基本压缩单元。每次将缓存的报文数据写入报文文件时,从缓存中写入报文文件中的多条报文数据可称为一个压缩单位。
步骤S3中:每当应用缓存中的报文数据满足预设导出条件时,将应用缓存中的报文数据写入报文文件中,并清除应用缓存中的报文数据。随着应用程序的不断运行,应用缓存中的报文数据的数据量会不断的增加。应用程序可以对应用缓存中的报文数据的数据量进行实时检测,这里检测的数据量可以是报文数据被封装成报文结构体后的数据量,或者可以认为是检测该应用程序调用的应用缓存中当前存储数据的数据量。导出条件可以根据实际需求任意设置。每当检测到缓存报文数据的数据量满足预设导出条件时,应用程序则可以向系统程序发送写入请求。进而,系统程序可以将应用缓存中的报文数据调入系统缓存再将报文数据由系统缓存写入指定的报文文件。此时,应用程序可以对应用缓存中的报文数据进行清除,清除之后,应用缓存中的报文数据的数据量归零。每当缓存的报文数据的数据量达到预设导出条件,将缓存的报文数据写入报文文件中,并清除缓存的报文。
所述预设导出条件为:应用缓存中的报文数据的数据量达到预设阈值或在预设时长内未发生变化,所述预设阈值的取值范围为20~80KB,所述预设时长的取值范围为5~20min。
其中,预设阈值的设置,可以基于处理资源突发性占用和处理时延进行综合考虑。预设阈值不宜设置的过高,这样可以防止一次性写入报文文件的数据量过大,从而可以降低处理资源的突发性占用。而且,预设阈值不宜设置过低,这样可以防止应用程序处理和系统程序处理之间切换的频率过高,长期来看可以减小整体的处理时延。该预设阈值的设置,还可以结合终端存储资源的情况进行考虑。该预设阈值的取值范围可以是20~80K
预设时长的设置,可以基于报文数据记录的及时性和处理时延进行综合考虑。预设时长不宜设置的过长,这样可以提高报文数据记录的及时性。而且,预设时长不宜设置过短,这样可以防止应用程序处理和系统程序处理之间切换的频率过高,长期来看可以减小整体的处理时延。该预设时长的取值范围可以是5~20分钟
应用程序每缓存一条报文数据,则可以计算当前缓存的报文数据的数据量。如果该数据量大于或者等于预设阈值(如50K),则触发将缓存的报文数据写入报文文件中,并清除缓存的报文数据。同时,在每次缓存的报文数据的数据量发生变化后,应用程序可以进行计时,如果计时达到预设时长(如15分钟)时该数据量还没有发生新的变化,触发将缓存的报文数据写入报文文件中,并清除缓存的报文数据。
本发明还提供两种在应用程序启动过程中进行报文数据找回的处理方法。
第一种是所述步骤S2还包括:
每当应用程序异常关闭时,将应用缓存中的报文数据写入预先建立的与应用缓存对应的映射文件中;
每当应用程序启动时,如果所述映射文件不为空,则将映射文件中的报文数据,标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空映射文件。
第二种是所述步骤S2还包括:
每当应用程序正常关闭时,清空应用缓存中的报文数据;每当应用程序异常关闭时,保留应用缓存中的报文数据;
每当应用程序启动时,如果应用缓存不为空,则将应用缓存中的报文数据标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空所述应用缓存。
由于各种不同的原因,可能会造成报文文件中的某部分报文数据发生损坏。例如,在报文数据写入缓存时,应用程序异常关闭或终端死机,则可能造成报文数据损坏,在报文数据写入报文文件后,报文文件中的该报文数据也是损坏的,或者,在报文数据写入报文文件时,终端死机,则可能造成报文文件中的该报文数据损坏。基于上述的流式压缩的处理方式,如果报文文件中的某条报文数据损坏,则只会影响到该报文数据所在的压缩单位中在该条报文数据之后的报文数据的解压缩,而不会影响到其它报文数据的解压缩。而现有技术中采用块式压缩,报文文件中某条报文数据损坏,会影响到该报文数据所在的压缩单位中的所有报文数据的解压缩。所以,本发明的方法,可以减少报文数据损坏所造成的数据丢失。
本发明还提供一种记录报文数据的装置,所述装置包括:
获取模块,用于获取应用程序生成的报文数据;
缓存模块,用于以单条报文数据为基本压缩元素,对应用程序生成的报文数据逐条进行流式压缩,将每条压缩后的报文数据存入应用缓存;
写入模块,用于每当应用缓存中的报文数据满足预设导出条件时,将应用缓存中的报文数据写入报文文件中,并清除应用缓存中的报文数据。
进一步的,所述缓存模块包括应用缓存,所述应用缓存是应用程序通过mmap函数或shm函数向系统程序申请的。
进一步的,所述缓存模块,用于:
在进行流式压缩时,每当应用程序生成一条报文数据时,如果当前应用缓存中存有报文数据,则以当前应用缓存中的报文数据为参考数据,对当前应用程序生成的报文数据进行压缩;如果当前应用缓存中没有报文数据,则不参考其它报文数据,对当前应用程序生成的报文数据进行压缩。
进一步的,所述缓存模块,用于:
每当应用程序异常关闭时,将应用缓存中的报文数据写入预先建立的与应用缓存对应的映射文件中;
每当应用程序启动时,如果所述映射文件不为空,则将映射文件中的报文数据,标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空映射文件。
进一步的,所述缓存模块,用于:
每当应用程序正常关闭时,清空应用缓存中的报文数据;每当应用程序异常关闭时,保留应用缓存中的报文数据;
每当应用程序启动时,如果应用缓存不为空,则将应用缓存中的报文数据标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空所述应用缓存。
进一步的,所述写入模块中设置的预设导出条件为:应用缓存中的报文数据的数据量达到预设阈值或在预设时长内未发生变化,所述预设阈值的取值范围为20~80KB,所述预设时长的取值范围为5~20min。
本发明采用流式压缩的方式,每生成一条报文数据即可以压缩一条报文数据,每次压缩的数据量比较小,不会突发性的占用大量的处理资源,从而,可以减少应用程序的卡顿。
附图说明
图1是本发明实施例一提供的一种记录报文数据的方法的流程示意图。
图2是本发明实施例一提供的一种报文结构体的示意图。
图3是本发明实施例一提供的一种存在数据损坏的报文文件的示意图。
图4是本发明实施例二提供的一种记录报文数据的方法的流程示意图。
图5是本发明实施例三提供的一种应用程序启动过程中进行报文数据找回处理方法的流程示意图。
图6是本发明实施例四提供的一种记录报文数据的装置的结构示意图。
具体实施方式
下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
本发明实施例提供了一种记录报文数据的方法,该方法可以由终端实现。其中,终端可以是服务器、台式计算机、笔记本计算机、虚拟化设备等,终端中安装有系统程序和应用程序。用户在使用终端的过程中,可以采用本发明实施例提供的方法,进行报文数据的记录,最终得到报文文件。该报文文件可以由终端上传给服务器,以提供给相应的技术人员和业务系统,技术人员可以基于报文文件对应用程序进行运行状态分析和故障分析等,业务系统可以基于报文文件进行统计分析、数据回放等。
如图1所示,本发明实施例一提供的记录报文数据的方法的处理流程可以包括如下的步骤:
步骤101,获取应用程序生成的报文数据
在应用程序运行的过程中,当接收到报文数据时,应用程序会调用报文接口并输入需要记录的数据。进而应用程序中负责报文记录的模块,对输入的数据进行报文格式化,为该数据添加文件名、函数名、时间戳、报文级别、消息号等信息,即可生成报文数据。应用程序每生成一条报文数据,则可以获取该条报文数据,进行后续的处理
步骤102,以单条报文数据为基本压缩元素,对生成的报文数据逐条进行流式压缩,对每条压缩后的报文数据进行缓存。
其中,流式压缩是一种参考历史数据对新生成的数据进行压缩的压缩方式,可以用于对实时生成或实时接收的数据进行压缩。基本压缩元素是流式压缩过程中进行数据压缩的基本单位,流式压缩每次压缩一个基本压缩元素。在流式压缩的过程中,每次压缩一个基本压缩元素时,以之前压缩的基本压缩元素作为参考数据,来进行压缩。基本压缩元素的可以基于流式压缩的实际需求进行设置,本实施例中,以单条报文数据为基本压缩元素。
在实施中,每当应用程序生成一条报文数据时,应用程序可以以当前时刻之前生成的报文数据为参考数据,对当前生成的报文数据进行压缩。在获取参考数据时,可以从当前时刻开始获取之前生成的部分或全部报文数据。例如,可以从当前时刻开始,向前逐条获取报文数据,直到获取的报文数据的总数据量大于或等于预设数据量(如32K)时,停止获取报文数据,并将已获取的报文数据作为参考数据。其中,预设数据量的设置,可以基于压缩率和压缩处理量综合考虑,取值可以在16~64K。基于参考数据对报文数据进行压缩时,可以确定报文数据相对于参考数据的差别,将此差别记录下来作为压缩数据。每压缩一条报文数据,则可以将压缩后的报文数据以报文结构体的形式存储到应用缓存中,报文结构体如图2所示。应用缓存即上述应用程序向系统程序申请的缓存,用于缓存应用程序的数据。
在实施中,每当应用程序接收到一条报文数据时,应用程序可以检测应用缓存中是否缓存有报文数据。因为,应用程序每次将缓存的报文数据写入报文文件的时候,会将应用缓存中的报文数据清除掉,所以,在有些时候应用缓存中是没有报文数据的。如果应用程序这时检测到应用缓存中存有报文数据,则可以将这些报文数据作为参考数据,对当前生成的报文数据进行压缩,在应用缓存中的报文数据的数据量较大时,可以只将其中的部分报文数据作为参考数据。如果检测到应用缓存中不存在报文数据,则可以将当前生成的报文数据作为流式压缩的起始基本压缩单元,进行压缩,即不参考其它报文数据,对当前生成的报文数据进行压缩。这样,每次清除应用缓存中的报文数据后生成第一条报文数据时,则可以认为是流式压缩的一个起始点,该报文数据则可以认为是流式压缩的一个起始基本压缩单元。相应的,每次清除应用缓存中的报文数据时,则可以认为是流式压缩的一个结束点。此时缓存的最后一条报文数据则可以认为是流式压缩的一个结束基本压缩单元。每次将缓存的报文数据写入报文文件时,从缓存中写入报文文件中的多条报文数据可称为一个压缩单位。
由于各种不同的原因,可能会造成报文文件中的某部分报文数据发生损坏。例如,在报文数据写入缓存时,应用程序异常关闭或终端死机,则可能造成报文数据损坏,在报文数据写入报文文件后,报文文件中的该报文数据也是损坏的,或者,在报文数据写入报文文件时,终端死机,则可能造成报文文件中的该报文数据损坏。如图3所示,基于上述的流式压缩的处理方式,如果报文文件中的某条报文数据损坏,则只会影响到该报文数据所在的压缩单位中在该条报文数据之后的报文数据的解压缩,而不会影响到其它报文数据的解压缩。而现有技术中采用块式压缩,报文文件中某条报文数据损坏,会影响到该报文数据所在的压缩单位中的所有报文数据的解压缩。所以,本发明实施例一的方法,可以减少报文数据损坏所造成的数据丢失。
应用程序向系统程序申请应用缓存的方式可以多种多样,本实施例中,以通过mmap(一种具有缓存调用功能的函数的名称)函数申请缓存和通过shm(一种具有缓存调用功能的函数的名称)函数申请缓存为例,进行方案的详细说明。通过不同的方式申请的应用缓存,会具有不同的工作机制,下面将结合应用程序异常退出后对缓存报文数据进行恢复的处理过程,对缓存的不同工作机制进行介绍:
缓存报文数据的处理可以是:将每条压缩后的报文数据,写入应用程序调用的用于报文数据存储的缓存中。相应的,该应用程序异常关闭时的处理可以是:每当应用程序异常关闭时,将该缓存中的报文数据写入预先建立的该缓存对应的映射文件中。相应的,对报文数据进行恢复的处理可以是:每当该应用程序启动时,如果该缓存对应的映射文件不为空,则将映射文件中的报文数据,标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空该映射文件。
下面以应用程序通过mmap函数申请缓存为例。相应的,缓存报文数据的处理可以是:将每条压缩后的报文数据,写入应用程序调用的用于报文数据存储的mmap缓存中。为了在应用程序异常退出后可以对缓存报文数据进行恢复,可以在每次应用程序启动时,进行如下处理:每当应用程序启动时,如果mmap缓存对应的mmap文件不为空,则将mmap文件中的报文数据,标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空mmap。
在实施中,应用程序启动后可以通过mmap函数向系统程序申请用于报文数据存储的缓存,此通过mmap函数申请的缓存可称作mmap缓存。应用程序会在指定的路径,对应此用于报文数据存储的mmap缓存,建立一个mmap文件,并在申请mmap缓存时将该路径通知系统程序。一般在应用程序正常运行的状态下,mmap文件为空。当系统程序检测到应用程序异常关闭时,系统程序会将mmap缓存中的数据写入对应的mmap文件中。可以为应用程序设置一个启动处理机制,每当应用程序启动时,检测上述指定的路径存储的mmap文件。如果检测到该mmap文件,则进一步检测该mmap文件是否为空,如果不为空,则说明上一次应用程序关闭属于异常关闭,且系统程序将异常关闭后mmap缓存中残存的报文文件写入到该mmap文件中,此时,可以将mmap文件中的报文数据,标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空map文件,通过此标记,技术人员在浏览报文文件时可以获知应用程序出现异常关闭,这里进行标记的方式可以是在报文结构体的前后增加特定的标识字段。如果在指定的路径没有查找到该mmap文件,说明该应用程序是安装后第一次运行,此时,可以通过mmap函数向系统程序申请用于报文数据存储的mmap缓存,并建立对应的mmap文件。如果在指定的路径能査找到mmap文件,但mmap文件为空,则说明应用程序上一次关闭是正常关闭,可以不做任何处理。
步骤103,每当缓存的报文数据满足预设导出条件时,将缓存的报文数据写入报文文件中,并清除缓存的报文数据。
在实施中,随着应用程序的不断运行,应用缓存中的报文数据的数据量会不断的增加。应用程序可以对应用缓存中的报文数据的数据量进行实时检测,这里检测的数据量可以是报文数据被封装成报文结构体后的数据量,或者可以认为是检测该应用程序调用的用于报文数据存储的mmap缓存或shm缓存中当前存储数据的数据量。导出条件可以根据实际需求任意设置。每当检测到缓存报文数据的数据量满足预设导出条件时,应用程序则可以向系统程序发送写入请求。进而,系统程序可以将应用缓存中的报文数据调入系统缓存再将报文数据由系统缓存写入指定的报文文件。此时,应用程序可以对应用缓存中的报文数据进行清除,清除之后,应用缓存中的报文数据的数据量归零。
每当缓存的报文数据的数据量达到预设阈值或在预设时长内未发生变化时,将缓存的报文数据写入报文文件中,并清除缓存的报文。
其中,预设阈值的设置,可以基于处理资源突发性占用和处理时延进行综合考虑。预设阈值不宜设置的过高,这样可以防止一次性写入报文文件的数据量过大,从而可以降低处理资源的突发性占用。而且,预设阈值不宜设置过低,这样可以防止应用程序处理和系统程序处理之间切换的频率过高,长期来看可以减小整体的处理时延。该预设阈值的设置,还可以结合终端存储资源的情况进行考虑。该预设阈值的取值范围可以是20~80K。
预设时长的设置,可以基于报文数据记录的及时性和处理时延进行综合考虑。预设时长不宜设置的过长,这样可以提高报文数据记录的及时性。而且,预设时长不宜设置过短,这样可以防止应用程序处理和系统程序处理之间切换的频率过高,长期来看可以减小整体的处理时延。该预设时长的取值范围可以是5~20分钟。
在实施中,应用程序每缓存一条报文数据,则可以计算当前缓存的报文数据的数据量。如果该数据量大于或者等于预设阈值(如20K、50K或80K),则触发将缓存的报文数据写入报文文件中,并清除缓存的报文数据。同时,在每次缓存的报文数据的数据量发生变化后,应用程序可以进行计时,如果计时达到预设时长(如5分钟、15分钟或20分钟)时该数据量还没有发生新的变化,触发将缓存的报文数据写入报文文件中,并清除缓存的报文数据。
实施例二
如图4所示,本发明提供另一种记录报文数据的方法,即实施例二,包括如下的步骤:
步骤401,每当应用程序生成报文数据时,终端获取当前生成的报文数据。
步骤402,终端对报文数据进行报文格式化。
步骤403,终端以mmap缓存中的报文数据为参考数据,对当前生成的报文数据进行压缩。
这里采用的压缩方式为流式压缩,流式压缩的基本压缩元素为单条报文数据。此mmap缓存是应用程序向系统程序申请的用于报文数据存储的mmap缓存。
步骤404,终端对压缩后的报文数据进行加密。
步骤405,终端将加密压缩后的报文数据以报文结构体的形式写入mmap缓存中。
步骤406,每当mmap缓存中报文数据的数据量达到预设阅值或在预设时长内未发生变化时,将mmap缓存中的报文数据写入报文文件中,并清除mmap缓存中的报文数据。
具体的处理细节可以参考上面的实施例一。
如图5所示,本发明实施例三提供的应用程序启动过程中进行报文数据找回的处理方法,包括以下步骤:
步骤501,每当应用程序启动时,终端检测预设路径处是否存储有mmap文件,如果是,则执行步骤502,否则执行步骤504。其中,该mmap文件是应用程序向系统程序申请的用于报文数据存储的map缓存对应的map文件。
步骤502,检测在该mmap文件中是否存有数据,如果是,则执行步骤503,否则结束报文数据找回处理。
步骤503,将该mmap文件中的数据,标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空该mmap文件中的数据。该步骤执行完毕后结束报文数据找回处。
步骤504,在预设路径处,新建mmap文件。该步骤执行完毕后结束报文数据找回。
具体的处理细节可以参考上面的实施例一。
本发明实施例中,采用流式压缩的方式,每生成一条报文数据即可以压缩一条报文数据,每次压缩的数据量比较小,不会突发性的占用大量的处理资源,从而,可以减少应用程序的卡顿。另外,每条报文数据进行流式压缩所产生的时延,远小于应用程序处理和系统程序处理之间的切换所产生的时延。
实施例三
基于相同的技术构思,本发明实施例还提供了记录报文数据的装置,该装置可以是上述实施例中的终端,可以用于执行上述实施例中的方法。
如图6所示,本发明实施例三提供一种记录报文数据的装置,该装置包括:
获取模块610,用于获取应用程序生成的报文数据;
缓存模块620,用于以单条报文数据为基本压缩元素,对生成的报文数据逐条进行流式压缩,对每条压缩后的报文数据进行缓存;
写入模块630,用于每当缓存的报文数据满足预设导出条件时,将缓存的报文数据入报文文件中,并清除缓存的报文数据。
可选的,所述缓存模块620,用于每当生成一条报文数据时,如果当前缓存有报文数据,则以当前缓存的报文数据为参考数据,对当前生成的报文数据进行压缩,如果当前未缓存有报文数据,则不参考其它报文数据,对当前生成的报文数据进行压缩。
可选的,所述缓存模块620,用于将每条压缩后的报文数据,写入所述应用程序调用的用于报文数据存储的mmap缓存中;所述写入模块630,用于每当所述应用程序启动时,如果所述mmap缓存对应的mmap文件不为空,则将所述mmap文件中的报文数据,标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中清空所述mmap文件。
可选的所述缓存模块620,用于将每条压缩后的报文数据,写入所述应用程序调用的用于报文数据存储的应用缓存中;所述缓存模块620,还用于每当所述应用程序异常关闭时,将所述缓存中的报文数据写入预先建立的所述缓存对应的映射文件中;所述写入模块630,用于每当所述应用程序启动时,如果所述缓存对应的映射文件不为空,则将所述映射文件中的报文数据,标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空所述映射文件。
可选的,所述缓存模块620,用于将每条压缩后的报文数据,写入所述应用程序调用的用于报文数据存储的shm缓存中;所述写入模块630,还用于每当所述应用程序启动时,如果所述shm缓存不为空,则将所述shm缓存中的报文数据,标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空所述shm缓存;
可选的,所述缓存模块620,用于将每条压缩后的报文数据,写入所述应用程序调用的用于报文数据存储的缓存中;所述缓存模块620,还用于每当所述应用程序正常关闭时,清空所述缓存中的志数据,每当所述应用程序异常关闭时,保留所述缓存中的报文数据;所述写入模块630,还用于每当所述应用程序启动时,如果所述缓存不为空,则将所述缓存中的报文数据,标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空所述缓存。
可选的,所述缓存模块620,用于对每条压缩后的报文数据进行加密,对压缩加密后的报文数据进行缓存。
可选的,所述写入模块630,用于每当缓存的报文数据的数据量达到预设阈值或在预设时长内未发生变化时,将缓存的报文数据写入报文文件中。
以上所述仅是本发明的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (12)
1.一种记录报文数据的方法,其特征在于包括以下步骤:
S1:获取应用程序生成的报文数据;
S2:以单条报文数据为基本压缩元素,对应用程序生成的报文数据逐条进行流式压缩,将每条压缩后的报文数据存入应用缓存;
S3:每当应用缓存中的报文数据满足预设导出条件时,将应用缓存中的报文数据写入报文文件中,并清除应用缓存中的报文数据。
2.根据权利要求1所述的记录报文数据的方法,其特征在于:所述应用程序通过mmap函数或shm函数向系统程序申请应用缓存。
3.根据权利要求1所述的记录报文数据的方法,其特征在于:所述步骤S2中,在进行流式压缩时,每当应用程序生成一条报文数据时,如果当前应用缓存中存有报文数据,则以当前应用缓存中的报文数据为参考数据,对当前应用程序生成的报文数据进行压缩;如果当前应用缓存中没有报文数据,则不参考其它报文数据,对当前应用程序生成的报文数据进行压缩。
4.根据权利要求1所述的记录报文数据的方法,其特征在于,所述步骤S2还包括:
每当应用程序异常关闭时,将应用缓存中的报文数据写入预先建立的与应用缓存对应的映射文件中;
每当应用程序启动时,如果所述映射文件不为空,则将映射文件中的报文数据,标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空映射文件。
5.根据权利要求1所述的记录报文数据的方法,其特征在于,所述步骤S2还包括:
每当应用程序正常关闭时,清空应用缓存中的报文数据;每当应用程序异常关闭时,保留应用缓存中的报文数据;
每当应用程序启动时,如果应用缓存不为空,则将应用缓存中的报文数据标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空所述应用缓存。
6.根据权利要求1-5中任一项所述的记录报文数据的方法,其特征在于所述预设导出条件为:应用缓存中的报文数据的数据量达到预设阈值或在预设时长内未发生变化,所述预设阈值的取值范围为20~80KB,所述预设时长的取值范围为5~20min。
7.一种记录报文数据的装置,其特征在于包括:
获取模块,用于获取应用程序生成的报文数据;
缓存模块,用于以单条报文数据为基本压缩元素,对应用程序生成的报文数据逐条进行流式压缩,将每条压缩后的报文数据存入应用缓存;
写入模块,用于每当应用缓存中的报文数据满足预设导出条件时,将应用缓存中的报文数据写入报文文件中,并清除应用缓存中的报文数据。
8.根据权利要求7所述的记录报文数据的装置,其特征在于:所述缓存模块包括应用缓存,所述应用缓存是应用程序通过mmap函数或shm函数向系统程序申请的。
9.根据权利要求7所述的记录报文数据的装置,其特征在于,所述缓存模块用于在进行流式压缩时,每当应用程序生成一条报文数据时,如果当前应用缓存中存有报文数据,则以当前应用缓存中的报文数据为参考数据,对当前应用程序生成的报文数据进行压缩;如果当前应用缓存中没有报文数据,则不参考其它报文数据,对当前应用程序生成的报文数据进行压缩。
10.根据权利要求7所述的记录报文数据的装置,其特征在于:所述缓存模块用于每当应用程序异常关闭时,将应用缓存中的报文数据写入预先建立的与应用缓存对应的映射文件中;每当应用程序启动时,如果所述映射文件不为空,则将映射文件中的报文数据,标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空映射文件。
11.根据权利要求7所述的记录报文数据的装置,其特征在于:所述缓存模块用于每当应用程序正常关闭时,清空应用缓存中的报文数据;每当应用程序异常关闭时,保留应用缓存中的报文数据;每当应用程序启动时,如果应用缓存不为空,则将应用缓存中的报文数据标记为因应用程序异常关闭而丢失的报文数据,写入报文文件中,并清空所述应用缓存。
12.根据权利要求7-11所述的任一项记录报文数据的装置,其特征在于:所述写入模块中设置的预设导出条件为:应用缓存中的报文数据的数据量达到预设阈值或在预设时长内未发生变化,所述预设阈值的取值范围为20~80KB,所述预设时长的取值范围为5~20min。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810563968.3A CN108763108A (zh) | 2018-06-04 | 2018-06-04 | 记录报文数据的装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810563968.3A CN108763108A (zh) | 2018-06-04 | 2018-06-04 | 记录报文数据的装置及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108763108A true CN108763108A (zh) | 2018-11-06 |
Family
ID=64002678
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810563968.3A Pending CN108763108A (zh) | 2018-06-04 | 2018-06-04 | 记录报文数据的装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108763108A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109726181A (zh) * | 2018-12-28 | 2019-05-07 | 北京天融信网络安全技术有限公司 | 一种数据处理方法及数据处理装置 |
CN111324516A (zh) * | 2018-11-29 | 2020-06-23 | 北京京东尚科信息技术有限公司 | 自动记录异常事件的方法及装置、存储介质、电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649735A (zh) * | 2016-12-23 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 一种记录日志数据的方法和装置 |
US20170317989A1 (en) * | 2016-02-04 | 2017-11-02 | International Business Machines Corporation | Efficient sensor data delivery |
-
2018
- 2018-06-04 CN CN201810563968.3A patent/CN108763108A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170317989A1 (en) * | 2016-02-04 | 2017-11-02 | International Business Machines Corporation | Efficient sensor data delivery |
CN106649735A (zh) * | 2016-12-23 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 一种记录日志数据的方法和装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111324516A (zh) * | 2018-11-29 | 2020-06-23 | 北京京东尚科信息技术有限公司 | 自动记录异常事件的方法及装置、存储介质、电子设备 |
CN109726181A (zh) * | 2018-12-28 | 2019-05-07 | 北京天融信网络安全技术有限公司 | 一种数据处理方法及数据处理装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104268055B (zh) | 一种程序异常的监控方法和装置 | |
CN101430657B (zh) | 一种连续数据保护方法 | |
CN107395665A (zh) | 一种区块链业务受理及业务共识方法及装置 | |
CN106649735A (zh) | 一种记录日志数据的方法和装置 | |
CN103092687B (zh) | 一种应用程序管理装置和方法 | |
CN108763108A (zh) | 记录报文数据的装置及方法 | |
CN106919471A (zh) | 用于快照建立的方法和系统 | |
CN106407224A (zh) | 一种键值存储系统中文件压实的方法和装置 | |
CN109428913A (zh) | 一种存储扩容方法及装置 | |
CN109710185A (zh) | 数据处理方法及装置 | |
CN107623642A (zh) | 一种消息流量控制方法及装置 | |
CN108563929A (zh) | 一种仅在涉密区域生成水印的方法、系统、装置及介质 | |
CN106020722A (zh) | 一种云存储系统的重复数据去重方法、装置及系统 | |
CN107135234A (zh) | 一种数据流量监听控制的方法和装置 | |
CN106021027B (zh) | 终端数据处理方法和系统 | |
CN110532294A (zh) | 话单合并方法、装置、设备及计算机可读存储介质 | |
CN107871079A (zh) | 一种可疑进程检测方法、装置、设备及存储介质 | |
CN105446848B (zh) | 电子设备的数据处理性能的测试方法及装置 | |
CN103744751B (zh) | 存储设备配置信息连续优化备份系统及其使用方法 | |
CN112632070B (zh) | 海量多元化复杂航天器仿真数据的存储复盘方法和装置 | |
CN105068760B (zh) | 数据存储方法、数据存储装置和存储设备 | |
CN109521969A (zh) | 一种固态硬盘数据回收方法、装置和计算机可读存储介质 | |
CN102982288B (zh) | 在便携式终端中执行数据的加密和解密的设备和方法 | |
CN108287761A (zh) | 内存回收方法及装置、终端设备及计算机可读存储介质 | |
CN106254806A (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 | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20181106 |