RocketMQ内存监控方法、装置、电子设备及存储介质转让专利

申请号 : CN201811537778.0

文献号 : CN109828885B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈东杰

申请人 : 中国平安人寿保险股份有限公司

摘要 :

本发明提供一种RocketMQ内存监控方法、装置、电子设备及存储介质。所述RocketMQ内存监控方法包括:当接收到RocketMQ内存监控指令时,检测RocketMQ的运行状态;当所述运行状态为可用状态时,采用PS命令,结合第一指定关键字,从所有运行的进程中获取RocketMQ进程的进程标识符PID;根据所述PID,采用JMAP命令调出所述RocketMQ的堆栈信息;结合第二指定关键字,从所述堆栈信息中获取所述RocketMQ的已使用内存及配置内存;根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率;保存并展示所述当前内存使用率。本发明能对RocketMQ的内存进行监控,以实现更加准确的内存检测,避免运行卡顿的现象,提高运维效率。

权利要求 :

1.一种RocketMQ内存监控方法,其特征在于,所述方法包括:当接收到RocketMQ内存监控指令时,检测RocketMQ的运行状态;

当所述运行状态为可用状态时,采用PS命令,从所有运行的进程中调取所述RocketMQ的所有进程信息,结合第一指定关键字,从所述所有进程信息中获取RocketMQ进程的进程标识符PID;

结合所述PID,采用JMAP命令调取具有特定PID的进程的堆栈信息;

结合第二指定关键字,从所述堆栈信息中获取所述RocketMQ的已使用内存及配置内存,所述第二指定关键字是所述RocketMQ脚本中的参数名称或者后缀;

根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率;

保存并展示所述当前内存使用率;

获取上一个配置周期的初始内存使用率;

计算所述当前内存使用率与所述初始内存使用率的差值;

计算所述差值与所述初始内存使用率的比值;

当所述比值大于或者等于第二配置值时,发出警报。

2.如权利要求1所述的RocketMQ内存监控方法,其特征在于,所述第一指定关键字为NamesrvStartup和BrokerStartup。

3.如权利要求1所述的RocketMQ内存监控方法,其特征在于,所述堆栈信息包括以下一种或者多种的组合:已使用内存、配置内存、未使用内存、实例个数、内存配置方式。

4.如权利要求1所述的RocketMQ内存监控方法,其特征在于,所述结合第二指定关键字,从所述堆栈信息中获取已使用内存及配置内存包括:结合所述第二指定关键字中的Space及used,从所述堆栈信息中获取已使用内存;

结合所述第二指定关键字中的MaxHeapSize,从所述堆栈信息中获取配置内存。

5.如权利要求1所述的RocketMQ内存监控方法,其特征在于,所述根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率包括:计算所述已使用内存与所述配置内存的比值;

根据所述比值,确定所述RocketMQ的当前内存使用率。

6.如权利要求1所述的RocketMQ内存监控方法,其特征在于,所述方法还包括:当所述当前内存使用率大于或者等于第一配置值时,发出警报。

7.一种RocketMQ内存监控装置,其特征在于,所述装置包括:检测单元,用于当接收到RocketMQ内存监控指令时,检测RocketMQ的运行状态;

获取单元,用于当所述运行状态为可用状态时,采用PS命令,从所有运行的进程中调取所述RocketMQ的所有进程信息,结合第一指定关键字,从所述所有进程信息中获取RocketMQ进程的进程标识符PID;

调出单元,用于结合所述PID,采用JMAP命令调取具有特定PID的进程的堆栈信息;

所述获取单元,还用于结合第二指定关键字,从所述堆栈信息中获取所述RocketMQ的已使用内存及配置内存,所述第二指定关键字是所述RocketMQ脚本中的参数名称或者后缀;

确定单元,用于根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率;

展示单元,用于保存并展示所述当前内存使用率;

所述获取单元,还用于获取上一个配置周期的初始内存使用率;

计算单元,用于计算所述当前内存使用率与所述初始内存使用率的差值;

所述计算单元,还用于计算所述差值与所述初始内存使用率的比值;

发出单元,用于当所述比值大于或者等于第二配置值时,发出警报。

8.一种电子设备,其特征在于,所述电子设备包括:存储器,存储至少一个指令;及

处理器,执行所述存储器中存储的指令以实现如权利要求1至6中任意一项所述的RocketMQ内存监控方法。

9.一种计算机可读存储介质,其特征在于:所述计算机可读存储介质中存储有至少一个指令,所述至少一个指令被电子设备中的处理器执行以实现如权利要求1至6中任意一项所述的RocketMQ内存监控方法。

说明书 :

RocketMQ内存监控方法、装置、电子设备及存储介质

技术领域

[0001] 本发明涉及运维技术领域,尤其涉及一种RocketMQ内存监控方法、装置、电子设备及存储介质。

背景技术

[0002] 在现有技术方案中,市面的标准Spring Boot产品通常不会对rocketMQ的内存使用率进行监控,该项指标是应用运维所关注的核心指标,rocketMQ的实际内存分配通常低于配置内存,由于rocketMQ的实际内存是以堆栈的形式体现的,因此,通过获取堆栈的内存,所述电子设备即可获取到所述rocketMQ的准确内存数据,避免由于内存占用过高导致系统运行缓慢,提升用户体验。

发明内容

[0003] 鉴于以上内容,有必要提供一种RocketMQ内存监控方法、装置、电子设备及存储介质,能对RocketMQ的内存进行监控,以实现更加准确的内存检测,提高运维效率。
[0004] 一种RocketMQ内存监控方法,所述方法包括:
[0005] 当接收到RocketMQ内存监控指令时,检测RocketMQ的运行状态;
[0006] 当所述运行状态为可用状态时,采用PS命令,结合第一指定关键字,从所有运行的进程中获取RocketMQ进程的进程标识符PID;
[0007] 根据所述PID,采用JMAP命令调出所述RocketMQ的堆栈信息;
[0008] 结合第二指定关键字,从所述堆栈信息中获取所述RocketMQ的已使用内存及配置内存;
[0009] 根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率;
[0010] 保存并展示所述当前内存使用率。
[0011] 根据本发明优选实施例,所述采用PS命令,结合第一指定关键字,从所有运行的进程中获取RocketMQ进程的PID包括:
[0012] 采用PS命令,从所有运行的进程中调取所述RocketMQ的所有进程信息;
[0013] 结合所述第一指定关键字NamesrvStartup和BrokerStartup,从所述所有进程信息中获取所述RocketMQ进程的PID。
[0014] 根据本发明优选实施例,所述堆栈信息包括以下一种或者多种的组合:
[0015] 已使用内存、配置内存、未使用内存、实例个数、内存配置方式。
[0016] 根据本发明优选实施例,所述结合第二指定关键字,从所述堆栈信息中获取已使用内存及配置内存包括:
[0017] 结合所述第二指定关键字中的Space及used,从所述堆栈信息中获取已使用内存;
[0018] 结合所述第二指定关键字中的MaxHeapSize,从所述堆栈信息中获取配置内存。
[0019] 根据本发明优选实施例,所述根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率包括:
[0020] 计算所述已使用内存与所述配置内存的比值;
[0021] 根据所述比值,确定所述RocketMQ的当前内存使用率。
[0022] 根据本发明优选实施例,所述方法还包括:
[0023] 当所述当前内存使用率大于或者等于第一配置值时,发出警报。
[0024] 根据本发明优选实施例,所述方法还包括:
[0025] 获取上一个配置周期的初始内存使用率;
[0026] 计算所述当前内存使用率与所述初始内存使用率的差值;
[0027] 计算所述差值与所述初始内存使用率的比值;
[0028] 当所述比值大于或者等于第二配置值时,发出警报。
[0029] 一种RocketMQ内存监控装置,所述装置包括:
[0030] 检测单元,用于当接收到RocketMQ内存监控指令时,检测RocketMQ的运行状态;
[0031] 获取单元,用于当所述运行状态为可用状态时,采用PS命令,结合第一指定关键字,从所有运行的进程中获取RocketMQ进程的进程标识符PID;
[0032] 调出单元,用于根据所述PID,采用JMAP命令调出所述RocketMQ的堆栈信息;
[0033] 所述获取单元,还用于结合第二指定关键字,从所述堆栈信息中获取所述RocketMQ的已使用内存及配置内存;
[0034] 确定单元,用于根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率;
[0035] 展示单元,用于保存并展示所述当前内存使用率。
[0036] 根据本发明优选实施例,所述获取单元采用PS命令,结合第一指定关键字,从所有运行的进程中获取RocketMQ进程的PID包括:
[0037] 采用PS命令,从所有运行的进程中调取所述RocketMQ的所有进程信息;
[0038] 结合所述第一指定关键字NamesrvStartup和BrokerStartup,从所述所有进程信息中获取所述RocketMQ进程的PID。
[0039] 根据本发明优选实施例,所述堆栈信息包括以下一种或者多种的组合:
[0040] 已使用内存、配置内存、未使用内存、实例个数、内存配置方式。
[0041] 根据本发明优选实施例,所述获取单元结合第二指定关键字,从所述堆栈信息中获取已使用内存及配置内存包括:
[0042] 结合所述第二指定关键字中的Space及used,从所述堆栈信息中获取已使用内存;
[0043] 结合所述第二指定关键字中的MaxHeapSize,从所述堆栈信息中获取配置内存。
[0044] 根据本发明优选实施例,所述确定单元具体单元:
[0045] 计算所述已使用内存与所述配置内存的比值;
[0046] 根据所述比值,确定所述RocketMQ的当前内存使用率。
[0047] 根据本发明优选实施例,所述装置还包括:
[0048] 发出单元,用于当所述当前内存使用率大于或者等于第一配置值时,发出警报。
[0049] 根据本发明优选实施例,所述获取单元,还用于获取上一个配置周期的初始内存使用率;
[0050] 所述装置还包括:
[0051] 计算单元,用于计算所述当前内存使用率与所述初始内存使用率的差值;
[0052] 所述计算单元,还用于计算所述差值与所述初始内存使用率的比值;
[0053] 所述发出单元,还用于当所述比值大于或者等于第二配置值时,发出警报。
[0054] 一种电子设备,所述电子设备包括:
[0055] 存储器,存储至少一个指令;及
[0056] 处理器,执行所述存储器中存储的指令以实现所述RocketMQ内存监控方法。
[0057] 一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一个指令,所述至少一个指令被电子设备中的处理器执行以实现所述RocketMQ内存监控方法。
[0058] 由以上技术方案可以看出,本发明能够在接收到所述RocketMQ内存监控指令后,检测RocketMQ的运行状态,并当所述运行状态为可用状态时,采用PS命令,结合第一指定关键字,从所有运行的进程中获取RocketMQ进程的PID,以避免进行多余的操作,增加工作量,进一步根据所述PID,采用JMAP命令调出所述RocketMQ的堆栈信息,以达到准确监控的目的,并结合第二指定关键字,从所述堆栈信息中获取所述RocketMQ的已使用内存及配置内存,根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率,保存并展示所述当前内存使用率,以达到自动化监控内存的目的,避免内存占用过高,并提高运维效率。

附图说明

[0059] 图1是本发明RocketMQ内存监控方法的较佳实施例的流程图。
[0060] 图2是本发明RocketMQ内存监控装置的较佳实施例的功能模块图。
[0061] 图3是本发明实现RocketMQ内存监控方法的较佳实施例的电子设备的结构示意图。

具体实施方式

[0062] 为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
[0063] 如图1所示,是本发明RocketMQ内存监控方法的较佳实施例的流程图。根据不同的需求,该流程图中步骤的顺序可以改变,某些步骤可以省略。
[0064] 所述RocketMQ内存监控方法应用于一个或者多个电子设备中,所述电子设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
[0065] 所述电子设备可以是任何一种可与用户进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、个人数字助理(Personal Digital Assistant,PDA)、游戏机、交互式网络电视(Internet Protocol Television,IPTV)、智能式穿戴式设备等。
[0066] 所述电子设备还可以包括网络设备和/或用户设备。其中,所述网络设备包括,但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(Cloud Computing)的由大量主机或网络服务器构成的云。
[0067] 所述电子设备所处的网络包括但不限于互联网、广域网、城域网、局域网、虚拟专用网络(Virtual Private Network,VPN)等。
[0068] S10,当接收到RocketMQ内存监控指令时,所述电子设备检测RocketMQ的运行状态。
[0069] 在本发明的至少一个实施例中,市面的标准Spring Boot产品通常不会对RocketMQ的内存进行监控,且在传统的主机层面,内存监控通常包括操作系统内的所有进程,但是,在主机配备4G内存的情况下,所述RocketMQ实际分配的内存可能只有2G。
[0070] 由于所述RocketMQ的内存是以堆栈的形式表示的,因此,在本技术方案中,所述电子设备获取所述RocketMQ的堆栈信息,从而对所述RocketMQ的内存进行监控,以实现更加准确的内存检测。
[0071] 在本发明的至少一个实施例中,所述RocketMQ客户端是一个队列模型的消息中间件,即:一个独立的系统软件或服务程序,位于客户机或服务器的操作系统之上,管理计算机资源和网络通讯,能够连接两个独立应用程序或独立系统,实现消息系统功能。
[0072] 在本发明的至少一个实施例中,所述电子设备接收RocketMQ内存监控指令包括,但不限于以下一种或者多种方式的组合:
[0073] (1)所述电子设备接收用户触发的所述RocketMQ内存监控指令。
[0074] 具体地,所述用户可以通过点击触发按键触发所述RocketMQ内存监控指令,所述触发按键可以是虚拟按键,或者是实体按键等。
[0075] 所述用户还可以输入对应的语音指令,以作为所述RocketMQ内存监控指令,本发明不限制。
[0076] 或者是,所述用户还可以输入指纹信息,以触发所述RocketMQ内存监控指令等。
[0077] (2)接收所述电子设备每隔预设时间间隔触发所述RocketMQ内存监控指令的信号。
[0078] 具体地,所述预设时间间隔可以由所述电子设备进行配置,也可以由所述用户进行自定义配置,本发明不限制。
[0079] 例如:所述预设时间间隔可以是每隔1分钟等。
[0080] (3)接收所述电子设备配置的在预设时间触发所述RocketMQ内存监控指令的信号。
[0081] 具体地,所述预设时间可以由所述电子设备进行配置,也可以由所述用户进行自定义配置,本发明不限制。
[0082] 例如:所述预设时间可以是12月1日上午10点等。
[0083] (4)接收所述电子设备在配置状态下触发的所述RocketMQ内存监控指令。
[0084] 具体地,所述配置状态包括,但不限于所述电子设备运行卡顿或阻塞的状态等,以使所述电子设备自动确定运行卡顿或阻塞的原因。
[0085] 进一步地,所述RocketMQ的运行状态包括可用状态及不可用状态。
[0086] 具体地,所述可用状态是指所述电子设备处于运行状态;所述不可用状态是指所述电子设备处于死机状态或者关机状态等。
[0087] 可以理解的是,只有当所述运行状态为可用状态时,所述电子设备才需要对所述RocketMQ内存监控指令做出响应。
[0088] 具体地,所述电子设备可以利用脚本rocketmq.sh检测所述RocketMQ的运行状态。
[0089] 例如:所述电子设备输入rocketmq.sh的相关脚本,根据所述脚本的编写方式,当输出为“rocketmq is not running”时,则说明所述运行状态为不可用,否则,说明所述运行状态为可用。
[0090] S11,当所述运行状态为可用状态时,所述电子设备采用PS命令,结合第一指定关键字,从所有运行的进程中获取RocketMQ进程的PID(Process Identification,进程标识符)。
[0091] 在本发明的至少一个实施例中,Linux中的ps(Process Status)用于显示出系统中当前运行的所有进程,以使所述电子设备查询所有进程。
[0092] 具体地,所述指定关键字包括NamesrvStartup和BrokerStartup,所述NamesrvStartup和BrokerStartup用于所述RocketMQ中间件,是所述RocketMQ中间件的运行脚本中的类名,因此,通过所述指定关键字NamesrvStartup和BrokerStartup,并调用所述PS命令,即可获取到所述RocketMQ进程的PID。
[0093] 进一步地,所述电子设备采用PS命令,结合第一指定关键字,从所有运行的进程中获取RocketMQ进程的PID包括:
[0094] 所述电子设备采用PS命令,从所有运行的进程中调取所述RocketMQ的所有进程信息,所述电子设备结合所述第一指定关键字NamesrvStartup和BrokerStartup,从所述所有进程信息中获取所述RocketMQ进程的PID。
[0095] 例如:所述电子设备采用命令:PID=`ps‑fC java|grep"$INSTANCES"|egrep"NamesrvStartup|BrokerStartup"|awk'{print$2}',可以得到运行结果:[root@SZC‑L0075300rocketmq]#ps‑fC java|grep"rmq_lcloud‑config‑prd‑ins5201"|egrep"NamesrvStartup|BrokerStartup"|awk'{print$2}'16056,因此,所述电子设备可以确定所述RocketMQ进程的PID为16056。
[0096] S12,所述电子设备根据所述PID,采用JMAP命令调出所述RocketMQ的堆栈信息。
[0097] 在本发明的至少一个实施例中,所述电子设备利用所述JMAP命令,能够输出所有内存中的对象,并以二进制输出成文本。
[0098] 具体地,所述电子设备结合所述PID,采用所述JMAP命令,调取具有特定PID的进程的堆栈信息。
[0099] 例如:所述电子设备可以通过脚本PWD="/wls/apache/servers/$INSTANCES"$JMAP‑heap$PID 2>/dev/null>$PWD/.mem.tmp,获取到所述PID 2对应的堆栈信息,并以mem.tmp文件的形式输出。
[0100] 具体地,所述堆栈信息包括,但不限于以下一种或者多种的组合:
[0101] 已使用内存、配置内存、未使用内存、实例个数、内存配置方式等。
[0102] S13,所述电子设备结合第二指定关键字,从所述堆栈信息中获取所述RocketMQ的已使用内存及配置内存。
[0103] 在本发明的至少一个实施例中,所述第二指定关键字是所述RocketMQ脚本中的参数名称或者后缀,例如:Space及used是后缀,MaxHeapSize是参数名称,因此,通过匹配所述第二指定关键字,即可获取到与所述第二指定关键字对应的数据。
[0104] 具体地,所述电子设备结合第二指定关键字,从所述堆栈信息中获取已使用内存及配置内存包括:
[0105] 所述电子设备结合所述第二指定关键字中的Space及used,从所述堆栈信息中获取已使用内存,再结合所述第二指定关键字中的MaxHeapSize,从所述堆栈信息中获取配置内存。
[0106] 例如:所述电子设备采用脚本Memuse=`cat$PWD/.mem.tmp|egrep‑A3‑w"Space:|concurrent"|grep"used"|awk'{sum+=$3}END{print sum},从mem.tmp文件中查找后缀信息为Space,且后3行包含used的关键字数值,并取第三个字段求和,得出所述已使用内存;
[0107] 进一步地,所述电子设备采用脚本MemMax=`cat$PWD/.mem.tmp|grep‑w MaxHeapSize|awk'{print$3}',从mem.tmp文件中截取所述第二指定关键字“MaxHeapSize”,并取第三个字段,获得所述配置内存。
[0108] S14,所述电子设备根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率。
[0109] 在本发明的至少一个实施例中,所述当前内存使用率能够反映出所述RocketMQ内存的占用情况。
[0110] 优选地,所述电子设备根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率包括:
[0111] 所述电子设备计算所述已使用内存与所述配置内存的比值,并根据所述比值,确定所述RocketMQ的当前内存使用率。
[0112] 例如:当所述已使用内存为2G,所述配置内存为4G时,所述电子设备计算所述已使用内存2G与所述配置内存4G的比值为0.5,则所述电子设备可以确定所述当前内存使用率为50%。
[0113] S15,所述电子设备保存并展示所述当前内存使用率。
[0114] 在本发明的至少一个实施例中,所述电子设备将所述当前内存使用率保存至配置数据库,以方便调取,所述配置数据库的类型不限。
[0115] 进一步地,所述电子设备可以通过Grafana展示平台或Highcharts展示所述当前内存使用率。
[0116] 具体地,所述Grafana展示平台是一个可视化面板(Dashboard),支持各种图表和布局展示,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源。所述Grafana展示平台具有以下特性:灵活丰富的图形化选项;可以混合多种风格;支持白天和夜间模式;支持多个数据源。
[0117] 所述Highcharts是一个用纯JavaScript语言编写的图表库,能够很简单、便捷地在web网站或是web应用程序添加有交互性的图表,且支持监控平台的各种图例。
[0118] 优选地,所述方法还包括:
[0119] 当所述当前内存使用率大于或者等于第一配置值时,所述电子设备发出警报。
[0120] 具体地,所述第一配置值是一个预设的阈值,所述第一配置值可以由所述电子设备进行配置,也可以由所述用户根据实际需求进行配置,本发明不限制。例如,所述第一配置值可以是90%,也就是说,当所述当前内存使用率大于或者等于90%时,所述电子设备将做出报警响应。
[0121] 优选地,所述方法还包括:
[0122] 所述电子设备获取上一个配置周期的初始内存使用率,并计算所述当前内存使用率与所述初始内存使用率的差值,所述电子设备计算所述差值与所述初始内存使用率的比值,当所述比值大于或者等于第二配置值时,所述电子设备发出警报。
[0123] 例如:所述当前内存使用率为本周一上午10:00的采样数据为50%,所述电子设备获取上周一上午10:00的初始内存使用率40%后,计算所述当前内存使用率50%与所述初始内存使用率40%的第一差值为10%,所述电子设备进一步计算出所述第一差值10%与所述初始内存使用率40%的比值为25%,且大于所述第二配置值20%,则所述电子设备发出警报。
[0124] 具体地,所述第二配置值是一个预设的阈值,所述第二配置值可以由所述电子设备进行配置,也可以由所述用户根据实际需求进行配置,本发明不限制。
[0125] 通过上述实施方式,所述电子设备可以实现内存使用率的基线告警,以保证所述电子设备正常运行。
[0126] 综上所述,本发明能够在接收到所述RocketMQ内存监控指令后,检测RocketMQ的运行状态,并当所述运行状态为可用状态时,采用PS命令,结合第一指定关键字,从所有运行的进程中获取RocketMQ进程的PID,以避免进行多余的操作,增加工作量,进一步根据所述PID,采用JMAP命令调出所述RocketMQ的堆栈信息,以达到准确监控的目的,并结合第二指定关键字,从所述堆栈信息中获取所述RocketMQ的已使用内存及配置内存,根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率,保存并展示所述当前内存使用率,以达到自动化监控内存的目的,避免内存占用过高,并提高运维效率。
[0127] 如图2所示,是本发明RocketMQ内存监控装置的较佳实施例的功能模块图。所述RocketMQ内存监控装置11包括检测单元110、获取单元111、调出单元112、确定单元113、展示单元114、发出单元115及计算单元116。本发明所称的模块/单元是指一种能够被处理器13所执行,并且能够完成固定功能的一系列计算机程序段,其存储在存储器12中。在本实施例中,关于各模块/单元的功能将在后续的实施例中详述。
[0128] 当接收到RocketMQ内存监控指令时,检测单元110检测RocketMQ的运行状态。
[0129] 在本发明的至少一个实施例中,市面的标准Spring Boot产品通常不会对RocketMQ的内存进行监控,且在传统的主机层面,内存监控通常包括操作系统内的所有进程,但是,在主机配备4G内存的情况下,所述RocketMQ实际分配的内存可能只有2G。
[0130] 由于所述RocketMQ的内存是以堆栈的形式表示的,因此,在本技术方案中,获取单元111获取所述RocketMQ的堆栈信息,从而对所述RocketMQ的内存进行监控,以实现更加准确的内存检测。
[0131] 在本发明的至少一个实施例中,所述RocketMQ客户端是一个队列模型的消息中间件,即:一个独立的系统软件或服务程序,位于客户机或服务器的操作系统之上,管理计算机资源和网络通讯,能够连接两个独立应用程序或独立系统,实现消息系统功能。
[0132] 在本发明的至少一个实施例中,所述电子设备接收RocketMQ内存监控指令包括,但不限于以下一种或者多种方式的组合:
[0133] (1)所述电子设备接收用户触发的所述RocketMQ内存监控指令。
[0134] 具体地,所述用户可以通过点击触发按键触发所述RocketMQ内存监控指令,所述触发按键可以是虚拟按键,或者是实体按键等。
[0135] 所述用户还可以输入对应的语音指令,以作为所述RocketMQ内存监控指令,本发明不限制。
[0136] 或者是,所述用户还可以输入指纹信息,以触发所述RocketMQ内存监控指令等。
[0137] (2)接收所述电子设备每隔预设时间间隔触发所述RocketMQ内存监控指令的信号。
[0138] 具体地,所述预设时间间隔可以由所述电子设备进行配置,也可以由所述用户进行自定义配置,本发明不限制。
[0139] 例如:所述预设时间间隔可以是每隔1分钟等。
[0140] (3)接收所述电子设备配置的在预设时间触发所述RocketMQ内存监控指令的信号。
[0141] 具体地,所述预设时间可以由所述电子设备进行配置,也可以由所述用户进行自定义配置,本发明不限制。
[0142] 例如:所述预设时间可以是12月1日上午10点等。
[0143] (4)接收所述电子设备在配置状态下触发的所述RocketMQ内存监控指令。
[0144] 具体地,所述配置状态包括,但不限于所述电子设备运行卡顿或阻塞的状态等,以使所述电子设备自动确定运行卡顿或阻塞的原因。
[0145] 进一步地,所述RocketMQ的运行状态包括可用状态及不可用状态。
[0146] 具体地,所述可用状态是指所述电子设备处于运行状态;所述不可用状态是指所述电子设备处于死机状态或者关机状态等。
[0147] 可以理解的是,只有当所述运行状态为可用状态时,所述电子设备才需要对所述RocketMQ内存监控指令做出响应。
[0148] 具体地,所述检测单元110可以利用脚本rocketmq.sh检测所述RocketMQ的运行状态。
[0149] 例如:所述检测单元110输入rocketmq.sh的相关脚本,根据所述脚本的编写方式,当输出为“rocketmq is not running”时,则说明所述运行状态为不可用,否则,说明所述运行状态为可用。
[0150] 当所述运行状态为可用状态时,所述获取单元111采用PS命令,结合第一指定关键字,从所有运行的进程中获取RocketMQ进程的PID。
[0151] 在本发明的至少一个实施例中,Linux中的ps(Process Status)用于显示出系统中当前运行的所有进程,以使所述电子设备查询所有进程。
[0152] 具体地,所述指定关键字包括NamesrvStartup和BrokerStartup,所述NamesrvStartup和BrokerStartup用于所述RocketMQ中间件,是所述RocketMQ中间件的运行脚本中的类名,因此,通过所述指定关键字NamesrvStartup和BrokerStartup,并调用所述PS命令,即可获取到所述RocketMQ进程的PID。
[0153] 进一步地,所述获取单元111采用PS命令,结合第一指定关键字,从所有运行的进程中获取RocketMQ进程的PID包括:
[0154] 所述获取单元111采用PS命令,从所有运行的进程中调取所述RocketMQ的所有进程信息,所述获取单元111结合所述第一指定关键字NamesrvStartup和BrokerStartup,从所述所有进程信息中获取所述RocketMQ进程的PID。
[0155] 例如:所述获取单元111采用命令:PID=`ps‑fC java|grep"$INSTANCES"|egrep"NamesrvStartup|BrokerStartup"|awk'{print$2}',可以得到运行结果:[root@SZC‑L0075300rocketmq]#ps‑fC java|grep"rmq_lcloud‑config‑prd‑ins5201"|egrep"NamesrvStartup|BrokerStartup"|awk'{print$2}'16056,因此,所述获取单元111可以确定所述RocketMQ进程的PID为16056。
[0156] 调出单元112根据所述PID,采用JMAP命令调出所述RocketMQ的堆栈信息。
[0157] 在本发明的至少一个实施例中,所述调出单元112利用所述JMAP命令,能够输出所有内存中的对象,并以二进制输出成文本。
[0158] 具体地,所述调出单元112结合所述PID,采用所述JMAP命令,调取具有特定PID的进程的堆栈信息。
[0159] 例如:所述调出单元112可以通过脚本PWD="/wls/apache/servers/$INSTANCES"$JMAP‑heap$PID 2>/dev/null>$PWD/.mem.tmp,获取到所述PID 2对应的堆栈信息,并以mem.tmp文件的形式输出。
[0160] 具体地,所述堆栈信息包括,但不限于以下一种或者多种的组合:
[0161] 已使用内存、配置内存、未使用内存、实例个数、内存配置方式等。
[0162] 所述获取单元111结合第二指定关键字,从所述堆栈信息中获取所述RocketMQ的已使用内存及配置内存。
[0163] 在本发明的至少一个实施例中,所述第二指定关键字是所述RocketMQ脚本中的参数名称或者后缀,例如:Space及used是后缀,MaxHeapSize是参数名称,因此,通过匹配所述第二指定关键字,即可获取到与所述第二指定关键字对应的数据。
[0164] 具体地,所述获取单元111结合第二指定关键字,从所述堆栈信息中获取已使用内存及配置内存包括:
[0165] 所述获取单元111结合所述第二指定关键字中的Space及used,从所述堆栈信息中获取已使用内存,再结合所述第二指定关键字中的MaxHeapSize,从所述堆栈信息中获取配置内存。
[0166] 例如:所述获取单元111采用脚本Memuse=`cat$PWD/.mem.tmp|egrep‑A3‑w"Space:|concurrent"|grep"used"|awk'{sum+=$3}END{print sum},从mem.tmp文件中查找后缀信息为Space,且后3行包含used的关键字数值,并取第三个字段求和,得出所述已使用内存;
[0167] 进一步地,所述获取单元111采用脚本MemMax=`cat$PWD/.mem.tmp|grep‑w MaxHeapSize|awk'{print$3}',从mem.tmp文件中截取所述第二指定关键字“MaxHeapSize”,并取第三个字段,获得所述配置内存。
[0168] 确定单元113根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率。
[0169] 在本发明的至少一个实施例中,所述当前内存使用率能够反映出所述RocketMQ内存的占用情况。
[0170] 优选地,所述确定单元113根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率包括:
[0171] 所述确定单元113计算所述已使用内存与所述配置内存的比值,并根据所述比值,确定所述RocketMQ的当前内存使用率。
[0172] 例如:当所述已使用内存为2G,所述配置内存为4G时,所述确定单元113计算所述已使用内存2G与所述配置内存4G的比值为0.5,则所述确定单元113可以确定所述当前内存使用率为50%。
[0173] 展示单元114保存并展示所述当前内存使用率。
[0174] 在本发明的至少一个实施例中,所述展示单元114将所述当前内存使用率保存至配置数据库,以方便调取,所述配置数据库的类型不限。
[0175] 进一步地,所述展示单元114可以通过Grafana展示平台或Highcharts展示所述当前内存使用率。
[0176] 具体地,所述Grafana展示平台是一个可视化面板(Dashboard),支持各种图表和布局展示,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源。所述Grafana展示平台具有以下特性:灵活丰富的图形化选项;可以混合多种风格;支持白天和夜间模式;支持多个数据源。
[0177] 所述Highcharts是一个用纯JavaScript语言编写的图表库,能够很简单、便捷地在web网站或是web应用程序添加有交互性的图表,且支持监控平台的各种图例。
[0178] 优选地,所述方法还包括:
[0179] 当所述当前内存使用率大于或者等于第一配置值时,所述发出单元115发出警报。
[0180] 具体地,所述第一配置值是一个预设的阈值,所述第一配置值可以由所述发出单元115进行配置,也可以由所述用户根据实际需求进行配置,本发明不限制。例如,所述第一配置值可以是90%,也就是说,当所述当前内存使用率大于或者等于90%时,所述发出单元115将做出报警响应。
[0181] 优选地,所述方法还包括:
[0182] 获取单元111获取上一个配置周期的初始内存使用率,计算单元116计算所述当前内存使用率与所述初始内存使用率的差值,所述计算单元116计算所述差值与所述初始内存使用率的比值,当所述比值大于或者等于第二配置值时,所述发出单元115发出警报。
[0183] 例如:所述当前内存使用率为本周一上午10:00的采样数据为50%,所述获取单元111获取上周一上午10:00的初始内存使用率40%后,计算单元116计算所述当前内存使用率50%与所述初始内存使用率40%的第一差值为10%,所述计算单元116进一步计算出所述第一差值10%与所述初始内存使用率40%的比值为25%,且大于所述第二配置值20%,则所述发出单元115发出警报。
[0184] 具体地,所述第二配置值是一个预设的阈值,所述第二配置值可以由所述发出单元115进行配置,也可以由所述用户根据实际需求进行配置,本发明不限制。
[0185] 通过上述实施方式,所述发出单元115可以实现内存使用率的基线告警,以保证所述电子设备正常运行。
[0186] 综上所述,本发明能够在接收到所述RocketMQ内存监控指令后,检测RocketMQ的运行状态,并当所述运行状态为可用状态时,采用PS命令,结合第一指定关键字,从所有运行的进程中获取RocketMQ进程的PID,以避免进行多余的操作,增加工作量,进一步根据所述PID,采用JMAP命令调出所述RocketMQ的堆栈信息,以达到准确监控的目的,并结合第二指定关键字,从所述堆栈信息中获取所述RocketMQ的已使用内存及配置内存,根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率,保存并展示所述当前内存使用率,以达到自动化监控内存的目的,避免内存占用过高,并提高运维效率。
[0187] 如图3所示,是本发明实现RocketMQ内存监控方法的较佳实施例的电子设备的结构示意图。
[0188] 所述电子设备1是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
[0189] 所述电子设备1还可以是但不限于任何一种可与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、个人数字助理(Personal Digital Assistant,PDA)、游戏机、交互式网络电视(Internet Protocol Television,IPTV)、智能式穿戴式设备等。
[0190] 所述电子设备1还可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。
[0191] 所述电子设备1所处的网络包括但不限于互联网、广域网、城域网、局域网、虚拟专用网络(Virtual Private Network,VPN)等。
[0192] 在本发明的一个实施例中,所述电子设备1包括,但不限于,存储器12、处理器13,以及存储在所述存储器12中并可在所述处理器13上运行的计算机程序,例如RocketMQ内存监控程序。
[0193] 本领域技术人员可以理解,所述示意图仅仅是电子设备1的示例,并不构成对电子设备1的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述电子设备1还可以包括输入输出设备、网络接入设备、总线等。
[0194] 所称处理器13可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field‑Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器13是所述电子设备1的运算核心和控制中心,利用各种接口和线路连接整个电子设备1的各个部分,及执行所述电子设备1的操作系统以及安装的各类应用程序、程序代码等。
[0195] 所述处理器13执行所述电子设备1的操作系统以及安装的各类应用程序。所述处理器13执行所述应用程序以实现上述各个RocketMQ内存监控方法实施例中的步骤,例如图1所示的步骤S10、S11、S12、S13、S14、S15。
[0196] 或者,所述处理器13执行所述计算机程序时实现上述各装置实施例中各模块/单元的功能,例如:当接收到RocketMQ内存监控指令时,检测RocketMQ的运行状态;当所述运行状态为可用状态时,采用PS命令,结合第一指定关键字,从所有运行的进程中获取RocketMQ进程的进程标识符PID;根据所述PID,采用JMAP命令调出所述RocketMQ的堆栈信息;结合第二指定关键字,从所述堆栈信息中获取所述RocketMQ的已使用内存及配置内存;根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率;保存并展示所述当前内存使用率。
[0197] 示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器12中,并由所述处理器13执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述电子设备1中的执行过程。例如,所述计算机程序可以被分割成检测单元110、获取单元111、调出单元112、确定单元113、展示单元114、发出单元115及计算单元116。
[0198] 所述存储器12可用于存储所述计算机程序和/或模块,所述处理器13通过运行或执行存储在所述存储器12内的计算机程序和/或模块,以及调用存储在存储器12内的数据,实现所述电子设备1的各种功能。所述存储器12可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器12可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0199] 所述存储器12可以是电子设备1的外部存储器和/或内部存储器。进一步地,所述存储器12可以是集成电路中没有实物形式的具有存储功能的电路,如RAM(Random‑Access Memory,随机存取存储器)、FIFO(First In First Out,)等。或者,所述存储器12也可以是具有实物形式的存储器,如内存条、TF卡(Trans‑flash Card)等等。
[0200] 所述电子设备1集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。
[0201] 其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0202] 结合图1,所述电子设备1中的所述存储器12存储多个指令以实现一种RocketMQ内存监控方法,所述处理器13可执行所述多个指令从而实现:当接收到RocketMQ内存监控指令时,检测RocketMQ的运行状态;当所述运行状态为可用状态时,采用PS命令,结合第一指定关键字,从所有运行的进程中获取RocketMQ进程的进程标识符PID;根据所述PID,采用JMAP命令调出所述RocketMQ的堆栈信息;结合第二指定关键字,从所述堆栈信息中获取所述RocketMQ的已使用内存及配置内存;根据所述已使用内存及所述配置内存,确定所述RocketMQ的当前内存使用率;保存并展示所述当前内存使用率。
[0203] 根据本发明优选实施例,所述处理器13还执行多个指令包括:
[0204] 采用PS命令,从所有运行的进程中调取所述RocketMQ的所有进程信息;
[0205] 结合所述第一指定关键字NamesrvStartup和BrokerStartup,从所述所有进程信息中获取所述RocketMQ进程的PID。
[0206] 根据本发明优选实施例,所述堆栈信息包括以下一种或者多种的组合:
[0207] 已使用内存、配置内存、未使用内存、实例个数、内存配置方式。
[0208] 根据本发明优选实施例,所述处理器13还执行多个指令包括:
[0209] 结合所述第二指定关键字中的Space及used,从所述堆栈信息中获取已使用内存;
[0210] 结合所述第二指定关键字中的MaxHeapSize,从所述堆栈信息中获取配置内存。
[0211] 根据本发明优选实施例,所述处理器13还执行多个指令包括:
[0212] 计算所述已使用内存与所述配置内存的比值;
[0213] 根据所述比值,确定所述RocketMQ的当前内存使用率。
[0214] 根据本发明优选实施例,所述处理器13还执行多个指令包括:
[0215] 当所述当前内存使用率大于或者等于第一配置值时,发出警报。
[0216] 根据本发明优选实施例,所述处理器13还执行多个指令包括:
[0217] 获取上一个配置周期的初始内存使用率;
[0218] 计算所述当前内存使用率与所述初始内存使用率的差值;
[0219] 计算所述差值与所述初始内存使用率的比值;
[0220] 当所述比值大于或者等于第二配置值时,发出警报。
[0221] 具体地,所述处理器13对上述指令的具体实现方法可参考图1对应实施例中相关步骤的描述,在此不赘述。
[0222] 在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
[0223] 所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0224] 另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
[0225] 对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。
[0226] 因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附关联图标记视为限制所涉及的权利要求。
[0227] 此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第二等词语用来表示名称,而并不表示任何特定的顺序。
[0228] 最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。