基于多样探测的服务自恢复方法
文献发布时间:2023-06-19 11:42:32
技术领域
本发明涉及一种服务自恢复方法,尤其涉及一种基于多样探测的服务自恢复方法。
背景技术
服务监控并自动恢复是目前业务系统高可用性的基本需求,同时服务状态的巡检工作也是运行维护人员经常需要维护的工作之一。随着业务需求越来越复杂以及并发量的爆发式增长,对服务的可用性要求越来越高,在尽快的恢复业务的同时要提取相关的分析信息,用来进行问题排查,给运行维护人员带来很大的工作压力。使用常规手段显然不能满足目前需求,而且维护的效率较低。综合性的自检测及自动化的执行和信息收集,才是服务自恢复的一个发展方向。
目前运维常用的自监测服务通常单纯通过监控端口,监控服务进程以及监控测试页状态,一旦发现以上监控项监控端口或者监控服务不在线或监控测试页返回异常均采用直接重启的方法去恢复服务,不会保留相关的故障环境信息如网络连接状态以及JAVA服务的相关JVM信息等,给问题排查带来很大的难度。因此,现有技术还有待改进。
发明内容
本发明要解决的技术问题是提供一种基于多样探测的服务自恢复方法,采用服务进程状态及测试页面响应状态码的联合方式去监控服务的可用性,当监控项中的任一项不正常时,保存服务器当前的网络连接状态及JAVA服务的相关虚拟机信息,同时重启服务进行自恢复;在恢复业务的同时保留相关的故障环境信息。
本发明为解决上述技术问题而采用的技术方案是提供一种基于多样探测的服务自恢复方法,包括如下步骤:S1:在被监控服务器预先配置监控脚本;S2:采用服务器自带的定时任务定时自动运行监控脚本;S3:监控脚本通过判断监控项的状态监控服务的可用性,当监控脚本监控到任一监控项异常时,获取并保存故障环境信息后重启服务。
进一步地,所述步骤S3中监控项包括服务进程状态监控和测试页面响应状态监控;通过检测服务进程ID是否存在判断服务进程状态是否在线;通过检测测试页面的返回值判断测试页面响应是否正常。
进一步地,在监控脚本中通过服务名称查询服务进程ID,若返回服务进程ID则说明该服务进程在线,若不返回服务进程ID,则说明该服务进程处于离线的异常状态。
进一步地,在监控脚本中通过CURL命令访问测试页面并获取测试页面的返回值,若获取的返回值正常,则说明测试页面响应正常,服务处于正常状态;若无返回值,则说明测试页面响应异常,服务处于假死无响应的异常状态。
进一步地,所述步骤S1中配置监控脚本时,在监控脚本中定义服务变量、定义测试页面地址。
进一步地,所述故障环境信息包括网络连接状态信息以及与服务相关的Jave虚拟机信息,在监控脚本中通过Net Stat控制台命令,统计网络连接状态信息以及当前连接并发数信息,网络连接状态信息包括路由表、实际的网络连接以及每一个网络接口设备的状态信息。
进一步地,所述Jave虚拟机信息包括Jave堆栈信息和Jave堆内存信息;监控脚本调用Jstack堆栈跟踪工具,根据服务进程ID获取Java堆栈信息,Java堆栈信息生成Java虚拟机当前的线程快照信息,线程快照信息包含每一条线程的堆栈信息;监控脚本调用Jmap堆内存跟踪工具,获取Java进程的内存映射信息或堆内存信息,反映Java堆使用的内存镜像,包括系统信息、虚拟机属性、完整的线程转存储、所有类和对象的状态信息。
本发明对比现有技术有如下的有益效果:本发明提供的基于多样探测的服务自恢复方法,采用CURL页面响应检测和进程在线状态检测与Jstack、Jmap命令的服务故障运行环境信息提取相结合,在监控服务进程和测试页状态的同时,一旦发现配置的监控项不在线或响应返回异常时先通过Jstack、Jmap相关命令把网络连接状态及JAVA服务的相关Java虚拟机信息保存起来的,同时重启服务进行自恢复;在恢复业务的同时保留了程序的故障状态,为后续的故障分析及复盘提供相关信息。
附图说明
图1为本发明实施例中基于多样探测的服务自恢复方法流程图;
图2为本发明实施例中监控脚本实施流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步的描述。
图1为本发明实施例中基于多样探测的服务自恢复方法流程图;图2为本发明实施例中监控脚本实施流程图。
请参见图1,本发明实施例的基于多样探测的服务自恢复方法,包括如下步骤:
S1:在被监控服务器预先配置监控脚本;配置监控脚本时,在监控脚本中定义服务变量、定义测试页面地址;
S2:采用服务器自带的定时任务定时自动运行监控脚本;
S3:监控脚本通过判断监控项的状态监控服务的可用性,当监控脚本监控到任一监控项异常时,获取并保存故障环境信息后重启服务。
请同时参见图2,本发明实施例的基于多样探测的服务自恢复方法,步骤S3中监控项包括服务进程状态监控和测试页面响应状态监控;通过检测服务进程ID是否存在判断服务进程状态是否在线;通过检测测试页面的返回值判断测试页面响应是否正常。
在监控脚本中通过服务名称查询服务进程ID,若返回服务进程ID则说明该服务进程在线,若不返回服务进程ID,则说明该服务进程处于离线的异常状态。
在监控脚本中通过CURL命令访问测试页面并获取测试页面的返回值,若获取的返回值正常,则说明测试页面响应正常,服务处于正常状态;若无返回值,则说明测试页面响应异常,服务处于假死无响应的异常状态。
CURL命令是一个功能强大的网络工具,能通过命令行访问测试URL,作用是发出网络请求,然后得到和提取数据,显示在标准输出上。在脚本中使用CURL测试网页返回值,可以很方便的实现定时监控Web服务的运行状态,排除服务处理假死无响应的状态。还可以用CURL命令构造Http Request报文,且可以解析服务器返回的Http Response,额外还支持Cookie特性,能完成Web浏览器的基本功能,同时还支持HTTPS/FTP/FTPS/TELNET/LDAP等协议。它能够通过Http、Ftp等方式下载文件,也能够上传文件。
具体地,步骤S3中的故障环境信息包括网络连接状态信息以及与服务相关的Jave虚拟机信息,在监控脚本中通过Net Stat控制台命令,统计网络连接状态信息以及当前连接并发数信息,网络连接状态信息包括路由表、实际的网络连接以及每一个网络接口设备的状态信息。
Net Stat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Net Stat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。在脚本中使用Net Stat打印统计网络连接状态、当前连接并发数等信息为后续的问题排查提供网络连接情况。
Jave虚拟机信息包括Jave堆栈信息和Jave堆内存信息;监控脚本调用Jstack堆栈跟踪工具,根据服务进程ID获取Java堆栈信息,Java堆栈信息生成Java虚拟机当前的线程快照信息,线程快照信息包含每一条线程的堆栈信息;监控脚本调用Jmap堆内存跟踪工具,获取Java进程的内存映射信息或堆内存信息,反映Java堆使用的内存镜像,包括系统信息、虚拟机属性、完整的线程转存储、所有类和对象的状态信息。
Jstack是Java虚拟机自带的一种堆栈跟踪工具,用于打印出给定的Java进程ID或core file或远程调试服务的Java堆栈信息用于生成虚拟机当前的线程快照信息,包含每一条线程的堆栈信息。该命令通常用于定位线程停顿原因,当出现线程停顿时,可通过stack查看每个线程的堆栈信息,进而分析停顿原因。如果Java程序崩溃生成core文件,Jstack工具可以用来获得core文件的Java Stack和Native Stack的信息,从而可以轻松地知道Java程序是如何崩溃和在程序在何处发生问题。另外,Jstack工具还可以附属到正在运行的Java程序中,看到当时运行的Java程序的Java stack和Native stack的信息,如果现在运行的Java程序呈现hung的状态,Jstack是非常有用的。
Jmap是Java虚拟机自带的一种堆内存跟踪工具,主要可以用于打印Java进程的内存映射或堆内存即Heap Dump文件的细节(如:产生哪些对象,以及数量等)。主要是用在检查内存泄漏、一些严重影响性能的大对象,检查系统中什么对象创建的最多,分析各种对象所占用的大小等,Dump文件是进程的内存副本。堆Dump是反映Java堆使用的内存镜像,其中主要包括系统信息、虚拟机属性、完整的线程Dump、所有类和对象的状态等。一般,在内存不足、GC异常等情况下,我们就会怀疑有内存泄漏。这个时候我们就可以制作堆Dump来查看具体情况,分析原因。
综上所述,本发明实施例的基于多样探测的服务自恢复方法,采用CURL页面响应检测和进程在线状态检测与Jstack、Jmap命令的服务故障运行环境信息提取相结合,在监控服务进程和测试页状态的同时,一旦发现配置的监控项不在线或响应返回异常时先通过Jstack、Jmap相关命令把网络连接状态及JAVA服务的相关Java虚拟机信息保存起来的,同时重启服务进行自恢复;在恢复业务的同时保留了程序的故障状态,为后续的故障分析及复盘提供相关信息。
虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,任何本领域技术人员,在不脱离本发明的精神和范围内,当可作些许的修改和完善,因此本发明的保护范围当以权利要求书所界定的为准。
- 基于多样探测的服务自恢复方法
- 一种基于生成对抗网络的多样性推荐方法、装置及服务器