CN111400125A - Java进程的内存溢出监控方法、装置、设备及存储介质 - Google Patents
Java进程的内存溢出监控方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111400125A CN111400125A CN202010090267.XA CN202010090267A CN111400125A CN 111400125 A CN111400125 A CN 111400125A CN 202010090267 A CN202010090267 A CN 202010090267A CN 111400125 A CN111400125 A CN 111400125A
- Authority
- CN
- China
- Prior art keywords
- log
- target
- java process
- matching
- memory overflow
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3037—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1438—Restarting or rejuvenating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
Abstract
本申请实施例属于软件监控领域,涉及JAVA进程的内存溢出监控方法,一种JAVA进程的内存溢出监控方法,包括:从存储的日志文件中,定时获取待检测的Java进程对应的日志,作为目标日志,其中,每条目标日志对应一条日志内容;对日志内容进行解析,将解析结果与预设的异常字符串进行匹配处理,得到匹配结果;若匹配结果为匹配成功,则目标日志存在内存溢出,则创建待检测的Java进程对应的备份文件,并重启待检测的Java进程。本申请还提供一种JAVA进程的内存溢出监控装置、计算机设备及存储介质。本申请实现了对JAVA进程进行监控,智能判断JAVA进程是否存在内存溢出异常,提高了JAVA进程监控效率。
Description
技术领域
本申请涉及软件监控领域,尤其涉及JAVA进程的内存溢出监控方法、装置、设备及存储介质。
背景技术
内存泄露是指:用动态存储分配函数动态开辟的空间,在使用完毕后未释放,导致该内存单元一直被占据,无法被回收。存在内存泄漏问题的程序,一般表现方式是:该程序运行时间越长,占用内存越多,随着程序运行时间越来越长,就会导致内存泄露越来越严重,最后导致这个程序出现内存溢出(Out of Memory,简称OOM),使得服务无法正常运行。
在Java进程出现内存溢出异常时,若未及时检测到内存溢出的异常,将导致应用程序无法正常使用。尤其是在集群环境中,每个节点服务器都部署有一个或多个Java进程,在出现内存溢出异常时,会对生产环境造成重大影响。
当前,解决这种Java进程内存溢出异常,主要是通过脚本进行定时重启,但这种方式在定时时间间隔较长时,若出现内存溢出异常,将会在较长时间段内影响生产环境的正常运行,在定时时间间隔较短时,重启频率过高,且对生产环境也带来一定影响,如何实现高效的进行Java进程内存溢出异常监控,成了一个亟待解决的技术难题。
发明内容
本申请实施例的目的在于提出一种JAVA进程的内存溢出监控方法,能够实现对Java进程实时监控,检测JAVA进程是否存在内存溢出的异常,提高Java进程的内存溢出异常监控的效率。
为了解决上述技术问题,本申请实施例提供一种JAVA进程的内存溢出监控方法,包括:
从存储的日志文件中,定时获取待检测的Java进程对应的日志,作为目标日志,其中,每条所述目标日志对应一条日志内容;
对所述日志内容进行解析,将解析结果与预设的异常字符串进行匹配处理,得到匹配结果;
若所述匹配结果为匹配成功,则所述目标日志存在内存溢出,创建所述待检测的Java进程对应的备份文件,并重启所述待检测的Java进程。
进一步的,所述从存储的日志文件中,定时获取待检测的Java进程对应的日志,作为目标日志包括:
采用预设的定时任务脚本,定时获取所述待检测的Java进程的进程ID,作为目标ID;
从所述日志文件中,按照当前时间点由近到远的顺序,读取预设阈值数量的日志,作为待筛选日志;
检测所述待筛选日志中是否包含所述目标ID,得到检测结果;
若所述检测结果为所述待筛选日志中包含所述目标ID,则获取包含所述目标ID的待筛选日志,作为所述目标日志。
进一步的,所述对所述日志内容进行解析,将解析结果与预设的异常字符串进行匹配处理,得到匹配结果包括:
获取所述预设的异常字符串,作为基础字符串;
对所述日志内容进行解析,得到所述日志内容的字符串,作为目标字符串;
采用字符串匹配的方式,对所述目标字符串与所述基础字符串进行字符串匹配,得到所述匹配结果。
进一步的,所述采用字符串匹配的方式,对所述目标字符串与所述基础字符串进行字符串匹配,得到所述匹配结果包括:
依次将所述目标字符串和所述基础字符串的所有字符分别放入字符集X和字符集Y中,得到X={x1,x2,...,xn}和Y={y1,y2,...,ym},其中,n为所述目标字符串中包含的字符的总数,m所述基础字符串中包含的字符的总数,n和m为正整数,且n≥m≥1;
将所述字符集X任意从字符xi到字符xi+m-1作为一个字符集,得到n-m+1个所述字符集,其中,xi为字符集X中的第i个字符,i为正整数,且i≤n-m+1;
将n-m+1个所述字符集分别与所述字符集Y进行匹配,若存在至少一个与所述字符Y相同的所述字符集,则匹配结果为匹配成功。
进一步的,所述若所述匹配结果为匹配成功,则所述目标日志存在内存溢出,创建所述待检测的Java进程对应的备份文件,并重启所述待检测的Java进程包括:
以预设的统一命名的形式,保存所述存储的日志文件。
进一步的,在所述若所述匹配结果为匹配成功,则所述目标日志存在内存溢出,则创建所述待检测的Java进程对应的备份文件,并重启所述待检测的Java进程之后,所述方法还包括:
获取所述Java进程ID对应的管理邮箱;
向所述管理邮箱发送所述目标日志存在内存溢出的邮件。
为解决上述技术问题,本发明采用的一个技术方案是:提供一种JAVA进程的内存溢出监控装置,包括:
目标日志获取模块,用于从存储的日志文件中,定时获取待检测的Java进程对应的日志,作为目标日志,其中,每条所述目标日志对应一条日志内容;
内存溢出检测模块,用于对所述日志内容进行解析,将解析结果与预设的异常字符串进行匹配处理,得到匹配结果;
内存溢出处理模块,用于若所述匹配结果为匹配成功,则所述目标日志存在内存溢出,创建所述待检测的Java进程对应的备份文件,并重启所述待检测的Java进程。
进一步的,所述目标日志获取模块包括:
进程ID获取单元,用于采用预设的定时任务脚本,定时获取所述待检测的Java进程的进程ID;
待筛选日志单元,用于从所述日志文件中,按照当前时间点由近到远的顺序,读取预设阈值数量的日志,作为待筛选日志;
检测结果单元,用于检测所述待筛选日志中是否包含所述目标ID,得到检测结果;
目标日志单元,用于若所述检测结果为所述待筛选日志中包含所述目标ID,则获取包含所述目标ID的待筛选日志作为所述目标日志。
为解决上述技术问题,本发明采用的一个技术方案是:提供一种计算机设备,包括,一个或多个处理器;存储器,用于存储一个或多个程序,使得一个或多个处理器实现上述任意一项所述的一种JAVA进程的内存溢出监控方案。
为解决上述技术问题,本发明采用的一个技术方案是:一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一项所述的一种JAVA进程的内存溢出监控方案。
以上方案中的一种JAVA进程的内存溢出监控方法,将从存储的日志文件中,定时获取待检测的Java进程对应的日志,作为目标日志,并对日志内容进行解析,将解析结果与预设的异常字符串进行匹配处理,得到匹配结果;若匹配结果为匹配成功,则目标日志存在内存溢出,则创建待检测的Java进程对应的备份文件,并重启待检测的Java进程。通过对日志内容的解析,并对解析结果与预设的异常字符串进行匹配处理,判断Java进程中是否存在内存异常,实现了对Java进程内存溢出异常的监控,解决了现有技术需要频繁重启,减少系统恢复时间,从而实现了提高Java进程的内存溢出异常监控的效率。
附图说明
为了更清楚地说明本申请中的方案,下面将对本申请实施例描述中所需要使用的附图作一个简单介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的JAVA进程的内存溢出监控方法的应用环境示意图;
图2根据本申请实施例提供的JAVA进程的内存溢出监控方法的一实现流程图;
图3是本申请实施例提供的JAVA进程的内存溢出监控方法中步骤S1的一实现流程图;
图4是本申请实施例提供的JAVA进程的内存溢出监控方法中步骤S2的一实现流程图;
图5是本申请实施例提供的JAVA进程的内存溢出监控方法中步骤S23的一实现流程图;
图6是本申请实施例提供的JAVA进程的内存溢出监控方法中步骤S3之后的一实现流程图;
图7是本申请实施例提供的JAVA进程的内存溢出监控装置示意图;
图8是本申请实施例提供的计算机设备的示意图。
具体实施方式
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同;本文中在申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请;本申请的说明书和权利要求书及上述附图说明中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。本申请的说明书和权利要求书或上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
为了使本技术领域的人员更好地理解本申请方案,下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述。
下面结合附图和实施方式对本发明进行详细说明。
请参阅图1,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如网页浏览器应用、搜索类应用、即时通信工具等。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103上显示的页面提供支持的后台服务器。
需要说明的是,本申请实施例所提供的一种JAVA进程的内存溢出监控方法一般由服务器执行,相应地,一种JAVA进程的内存溢出监控装置一般设置于服务器中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
请参阅图2,图2示出了JAVA进程的内存溢出监控方法的一种具体实施方式。
需注意的是,若有实质上相同的结果,本发明的方法并不以图2所示的流程顺序为限,该方法包括如下步骤:
S1:从存储的日志文件中,定时获取待检测的Java进程对应的日志,作为目标日志,其中,每条目标日志对应一条日志内容。
具体地,集群服务器部署有多个节点服务器,每个节点服务器中部署有至少一个待检测的Java进程,服务端实时采集每个节点服务器产生的日志,并将该日志存储到服务端的预设路径的日志文件中,并通过预设的日志采集方式,定时从存储的日志文件中,获取待检测的Java进程对应的日志,作为目标日志,以使后续通过该日志文件对待检测的Java进程的状态进行分析。
其中,预设的日志采集方式具体可以为采用脚本的方式,通过预设的定时脚本,根据预设的时间间隔,从存储的日志文件中,获取目标日志。
其中,预设的定时脚本具体包括但不限于:VBScript(Microsoft Visual BasicScript)、Edition Shell脚本、JavaScript、Lua、ActionScript等。
优选地,预设的定时脚本的脚本类型为shell脚本,采用shell脚本比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令,将许多指令汇整写一起,让使用者很容易地就能够一个操作执行多个命令,提供了数组,循环,条件以及逻辑判断等重要功能,让使用者可以直接以shell来写程序,而不必使用类似C程序语言等传统程序编写的语法。
其中,预设的时间间隔可以根据实际的情况而定,例如根据需要运行的Java进程的数量、电脑配置性能等,预设时间可以设置为5分钟、10分钟等,脚本在预设的时间内,根据当前的Java进程的进度自动截取Java进程的目标日志,例如每隔五分钟,shell脚本自动截取近200行Java进程的目标日志,保存在本地文件,主要用于检测日志中是否含有错误日志,从而进行下一步的操作。
其中,进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。待检测的Java进程是指集群服务器部署有多个节点服务器,每个节点服务器处于运行状态时,至少存在一个待检测的Java进程,可以通过对Java进程的相关信息,对是否会出现内存溢出的异常情况进行监控。
需要说明的是,本实施例中,待检测的Java进程部署于生产环境,在存在内存溢出的异常时,待检测的Java进程将处于假死状态,将无法为生产环境提供正常的服务,因而,需要定时对待检测的Java进程进行内存溢出的异常检测,确保待检测的Java进程处于正常激活状态。
S2:对日志内容进行解析,将解析结果与预设的异常字符串进行匹配处理,得到匹配结果。
具体的,通过对日志内容的解析,得到日志内容对应的字符串,通过预设的异常字符串与进行匹配,得到匹配结果。
其中,预设的异常字符串是根据Java进程发生内存溢出异常时,Java进程发送的异常提示进程解析出来的字符串。
具体的,当Java进程发生内存溢出异常时,在Java进程中会出现提示进程发生了内存溢出的异常提示进程;预设的方式是指通过预先设置内存溢出的异常提示进程的字符,然后通过该字符遍寻所获取的目标日志中是否出现完全匹配的字符,进而判断出所获取的目标日志中是否发生了内存溢出的异常,从而得到检测结果。
其中,内存溢出(Out of Memory,OOM)一般是由于内存使用不当,如对该释放的内存资源没有释放,导致其一直不能被再次使用而使计算机内存被耗尽的现象。
在本实施例中,待检测的JAVA进程需要保持激活状态,因而,随着该待检测的JAVA进程的持续运行,内存资源的占用随之增长,服务器自身的内存资源存在上限阈值,在内存资源的占用达到该上限阈值时,将导致内存溢出的异常,出现内存溢出异常时,该导致待检测的JAVA进程无法正常运行。
S3:若匹配结果为匹配成功,则目标日志存在内存溢出,创建待检测的Java进程对应的备份文件,并重启待检测的Java进程。
具体的,检测结果存在内存溢出的情况,在存在内存溢出的异常时,待检测的Java进程将处于假死状态,将无法为生产环境提供正常的服务,因而,需要创建备份文件,以便后期快速分析问题的根源,且待检测的Java进程将处于假死状态,需要将Java进程重启。
其中,备份文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到备份文件中。备份文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专用工具软件打开,比如使用WinDbg打开。
其中,创建备份文件包括但不限于:内嵌代码创建,Windbg工具命令创建,任务管理器创建,脚本创建等。
优选的,本实施例采用脚本创建备份文件。具体的,在预设的时间内,让脚本程序不断的去抓包;考虑到抓包的结果可能太大分析工具无法打开分析,所以每个数据包大小限制约为100M;并设定了前一个包抓完,间隔5秒,开始进行下一轮抓包;每天的数据包放在/data下以日期命名的目录之中,并进行压缩存储,如:/data/2010-03-0,备份包的命令格式为:yyyy-mm-dd@hhmmss-hhmmss.pcap.gz;其中yyyy-mm-dd表示日期,第一个hhmmss表示开始抓包的时分秒,第二个hhmmss表示抓包结束的时分秒。为了保证抓包主程序能健康运行,通过crond程序来调度monitor_备份.sh;监控抓包主程序是事正常运行,如果没有运行,则启动它。
在本实施例中,将从存储的日志文件中,定时获取待检测的Java进程对应的日志,作为目标日志,并对日志内容进行解析,将解析结果与预设的异常字符串进行匹配处理,得到匹配结果;若匹配结果为匹配成功,则目标日志存在内存溢出,则创建待检测的Java进程对应的备份文件,并重启待检测的Java进程。通过对日志内容的解析,并对解析结果与预设的异常字符串进行匹配处理,判断Java进程中是否存在内存异常,实现了对Java进程内存溢出异常的监控,解决了现有技术需要频繁重启,减少系统恢复时间,从而实现了提高Java进程的内存溢出异常监控的效率。
请参阅图3,图3示出了步骤S1的一种具体实施方式,步骤S1中,从存储的日志文件中,定时获取待检测的Java进程对应的日志,作为目标日志,其中,每条目标日志对应一条日志内容的具体实现过程,详叙如下:
S11:采用预设的定时任务脚本,定时获取待检测的Java进程的进程ID,作为目标ID。
具体的,在达到预设的时间之时,通过调用待检测的Java进程的ID,从而获取待检测的Java进程的ID,便于代码检测到错误时可精准的释放进程。如果匹配出现多个进程,会导致释放错进程,导致重复重启已存在的进程,无法达到释放进程的预期。
S12:从日志文件中,按照当前时间点由近到远的顺序,读取预设阈值数量的日志,作为待筛选日志。
具体的,日志文件在通过时间长短储存在计算机设备中,通过按照时间的近到远的顺序,读取预设阈值数量的日志,作为后续所用到的待筛选日志。
其中,预设阈值根据计算机设备性能、配置等等设定,预设阈值可以是100行、200行、500行等等,优选的,预设阈值为200行。
S13:检测待筛选日志中是否包含目标ID,得到检测结果。
具体的,由于待筛选日志中,存在各种不同ID的进程,而本申请实施例主要针对的是Java进程对应的日志,所以根据目标ID,去检测待筛选日志中包含了哪一些目标ID的日志,得到检测结果,从而方便下一步获取Java进程的日志,进而对Java进程进行异常检测。
S14:若检测结果为待筛选日志中包含目标ID,则获取包含目标ID的待筛选日志,作为目标日志。
具体的,根据匹配的结果,将待筛选日志中所有的Java进程对应的日志筛选出来,将这些筛选出来的日志作为最终目标日志。
本申请实施例中,预设的定时任务脚本,定时获取待检测的Java进程的进程ID,并将获取待筛选日志,根据ID匹配的结果,获取Java进程对应的日志,作为目标日志,能够精准的获取到预设时间内的Java进程对应的日志,从而有利于后续步骤对Java进程进行监控。
请参阅图4,图4示出了步骤S2的一种具体实施方式,步骤S2中,对日志内容进行解析,将解析结果与预设的异常字符串进行匹配处理,得到匹配结果的具体实现过程,详叙如下:
S21:获取预设的异常字符串,作为基础字符串。
具体的,在Java进程存在内存异常的情况时,Java进程就会接收到内存溢出的提示进程,根据对该提示进程进行解析,得到预设的异常字符串,并将其作为基础字符串。
S22:对日志内容进行解析,得到日志内容的字符串,作为目标字符串。
具体的,获取到的日志内容是以进程的形式存在,要将日志内容与预设的异常字符串进行匹配,则需要对日志内容进行解析,将日志内容由进程的形式解析成字符串的形式,这样日志内容才能够与预设的字符串进行匹配,并将得到日志内容的字符串作为目标字符串。
S23:采用字符串匹配的方式,对目标字符串与基础字符串进行字符串匹配,得到匹配结果。
具体的,通过所设置的异常字符于目标字符的字符串一一对比,检测目标字符的字符串中是否存在于异常字符完全一致的字符,从而判断目标字符是否存在内存溢出的异常。
其中,字符串匹配算法包括但不限于:暴风算法(Brute Force)、哈希检索(Robin-Karp)、克努特-莫里斯-普拉特操作(简称KMP算法)、Boyer-Moore算法(简称BM算法)、Sunday算法等。
优选的,本申请实施例采用Boyer-Moore算法进行字符串匹配。具体过程可参考步骤S231至步骤S233的描述,为避免重复,此处不再赘述。
本申请实施例中,通过获取预设的异常字符串与日志内容解析出来的字符串,进行字符串匹配,得到匹配结果,能够将复杂的Java进程解析成简单的字符串,并通过字符串之间的匹配,实现对Java进程的监控,提升了Java进程内存溢出异常的监控效率。
请参阅图5,图5示出了步骤S23的一种具体实施方式,步骤S23中,若匹配结果为匹配成功,则目标日志存在内存溢出,则创建待检测的Java进程对应的备份文件,并重启待检测的Java进程的具体实现过程,详叙如下:
S231:依次将目标字符串和基础字符串的所有字符分别放入字符集X和字符集Y中,得到X={x1,x2,...,xn}和Y={y1,y2,...,ym},其中,n为目标字符串中包含的字符的总数,m基础字符串中包含的字符的总数,n和m为正整数,且n≥m≥1。
具体的,将目标字符串和基础字符串的目标字符串和基础字符串案顺序分别放入不同的字符集中,得到两个字符集。
在一具体实施例中,为了简要说明,假设目标字符串为SELOMSAOAENG,基础字符串LOMSAOAE,依次将目标字符串和基础字符串的所有字符分别放入字符集X和字符集Y中,得到X={S,E,L,O,M,S,A,O,A,E,N,G}和Y={L,O,M,S,A,O,A,E},此时的n为12,m为8。
S232:将字符集X任意从字符xi到字符xi+m-1作为一个字符集,得到n-m+1个字符集,其中,xi为字符集X中的第i个字符,i为正整数,且i≤n-m+1。
在一具体实施例中,根据步骤S231的实施例,将字符集X任意从字符xi到字符xi+m-1作为一个字符集,得到5个字符集,分别为X1={S,E,L,O,M,S,A,O},X2={E,L,O,M,S,A,O,A},X3={L,O,M,S,A,O,A,E},X4={O,M,S,A,O,A,E,N},X5={M,S,A,O,A,E,N,G}。
S233:将n-m+1个字符集分别与字符集Y进行匹配,若存在至少一个与字符Y相同的字符集,则匹配结果为匹配成功。
目标字符串对应的字符集中含有和基础字符串对应的字符集,说明Java进程含有内存溢出的提示进程。
在一具体实施例中,根据步骤S231的实施例,通过将字符集X1、X2、X3、X4和X5分别与字符集Y进行匹配,可以得出字符集X3和字符集Y完全匹配,则若存在一个与字符Y相同的字符集,即匹配结果为匹配成功。
本实施例中,通过将目标字符串和基础字符串组成的字符集进行匹配,得到匹配结果,便于检测出Java进程中是否含有内存溢出的提示进程,进而实现对Java进程内存溢出异常进行监控。
在一实施例中,步骤S3中若匹配结果为匹配成功,则目标日志存在内存溢出,则创建待检测的Java进程对应的备份文件,并重启待检测的Java进程,具体过程如下:
以预设的统一命名的形式,保存存储的日志文件。
其中,预设的统一命名的形式可以是日期命名的形式、Java进程ID命名的形式和储存大小命名形式等等。
优选的,以日期命名的形式,保存所述存储的日志文件,便于后期追溯错误问题,快速分析错误问题所在,保存文件以日期命名,便于快速找到保存的日志文件。
本实施例中,以预设的统一命名的形式,保存存储的日志文件,便于后期追溯Java进程错误的问题,快速分析错误问题所在,提高解决Java进程异常的效率。
请参阅图6,图6示出了步骤S3之后对的一种具体实施方式,详叙如下:
S4:获取Java进程ID对应的管理邮箱。
具体的,Java进程ID存在着对应的管理邮箱,通过获取获取Java进程ID对应的管理邮箱,便于向管理邮箱发送Java进程存在内存溢出遗产的邮件。
S5:向管理邮箱发送目标日志存在内存溢出的邮件。
其中,邮件内容包括Java进程发生内存溢出的时间、备份包以及保存的日志文件,以便Java用户能够在后期追溯Java进程发生内存溢出的原因,以及后期分析是哪个进程导致出现问题和进程的内存使用情况。
其中,通过配置sendmail,通过Linux系统自带的mail命令即可对管理邮箱(比如qq邮箱)发送邮件,使得能够获知Java进程出现内存溢出的异常,告知该流程已经执行完成。
本实施例中,通过获取Java进程ID对应的管理邮箱,并向管理邮箱发送目标日志存在内存溢出的邮件,通过以邮件的形式通知Java用户,以便Java用户能够在后期追溯Java进程发生内存溢出的原因,以及后期分析是哪个进程导致出现问题和进程的内存使用情况,以便排查Java进程出现内存溢出异常的情况。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。
请参考图7,作为对上述图2所示方法的实现,本申请提供了一种基于JAVA进程的内存溢出监控装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图7所示,本实施例的JAVA进程的内存溢出监控装置包括:目标日志获取模块61、内存溢出检测模块62及内存溢出处理模块63,其中:
目标日志获取模块61,用于从存储的日志文件中,定时获取待检测的Java进程对应的日志,作为目标日志,其中,每条目标日志对应一条日志内容;
内存溢出检测模块62,用于对日志内容进行解析,将解析结果与预设的异常字符串进行匹配处理,得到匹配结果;
内存溢出处理模块63,用于若匹配结果为匹配成功,则目标日志存在内存溢出,创建待检测的Java进程对应的备份文件,并重启待检测的Java进程。
进一步的,目标日志获取模块61包括:
进程ID获取单元,用于采用预设的定时任务脚本,定时获取待检测的Java进程的进程ID;
待筛选日志单元,用于从日志文件中,按照当前时间点由近到远的顺序,读取预设阈值数量的日志,作为待筛选日志;
检测结果单元,用于检测待筛选日志中是否包含目标ID,得到检测结果;
目标日志单元,用于若检测结果为待筛选日志中包含目标ID,则获取包含目标ID的待筛选日志作为目标日志。
进一步的,内存溢出检测模块62包括:
基础字符串获取单元,用于获取预设的异常字符串,作为基础字符串;
目标字符串确定单元,用于对日志内容进行解析,得到日志内容的字符串,作为目标字符串;
匹配结果确定单元,用于采用字符串匹配的方式,对目标字符串与基础字符串进行字符串匹配,得到匹配结果。
进一步的,匹配结果确定单元包括:
字符集设定子单元,用于依次将目标字符串和基础字符串的所有字符分别放入字符集X和字符集Y中,得到X={x1,x2,...,xn}和Y={y1,y2,...,ym},其中,n为目标字符串中包含的字符的总数,m基础字符串中包含的字符的总数,n和m为正整数,且n≥m≥1;
字符集获取子单元,用于将字符集X任意从字符xi到字符xi+m-1作为一个字符集,得到n-m+1个字符集,其中,xi为字符集X中的第i个字符,i为正整数,且i≤n-m+1;
字符集匹配子单元,用于将n-m+1个字符集分别与字符集Y进行匹配,若存在至少一个与字符Y相同的字符集,则匹配结果为匹配成功。
进一步的,内存溢出处理模块63包括:
日志文件保存单元,用于以预设的统一命名的形式,保存存储的日志文件。
进一步的,本实施例的JAVA进程的内存溢出监控装置还包括管理邮箱获取模块和邮件发送模块,其中:
管理邮箱获取模块,用于获取Java进程ID对应的管理邮箱;
邮件发送模块,用于向管理邮箱发送目标日志存在内存溢出的邮件。
为解决上述技术问题,本申请实施例还提供计算机设备。具体请参阅图8,图8为本实施例计算机设备基本结构框图。
计算机设备7包括通过系统总线相互通信连接存储器71、处理器72、网络接口73。需要指出的是,图中仅示出了具有三种组件存储器71、处理器72、网络接口73的计算机设备7,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。其中,本技术领域技术人员可以理解,这里的计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。计算机设备可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
存储器71至少包括一种类型的可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器71可以是计算机设备7的内部存储单元,例如该计算机设备7的硬盘或内存。在另一些实施例中,存储器71也可以是计算机设备7的外部存储设备,例如该计算机设备7上配备的插接式硬盘,智能存储卡(SmartMedia Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器71还可以既包括计算机设备7的内部存储单元也包括其外部存储设备。本实施例中,存储器71通常用于存储安装于计算机设备7的操作系统和各类应用软件,例如JAVA进程的内存溢出监控方法的程序代码等。此外,存储器71还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器72在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器72通常用于控制计算机设备7的总体操作。本实施例中,处理器72用于运行存储器71中存储的程序代码或者处理数据,例如运行一种JAVA进程的内存溢出监控方法的程序代码。
网络接口73可包括无线网络接口或有线网络接口,该网络接口73通常用于在计算机设备7与其他电子设备之间建立通信连接。
本申请还提供了另一种实施方式,即提供一种计算机可读存储介质,计算机可读存储介质存储有服务器维护程序,服务器维护程序可被至少一个处理器执行,以使至少一个处理器执行如上述的一种JAVA进程的内存溢出监控方法的步骤。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例的方法。
显然,以上所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例,附图中给出了本申请的较佳实施例,但并不限制本申请的专利范围。本申请可以以许多不同的形式来实现,相反地,提供这些实施例的目的是使对本申请的公开内容的理解更加透彻全面。尽管参照前述实施例对本申请进行了详细的说明,对于本领域的技术人员来而言,其依然可以对前述各具体实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等效替换。凡是利用本申请说明书及附图内容所做的等效结构,直接或间接运用在其他相关的技术领域,均同理在本申请专利保护范围之内。
Claims (10)
1.一种JAVA进程的内存溢出监控方法,其特征在于,包括:
从存储的日志文件中,定时获取待检测的Java进程对应的日志,作为目标日志,其中,每条所述目标日志对应一条日志内容;
对所述日志内容进行解析,将解析结果与预设的异常字符串进行匹配处理,得到匹配结果;
若所述匹配结果为匹配成功,则所述目标日志存在内存溢出,创建所述待检测的Java进程对应的备份文件,并重启所述待检测的Java进程。
2.根据权利要求1所述的JAVA进程的内存溢出监控方法,其特征在于,所述从存储的日志文件中,定时获取待检测的Java进程对应的日志,作为目标日志包括:
采用预设的定时任务脚本,定时获取所述待检测的Java进程的进程ID,作为目标ID;
从所述日志文件中,按照当前时间点由近到远的顺序,读取预设阈值数量的日志,作为待筛选日志;
检测所述待筛选日志中是否包含所述目标ID,得到检测结果;
若所述检测结果为所述待筛选日志中包含所述目标ID,则获取包含所述目标ID的待筛选日志,作为所述目标日志。
3.根据权利要求1所述的JAVA进程的内存溢出监控方法,其特征在于,所述对所述日志内容进行解析,将解析结果与预设的异常字符串进行匹配处理,得到匹配结果包括:
获取所述预设的异常字符串,作为基础字符串;
对所述日志内容进行解析,得到所述日志内容的字符串,作为目标字符串;
采用字符串匹配的方式,对所述目标字符串与所述基础字符串进行字符串匹配,得到所述匹配结果。
4.根据权利要求3所述的JAVA进程的内存溢出监控方法,其特征在于,所述采用字符串匹配的方式,对所述目标字符串与所述基础字符串进行字符串匹配,得到所述匹配结果包括:
依次将所述目标字符串和所述基础字符串的所有字符分别放入字符集X和字符集Y中,得到X={x1,x2,...,xn}和Y={y1,y2,...,ym},其中,n为所述目标字符串中包含的字符的总数,m所述基础字符串中包含的字符的总数,n和m为正整数,且n≥m≥1;
将所述字符集X任意从字符xi到字符xi+m-1作为一个字符集,得到n-m+1个所述字符集,其中,xi为字符集X中的第i个字符,i为正整数,且i≤n-m+1;
将n-m+1个所述字符集分别与所述字符集Y进行匹配,若存在至少一个与所述字符Y相同的所述字符集,则匹配结果为匹配成功。
5.根据权利要求1所述的JAVA进程的内存溢出监控方法,其特征在于,所述若所述匹配结果为匹配成功,则所述目标日志存在内存溢出,创建所述待检测的Java进程对应的备份文件,并重启所述待检测的Java进程包括:
以预设的统一命名的形式,保存所述存储的日志文件。
6.根据权利要求1至5任一项所述的JAVA进程的内存溢出监控方法,其特征在于,在所述若所述匹配结果为匹配成功,则所述目标日志存在内存溢出,则创建所述待检测的Java进程对应的备份文件,并重启所述待检测的Java进程之后,所述方法还包括:
获取所述Java进程ID对应的管理邮箱;
向所述管理邮箱发送所述目标日志存在内存溢出的邮件。
7.一种JAVA进程的内存溢出监控装置,其特征在于,包括:
目标日志获取模块,用于从存储的日志文件中,定时获取待检测的Java进程对应的日志,作为目标日志,其中,每条所述目标日志对应一条日志内容;
内存溢出检测模块,用于对所述日志内容进行解析,将解析结果与预设的异常字符串进行匹配处理,得到匹配结果;
内存溢出处理模块,用于若所述匹配结果为匹配成功,则所述目标日志存在内存溢出,创建所述待检测的Java进程对应的备份文件,并重启所述待检测的Java进程。
8.根据权利要求7所述的JAVA进程的内存溢出监控装置,其特征在于,所述目标日志获取模块包括:
进程ID获取单元,用于采用预设的定时任务脚本,定时获取所述待检测的Java进程的进程ID;
待筛选日志单元,用于从所述日志文件中,按照当前时间点由近到远的顺序,读取预设阈值数量的日志,作为待筛选日志;
检测结果单元,用于检测所述待筛选日志中是否包含所述目标ID,得到检测结果;
目标日志单元,用于若所述检测结果为所述待筛选日志中包含所述目标ID,则获取包含所述目标ID的待筛选日志作为所述目标日志。
9.一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至6中任一项所述的JAVA进程的内存溢出监控方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的JAVA进程的内存溢出监控方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010090267.XA CN111400125A (zh) | 2020-02-13 | 2020-02-13 | Java进程的内存溢出监控方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010090267.XA CN111400125A (zh) | 2020-02-13 | 2020-02-13 | Java进程的内存溢出监控方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111400125A true CN111400125A (zh) | 2020-07-10 |
Family
ID=71434230
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010090267.XA Pending CN111400125A (zh) | 2020-02-13 | 2020-02-13 | Java进程的内存溢出监控方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111400125A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110941537A (zh) * | 2019-12-02 | 2020-03-31 | 成都安恒信息技术有限公司 | 一种基于行为状态的进程检测方法及检测装置 |
CN112035289A (zh) * | 2020-09-03 | 2020-12-04 | 浙江大华技术股份有限公司 | 一种数据块泄漏的确定方法及装置、存储介质、电子装置 |
CN112131090A (zh) * | 2020-09-30 | 2020-12-25 | 北京北信源软件股份有限公司 | 业务系统性能监控方法及装置、设备及介质 |
CN112925754A (zh) * | 2021-03-31 | 2021-06-08 | 四川虹美智能科技有限公司 | 文件描述符溢出上报方法、装置及计算机可读介质 |
CN113064762A (zh) * | 2021-04-09 | 2021-07-02 | 上海新炬网络信息技术股份有限公司 | 基于多样探测的服务自恢复方法 |
CN113254294A (zh) * | 2021-06-02 | 2021-08-13 | 广州绿怡信息科技有限公司 | 设备重启检测方法及装置 |
-
2020
- 2020-02-13 CN CN202010090267.XA patent/CN111400125A/zh active Pending
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110941537A (zh) * | 2019-12-02 | 2020-03-31 | 成都安恒信息技术有限公司 | 一种基于行为状态的进程检测方法及检测装置 |
CN112035289A (zh) * | 2020-09-03 | 2020-12-04 | 浙江大华技术股份有限公司 | 一种数据块泄漏的确定方法及装置、存储介质、电子装置 |
CN112131090A (zh) * | 2020-09-30 | 2020-12-25 | 北京北信源软件股份有限公司 | 业务系统性能监控方法及装置、设备及介质 |
CN112131090B (zh) * | 2020-09-30 | 2024-02-23 | 北京北信源软件股份有限公司 | 业务系统性能监控方法及装置、设备及介质 |
CN112925754A (zh) * | 2021-03-31 | 2021-06-08 | 四川虹美智能科技有限公司 | 文件描述符溢出上报方法、装置及计算机可读介质 |
CN112925754B (zh) * | 2021-03-31 | 2023-04-07 | 四川虹美智能科技有限公司 | 文件描述符溢出上报方法、装置及计算机可读介质 |
CN113064762A (zh) * | 2021-04-09 | 2021-07-02 | 上海新炬网络信息技术股份有限公司 | 基于多样探测的服务自恢复方法 |
CN113064762B (zh) * | 2021-04-09 | 2024-02-23 | 上海新炬网络信息技术股份有限公司 | 基于多样探测的服务自恢复方法 |
CN113254294A (zh) * | 2021-06-02 | 2021-08-13 | 广州绿怡信息科技有限公司 | 设备重启检测方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111400125A (zh) | Java进程的内存溢出监控方法、装置、设备及存储介质 | |
CN108108297B (zh) | 自动化测试的方法和装置 | |
CN108399132B (zh) | 一种调度测试方法、装置及存储介质 | |
CN111427803B (zh) | 自动化随机测试方法、装置、计算机设备及介质 | |
CN107506256B (zh) | 一种崩溃数据监控的方法和装置 | |
US20050038832A1 (en) | Application error recovery using solution database | |
CN113312072A (zh) | 配置文件更新方法及装置、电子设备和介质 | |
CN111258913A (zh) | 算法自动测试方法、装置、计算机系统及可读存储介质 | |
CN111698283A (zh) | 分布式集群主机的管控方法、装置、设备及存储介质 | |
CN112199284A (zh) | 程序自动化测试方法及其相应的装置、设备、介质 | |
CN112860282A (zh) | 集群插件的升级方法、装置和服务器 | |
CN112631911A (zh) | 自动化测试方法、装置、计算机设备及存储介质 | |
US8161496B2 (en) | Positive and negative event-based testing | |
CN115080114B (zh) | 应用程序的移植处理方法、装置和介质 | |
CN110727576A (zh) | 一种web页面测试方法、装置、设备及存储介质 | |
CN112596750B (zh) | 应用测试方法、装置、电子设备及计算机可读存储介质 | |
CN115328764A (zh) | 基于自动化测试的测试代码优化方法及其相关设备 | |
US20180373512A1 (en) | Method and device for simulating synchronous blocking in asynchronous environment, storage medium, server and terminal | |
CN115203304A (zh) | 一种基于定时轮询的批量数据导入方法及相关设备 | |
CN113127029A (zh) | 固件更新方法、装置、电子设备及存储介质 | |
CN115878460A (zh) | 回归测试方法、装置、计算机设备及存储介质 | |
CN113656044B (zh) | 安卓安装包压缩方法、装置、计算机设备及存储介质 | |
CN112650814B (zh) | 基于消息中间件的数据存储方法、装置、设备及存储介质 | |
CN111475322A (zh) | 定位stuck线程的方法、装置、计算机设备及可读存储介质 | |
CN110334905B (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 |