基于云监控的线程控制方法、装置、电子设备及存储介质与流程

文档序号:17772867发布日期:2019-05-28 19:38阅读:162来源:国知局
基于云监控的线程控制方法、装置、电子设备及存储介质与流程

本发明涉及计算机技术领域,具体涉及一种基于云监控的线程控制方法、装置、电子设备及存储介质。



背景技术:

计算机系统中,会使用各种系统资源进行任务处理,当有任务需要处理时,系统会收到访问指定系统资源的请求,系统对该请求建立线程,然后利用所建立的线程对该请求进行处理。为了充分利用系统资源,通常会采用多线程方式实现对多个请求的并行处理。然而过高的线程数量会因资源争用、线程切换等导致过多的资源消耗在非必要任务操作上,使得系统因资源消耗过多而导致系统不稳定,影响对请求进行处理的效率。因此,需要对线程数量进行控制以使资源利用达到最优。

现有技术中,通常是在系统启动时,设置一个最大线程数量,并控制当前已建立的线程数量不大于所预先设置的该最大线程数量,进而实现线程控制。

但现有技术中,并没有合理的分配线程,导致有些线程一直处于繁忙状态,处于空闲状态的线程也未及时回收,一直占用系统资源,造成系统资源的浪费。



技术实现要素:

鉴于以上内容,有必要提出一种基于云监控的线程控制方法、装置、电子设备及存储介质,能够通过云监控,将处于繁忙状态的线程中超过预设任务量阈值的任务量分配给处于空闲状态中超过预设时间阈值的线程,充分利用空闲时间长的线程分担任务量较重的繁忙线程的任务,避免频繁创建新的线程占用过多的系统资源。

本发明的第一方面提供一种基于云监控的线程控制方法,所述方法包括:

获取系统当前运行的应用程序的进程信息;

根据所述进程信息获取每个线程当前所处的状态;

获取处于繁忙状态的线程的待处理任务量;

当确定所有所述待处理任务量中有大于预设任务量阈值的目标待处理任务量时,获取处于空闲状态的线程的空闲时间;

判断所有所述空闲时间中是否有大于预设时间阈值的目标空闲时间;

当确定所有所述空闲时间中有大于预设时间阈值的目标空闲时间时,将所述目标待处理任务量对应的待处理任务分配给所述目标空闲时间对应的线程。

根据本发明的一个优选实施例,所述将所述目标待处理任务量对应的待处理任务分配给所述目标空闲时间对应的线程包括:

获取所有所述待处理任务量中大于预设任务量阈值的目标待处理任务量对应的第一线程;

获取所述第一线程中的待处理任务量减去预设任务量阈值,得到第一待处理任务量;

获取所有所述空闲时间中大于预设时间阈值的目标空闲时间对应的第二线程;

将所述第一待处理任务量的待处理任务均匀分配给所述第二线程。

根据本发明的一个优选实施例,当确定所有所述空闲时间中没有大于预设时间阈值的目标空闲时间时,所述方法还包括:

建立新的线程执行所述目标待处理任务量对应的待处理任务。

根据本发明的一个优选实施例,所述新的线程是根据预设线程创建规则建立的,所述预设线程创建规则包括:根据所述目标待处理任务量对应的待处理任务的数量建立对应所述数量的线程数。

根据本发明的一个优选实施例,所述方法还包括:

判断处于繁忙状态的线程是否满足预设报警条件;

若所述处于繁忙状态的线程满足所述预设报警条件,则进行报警。

根据本发明的一个优选实施例,在所述获取系统当前运行的应用程序的进程信息时,所述方法还包括:

生成监控信息展示界面,展示所述应用程序的进程信息及对应所使用的线程信息。

根据本发明的一个优选实施例,所述获取系统当前运行的应用程序的进程信息包括:

从应用程序的环境配置文件中获取所述应用程序的应用实例名称;

根据所述应用实例名称采集系统当前运行的应用程序的进程信息。

本发明的第二方面提供一种基于云监控的线程控制装置,所述装置包括:

第一获取模块,用于获取系统当前运行的应用程序的进程信息;

第二获取模块,用于根据所述进程信息获取每个线程当前所处的状态;

第三获取模块,用于获取处于繁忙状态的线程的待处理任务量;

第一判断模块,用于判断所有所述待处理任务量中是否有大于预设任务量阈值的目标待处理任务量;

第四获取模块,用于当所述第一判断模块确定所有所述待处理任务量中有大于预设任务量阈值的目标待处理任务量时,获取处于空闲状态的线程的空闲时间;

第二判断模块,用于判断所有所述空闲时间中是否有大于预设时间阈值的目标空闲时间;

分配模块,用于当所述第二判断模块确定所有所述空闲时间中有大于预设时间阈值的目标空闲时间时,将所述目标待处理任务量对应的待处理任务分配给所述目标空闲时间对应的线程。

本发明的第三方面提供一种电子设备,所述电子设备包括处理器和存储器,所述处理器用于执行所述存储器中存储的计算机程序时实现所述的基于云监控的线程控制方法。

本发明的第四方面提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述的基于云监控的线程控制方法。

本发明实施例提供的基于云监控的线程控制方法、装置、电子设备及存储介质,能够将处于繁忙状态的线程中超过预设任务量阈值的任务量分配给处于空闲状态中超过预设时间阈值的线程,不仅可以充分利用空闲时间长的线程分担任务量较重的繁忙线程的任务,还可以避免频繁创建新的线程或者回收已建立的线程,占用过多的系统资源,明显降低系统的反应速度。使得处于繁忙状态的线程的待处理任务不会太多,而处理空闲状态的线程也不会空闲较久,保证了系统资源能够最大程度得到合理化的利用,从而能够有效的保证系统正常运行又能节约系统资源。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1是本发明实施例一提供的基于云监控的线程控制方法的流程图。

图2是本发明实施例二提供的基于云监控的线程控制装置的功能模块图。

图3是本发明实施例三提供的电子设备的示意图。

如下具体实施方式将结合上述附图进一步说明本发明。

具体实施方式

为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施例对本发明进行详细描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。

本发明实施例的基于云监控的线程控制方法应用在电子设备中,也可以应用在电子设备和通过网络与所述电子设备进行连接的服务器所构成的硬件环境中,由服务器和电子设备共同执行。网络包括但不限于:广域网、城域网或局域网。

所述电子设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算电子设备。

所述对于需要进行基于云监控的线程控制方法的电子设备,可以直接在电子设备上集成本发明的方法所提供的基于云监控的线程控制功能,或者安装用于实现本发明的方法的客户端。再如,本发明所提供的方法还可以以软件开发工具包(softwaredevelopmentkit,sdk)的形式运行在服务器等电子设备上,以sdk的形式提供基于云监控的线程控制功能的接口,服务器或其他电子设备通过提供的接口即可实现基于云监控的线程控制功能。

实施例一

图1是本发明实施例一提供的基于云监控的线程控制方法的流程图。所述基于云监控的线程控制方法对电子设备中的应用程序的当前线程数指标进行监控。根据不同的需求,该流程图中的执行顺序可以改变,某些步骤可以省略。

s11:获取系统当前运行的应用程序的进程信息。

电子设备的系统可以运行一个应用程序,也可以运行多个应用程序。所述应用程序可以是java应用程序。系统在运行应用程序时,可以获取系统当前运行的应用程序的进程信息,便于后续根据所述进程信息获取线程所处的状态,根据线程所处的状态执行相应的操作。

应用程序的每个应用实例对应应用程序的一个进程。

在本实施例中,获取系统当前运行的应用程序的进程信息可以包括:

1)从应用程序的环境配置文件中获取应用程序的应用实例名称。

所述环境配置文件可以是env文件。读取应用程序的环境配置文件后,从读取的环境配置文件中获取应用实例名称spri_lcloud-rmp-prd-ins9740。

2)根据所述应用实例名称采集系统当前运行的应用程序的进程信息。

采集的应用程序的进程信息包括应用程序进程的进程标识符(processidentifier,pid)。进程标识符用于区分各个进程。进程标识符可以是一个数字编号,如四位的数字编号。

采集的应用程序的进程信息还可以包括应用程序进程所属的应用程序及包括的线程数。一个应用程序包括一个应用程序进程,一个应用程序进程可以包括一个线程,也可以包括多个线程,即一个应用程序可以对应一个或者多个线程。

采集的应用程序的进程信息还可以包括应用程序进程的状态。所述状态可以包括运行、睡眠、空闲等。

采集的应用程序的进程信息还可以包括应用程序进程的启动时间和日期、应用程序进程的优先级等。

通过springboot-monitor.jar包线程采集方法,收集jvm(javavirtualmachine,java虚拟机)里的所述进程信息及线程运行情况。

可以在所述操作系统命令中以所述应用实例名称作为限定条件,采集计算机装置当前运行的应用程序的进程信息。例如,应用实例名称为spri_lcloud-rmp-prd-ins9740,则在操作系统命令中加上应用实例名称为spri_lcloud-rmp-prd-ins9740的限定条件,得到应用实例名称为spri_lcloud-rmp-prd-ins9740的应用程序的进程信息。

可以按照预设时间采集所述进程信息。例如,可以设置采集所述进程信息的时间间隔(例如每10分钟一次),按照所述时间间隔采集所述进程信息。又如,可以设置采集所述进程信息的具体时间(例如每个整点时间,如0点、1点、2点),按照所述具体时间采集所述进程信息。

采集的进程信息可以存储到指定数据库。

所述指定数据库可以是时间序列数据库(即时序数据库),例如opentsdb、nfluxdb。时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。

opentsdb是基于hbase的分布式的、可伸缩的时间序列数据库。存储到opentsdb的数据,是以metric为单位的,metric就是1个监控项,例如cpu使用率。opentsdb使用hbase作为存储,由于有良好的设计,因此对metric的数据存储支持到秒级别。opentsdb支持数据永久存储,即保存的数据不会主动删除;并且原始数据会一直保存(有些监控系统会将较久之前的数据聚合之后保存)。

influxdb是一个开源分布式时序、事件和指标数据库。influxdb使用go语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。influxdb有三大特性:1.timeseries(时间序列):可以使用与时间有关的相关函数(如最大,最小,求和等);2.metrics(度量):可以实时对大量数据进行计算;3.eevents(事件):支持任意的事件数据。

优选的,在获取系统当前运行的应用程序的进程信息时,所述方法还可以包括:生成监控信息展示界面,展示所述应用程序的进程信息及对应所使用的线程信息。

可以生成监控信息展示界面,在所述监控信息展示界面中展示所述应用程序的进程信息及对应所使用的线程信息。

如果系统中运行的应用程序进程为多个,可以得到多个应用程序的进程信息及对应所使用的线程信息。

在一具体实施例中,可以通过grafana展示所述应用程序的进程信息及对应所使用的线程信息。可以通过grafana的采集agent,传送所述应用程序的进程信息及对应所使用的线程信息到grafana平台展示。

grafana是一个可视化面板(dashboard),支持各种图表和布局展示,支持graphite、zabbix、influxdb、prometheus和opentsdb作为数据源。grafana具有以下特性:灵活丰富的图形化选项;可以混合多种风格;支持白天和夜间模式;支持多个数据源。

s12:根据所述进程信息获取每个线程当前所处的状态。

本实施中,可以通过系统的线程管理器获取线程的基本信息,所述线程的基本信息可以包括:线程名称、线程参数、线程序号、线程状态及等待获取线程的应用id号。

所述线程状态可以为空闲状态或者繁忙状态。处于空闲状态的线程没有运行应用程序,但仍占用系统资源,例如,cpu资源。处于繁忙状态的线程运行有应用程序,且可能存在应用程序等待获取该繁忙状态的线程。

s13:获取处于繁忙状态的线程的待处理任务量。

本实施例中,获取所有线程中处于繁忙状态的线程,且同时获取所有处于繁忙状态的线程中的每一个线程的待处理任务量。

根据进程信息可以获取每个线程当前所处的状态为繁忙状态或空闲状态,获取所建立的所有线程中处于繁忙状态的线程,同时获取处于繁忙状态的线程的所有待处理任务。

处于繁忙状态的线程当前正在执行任务,例如执行应用程序,可能还存在待处理的任务,例如,待处理的应用程序。根据线程的基本信息还可以获取处于繁忙状态的线程对应的等待获取线程的应用id号,根据所述等待获取线程的应用id号识别出所述线程的待处理任务量。

一个等待获取线程的应用id号可以对应一个待处理任务量,多个等待获取线程的应用id号可以对应多个待处理任务量。示例性的,等待获取线程的应用id号为5,则可以识别出所述线程的待处理任务量。

所有处于繁忙状态的线程中的每个线程的待处理任务量可以相同,也可以不同。示例性的,处于繁忙状态的线程1的待处理任务量为5,处于繁忙状态的线程2的待处理任务量为2,处于繁忙状态的线程3的待处理任务量为5。

每个处于繁忙状态的线程中的待处理任务量可以为零,也可以为多个。处于繁忙状态的线程中的待处理任务量为零表示该线程当前只有正在执行的任务,没有待处理的任务。处于繁忙状态的线程中的待处理任务量为多个表示该线程除了当前正在执行的任务外,还有多个待处理的任务。

s14:判断所有所述待处理任务量中是否有大于预设任务量阈值的目标待处理任务量。

本实施例中,可以预先设置任务量阈值,表示处于繁忙状态的线程能承载的最多的待处理任务量。

所述预设任务量阈值可以是2。

当有一个或多个待处理任务量大于预设任务量阈值,则可以确定所有所述待处理任务量中有大于预设任务量阈值的待处理任务量,将所有所述待处理任务量中有预设任务量阈值的待处理任务量称之为目标待处理任务量;当所有待处理任务量均小于或等于预设任务量阈值,则可以确定所有所述待处理任务量中没有大于预设任务量阈值的目标待处理任务量。

当确定所有所述待处理任务量中有大于预设任务量阈值的目标待处理任务量时,执行s15;当确定所有所述待处理任务量中没有大于预设任务量阈值的目标待处理任务量时,可以重新执行s11。

s15:获取处于空闲状态的线程的空闲时间。

本实施例中,获取所有线程中处于空闲状态的线程,且同时获取所有处于空闲状态的线程中的每一个线程的空闲时间。

根据进程信息可以获取所建立的所有线程中处于空闲状态的线程,同时获取处于空闲状态的线程的空闲时间。

处于空闲状态的线程当前没有执行任务,可以设置一个时钟,用以记录处于空闲状态的线程从处于空闲状态开始,统计处于空闲状态的空闲时间。

处于空闲状态的线程的空闲时间可以相同,也可以不同。示例性的,处于空闲状态的线程1的空闲时间为100秒,处于空闲状态的线程2的空闲时间为200秒,处于空闲状态的线程2的空闲时间为200秒。

s16:判断所有所述空闲时间中是否有大于预设时间阈值的目标空闲时间。

本实施例中,可以预先设置时间阈值,表示处于空闲状态的线程不执行任务的最多的空闲时间。

所述预设时间阈值可以是150秒。

当有一个或多个空闲时间大于预设时间阈值,则可以确定所有所述空闲时间中有大于预设时间阈值的空闲时间,将所有所述空闲时间中大于预设时间阈值的空闲时间称之为目标空闲时间;当所有空闲时间均小于或等于预设时间阈值,则可以确定所有所述空闲时间中没有大于预设时间阈值的目标空闲时间。

当确定所有所述空闲时间中有大于预设时间阈值的目标空闲时间时,执行s17;当确定所有所述空闲时间中没有大于预设时间阈值的目标空闲时间时,执行s18。

s17:将所述目标待处理任务量对应的待处理任务分配给所述目标空闲时间对应的线程。

本实施例中,所述将所述目标待处理任务量对应的待处理任务分配给所述目标空闲时间对应的线程可以包括:

获取所有所述待处理任务量中大于预设任务量阈值的目标待处理任务量对应的第一线程;

获取所述第一线程中的待处理任务量减去预设任务量阈值,得到第一待处理任务量;

获取所有所述空闲时间中大于预设时间阈值的目标空闲时间对应的第二线程;

将所述第一待处理任务量的待处理任务均匀分配给所述第二线程。

示例性的,假设系统中处于繁忙状态的线程1的待处理任务量为5,处于繁忙状态的线程2的待处理任务量为2,处于繁忙状态的线程3的待处理任务量为5,处于繁忙状态的线程4的待处理任务量为1,所述预设任务量阈值为2。则获取所有待处理任务量中大于预设任务量阈值的待处理任务量对应的第一线程为线程1和线程3。线程1中的待处理任务减去预设任务量阈值的第一待处理任务量为3,线程3中的待处理任务减去预设任务量阈值的第一待处理任务量为3。处于空闲状态的线程5的空闲时间为100秒,处于空闲状态的线程6的空闲时间为200秒,处于空闲状态的线程7的空闲时间为200秒,所述预设时间阈值为150秒。则获取所有空闲时间中大于预设时间阈值的空闲时间对应的第二线程为线程6、线程7。因而,可以将处于繁忙状态的线程1中的3个待处理任务分配给处于空闲状态的线程6,将处于繁忙状态的线程3中的3个待处理任务分配给处于空闲状态的线程7。

通过将处于繁忙状态的线程中超过预设任务量阈值的任务量分配给处于空闲状态中超过预设时间阈值的线程,不仅可以充分利用空闲时间长的线程分担任务量较重的繁忙线程的任务,还可以避免频繁创建新的线程或者回收已建立的线程,占用过多的系统资源,明显降低系统的反应速度。

s18:建立新的线程执行所述目标待处理任务量对应的待处理任务。

本实施例中,当没有大于预设时间阈值的空闲时间时,建立新的线程,执行所有所述待处理任务量中大于预设任务量阈值的待处理任务量对应的待处理任务。

进一步,还可以根据预设线程创建规则建立新的线程执行所述所述待处理任务量中大于预设任务量阈值的待处理任务量对应的待处理任务。

所述预设线程创建规则可以包括:根据所述待处理任务的数量建立对应的所述数量的线程数。

示例性的,处于繁忙状态的线程1的待处理任务量为5,处于繁忙状态的线程3的待处理任务量为5,则可以建立5个新的线程执行所述待处理任务。

在另一实施例中,所述基于云监控的线程控制方法还可以包括:判断处于繁忙状态的线程是否满足预设报警条件,若处于繁忙状态的线程满足预设报警条件,则进行报警。可以通过发出警报声、显示报警画面、发送报警消息、发送报警邮件等方式进行报警。

示例性的,将当前处于繁忙状态的线程的待处理任务量与同期数据进行比较,根据比较结果确定是否报警。例如,将周一上午10:00得到的处于繁忙状态的线程的待处理任务量与上周一上午10:00得到的处于繁忙状态的线程的待处理任务量进行比较,若周一上午10:00得到的处于繁忙状态的线程的待处理任务量超过上周一上午10:00得到的处于繁忙状态的线程的待处理任务量的20%,则进行报警。

综上所述,本发明实施例一提供的基于云监控的线程控制方法,能够将处于繁忙状态的线程中超过预设任务量阈值的任务量分配给处于空闲状态中超过预设时间阈值的线程,不仅可以充分利用空闲时间长的线程分担任务量较重的繁忙线程的任务,还可以避免频繁创建新的线程或者回收已建立的线程,占用过多的系统资源,明显降低系统的反应速度。使得处于繁忙状态的线程的待处理任务不会太多,而处理空闲状态的线程也不会空闲较久,保证了系统资源能够最大程度得到合理化的利用,从而能够有效的保证系统正常运行又能节约系统资源。

另外,传统的主机层面的进程无法区分是应用程序进程还是操作系统进程,本发明可以获取运行的应用程序的进程信息,根据运行的应用程序的进程信息获取应用程序所使用的线程,从而提高了监控应用程序当前线程数及当前线程所处的状态。

以上所述,仅是本发明的具体实施方式,但本发明的保护范围并不局限于此,对于本领域的普通技术人员来说,在不脱离本发明创造构思的前提下,还可以做出改进,但这些均属于本发明的保护范围。

下面结合第2至3图,分别对实现上述基于云监控的线程控制方法的电子设备的功能模块及硬件结构进行介绍。

实施例二

图2为本发明基于云监控的线程控制装置较佳实施例中的功能模块图。

在一些实施例中,所述基于云监控的线程控制装置20运行于电子设备中。所述基于云监控的线程控制装置20可以包括多个由程序代码段所组成的功能模块。所述基于云监控的线程控制装置20中的各个程序段的程序代码可以存储于存储器中,并由至少一个处理器所执行,以执行(详见图1及其相关描述)对电子设备中的应用程序的当前线程数指标进行监控。

本实施例中,所述基于云监控的线程控制装置20根据其所执行的功能,可以被划分为多个功能模块。所述功能模块可以包括:第一获取模块201、展示模块202、第二获取模块203、第三获取模块204、第一判断模块205、第四获取模块206、第二判断模块207、分配模块208、执行模块209及警报模块210。本发明所称的模块是指一种能够被至少一个处理器所执行并且能够完成固定功能的一系列计算机程序段,其存储在存储器中。在一些实施例中,关于各模块的功能将在后续的实施例中详述。

第一获取模块201,用于获取系统当前运行的应用程序的进程信息。

电子设备的系统可以运行一个应用程序,也可以运行多个应用程序。所述应用程序可以是java应用程序。系统在运行应用程序时,可以获取系统当前运行的应用程序的进程信息,便于后续根据所述进程信息获取线程所处的状态,根据线程所处的状态执行相应的操作。

应用程序的每个应用实例对应应用程序的一个进程。

在本实施例中,获取系统当前运行的应用程序的进程信息可以包括:

1)从应用程序的环境配置文件中获取应用程序的应用实例名称。

所述环境配置文件可以是env文件。读取应用程序的环境配置文件后,从读取的环境配置文件中获取应用实例名称spri_lcloud-rmp-prd-ins9740。

2)根据所述应用实例名称采集系统当前运行的应用程序的进程信息。

采集的应用程序的进程信息包括应用程序进程的进程标识符(processidentifier,pid)。进程标识符用于区分各个进程。进程标识符可以是一个数字编号,如四位的数字编号。

采集的应用程序的进程信息还可以包括应用程序进程所属的应用程序及包括的线程数。一个应用程序包括一个应用程序进程,一个应用程序进程可以包括一个线程,也可以包括多个线程,即一个应用程序可以对应一个或者多个线程。

采集的应用程序的进程信息还可以包括应用程序进程的状态。所述状态可以包括运行、睡眠、空闲等。

采集的应用程序的进程信息还可以包括应用程序进程的启动时间和日期、应用程序进程的优先级等。

通过springboot-monitor.jar包线程采集方法,收集jvm(javavirtualmachine,java虚拟机)里的所述进程信息及线程运行情况。

可以在所述操作系统命令中以所述应用实例名称作为限定条件,采集计算机装置当前运行的应用程序的进程信息。例如,应用实例名称为spri_lcloud-rmp-prd-ins9740,则在操作系统命令中加上应用实例名称为spri_lcloud-rmp-prd-ins9740的限定条件,得到应用实例名称为spri_lcloud-rmp-prd-ins9740的应用程序的进程信息。

可以按照预设时间采集所述进程信息。例如,可以设置采集所述进程信息的时间间隔(例如每10分钟一次),按照所述时间间隔采集所述进程信息。又如,可以设置采集所述进程信息的具体时间(例如每个整点时间,如0点、1点、2点),按照所述具体时间采集所述进程信息。

采集的进程信息可以存储到指定数据库。

所述指定数据库可以是时间序列数据库(即时序数据库),例如opentsdb、nfluxdb。时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。

opentsdb是基于hbase的分布式的、可伸缩的时间序列数据库。存储到opentsdb的数据,是以metric为单位的,metric就是1个监控项,例如cpu使用率。opentsdb使用hbase作为存储,由于有良好的设计,因此对metric的数据存储支持到秒级别。opentsdb支持数据永久存储,即保存的数据不会主动删除;并且原始数据会一直保存(有些监控系统会将较久之前的数据聚合之后保存)。

influxdb是一个开源分布式时序、事件和指标数据库。influxdb使用go语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。influxdb有三大特性:1.timeseries(时间序列):可以使用与时间有关的相关函数(如最大,最小,求和等);2.metrics(度量):可以实时对大量数据进行计算;3.eevents(事件):支持任意的事件数据。

优选的,在第一获取模块201获取系统当前运行的应用程序的进程信息时,所述基于云监控的线程控制装置20还可以包括:展示模块202,用于生成监控信息展示界面,展示所述应用程序的进程信息及对应所使用的线程信息。

可以生成监控信息展示界面,在所述监控信息展示界面中展示所述应用程序的进程信息及对应所使用的线程信息。

如果系统中运行的应用程序进程为多个,可以得到多个应用程序的进程信息及对应所使用的线程信息。

在一具体实施例中,可以通过grafana展示所述应用程序的进程信息及对应所使用的线程信息。可以通过grafana的采集agent,传送所述应用程序的进程信息及对应所使用的线程信息到grafana平台展示。

grafana是一个可视化面板(dashboard),支持各种图表和布局展示,支持graphite、zabbix、influxdb、prometheus和opentsdb作为数据源。grafana具有以下特性:灵活丰富的图形化选项;可以混合多种风格;支持白天和夜间模式;支持多个数据源。

第二获取模块203,用于根据所述进程信息获取每个线程当前所处的状态。

本实施中,可以通过系统的线程管理器获取线程的基本信息,所述线程的基本信息可以包括:线程名称、线程参数、线程序号、线程状态及等待获取线程的应用id号。

所述线程状态可以为空闲状态或者繁忙状态。处于空闲状态的线程没有运行应用程序,但仍占用系统资源,例如,cpu资源。处于繁忙状态的线程运行有应用程序,且可能存在应用程序等待获取该繁忙状态的线程。

第三获取模块204,用于获取处于繁忙状态的线程的待处理任务量。

本实施例中,获取所有线程中处于繁忙状态的线程,且同时获取所有处于繁忙状态的线程中的每一个线程的待处理任务量。

根据进程信息可以获取每个线程当前所处的状态为繁忙状态或空闲状态,获取所建立的所有线程中处于繁忙状态的线程,同时获取处于繁忙状态的线程的所有待处理任务。

处于繁忙状态的线程当前正在执行任务,例如执行应用程序,可能还存在待处理的任务,例如,待处理的应用程序。根据线程的基本信息还可以获取处于繁忙状态的线程对应的等待获取线程的应用id号,根据所述等待获取线程的应用id号识别出所述线程的待处理任务量。

一个等待获取线程的应用id号可以对应一个待处理任务量,多个等待获取线程的应用id号可以对应多个待处理任务量。示例性的,等待获取线程的应用id号为5,则可以识别出所述线程的待处理任务量。

所有处于繁忙状态的线程中的每个线程的待处理任务量可以相同,也可以不同。示例性的,处于繁忙状态的线程1的待处理任务量为5,处于繁忙状态的线程2的待处理任务量为2,处于繁忙状态的线程3的待处理任务量为5。

每个处于繁忙状态的线程中的待处理任务量可以为零,也可以为多个。处于繁忙状态的线程中的待处理任务量为零表示该线程当前只有正在执行的任务,没有待处理的任务。处于繁忙状态的线程中的待处理任务量为多个表示该线程除了当前正在执行的任务外,还有多个待处理的任务。

第一判断模块205,用于判断所有所述待处理任务量中是否有大于预设任务量阈值的目标待处理任务量。

本实施例中,可以预先设置任务量阈值,表示处于繁忙状态的线程能承载的最多的待处理任务量。

所述预设任务量阈值可以是2。

当有一个或多个待处理任务量大于预设任务量阈值,则可以确定所有所述待处理任务量中有大于预设任务量阈值的待处理任务量,将所有所述待处理任务量中有预设任务量阈值的待处理任务量称之为目标待处理任务量;当所有待处理任务量均小于或等于预设任务量阈值,则可以确定所有所述待处理任务量中没有大于预设任务量阈值的目标待处理任务量。

第四获取模块206,用于当第一判断模块205确定所有所述待处理任务量中有大于预设任务量阈值的目标待处理任务量时,获取处于空闲状态的线程的空闲时间。

本实施例中,获取所有线程中处于空闲状态的线程,且同时获取所有处于空闲状态的线程中的每一个线程的空闲时间。

根据进程信息可以获取所建立的所有线程中处于空闲状态的线程,同时获取处于空闲状态的线程的空闲时间。

处于空闲状态的线程当前没有执行任务,可以设置一个时钟,用以记录处于空闲状态的线程从处于空闲状态开始,统计处于空闲状态的空闲时间。

处于空闲状态的线程的空闲时间可以相同,也可以不同。示例性的,处于空闲状态的线程1的空闲时间为100秒,处于空闲状态的线程2的空闲时间为200秒,处于空闲状态的线程2的空闲时间为200秒。

第一获取模块201,还用于当第一判断模块205确定所有所述待处理任务量中没有大于预设任务量阈值的目标待处理任务量时,获取系统当前运行的应用程序的进程信息。

第二判断模块207,用于判断所有所述空闲时间中是否有大于预设时间阈值的目标空闲时间。

本实施例中,可以预先设置时间阈值,表示处于空闲状态的线程不执行任务的最多的空闲时间。

所述预设时间阈值可以是150秒。

当有一个或多个空闲时间大于预设时间阈值,则可以确定所有所述空闲时间中有大于预设时间阈值的空闲时间,将所有所述空闲时间中大于预设时间阈值的空闲时间称之为目标空闲时间;当所有空闲时间均小于或等于预设时间阈值,则可以确定所有所述空闲时间中没有大于预设时间阈值的目标空闲时间。

分配模块208,用于当第二判断模块207确定所有所述空闲时间中有大于预设时间阈值的目标空闲时间时,将所述目标待处理任务量对应的待处理任务分配给所述目标空闲时间对应的线程。

本实施例中,所述分配模块208将所述目标待处理任务量对应的待处理任务分配给所述目标空闲时间对应的线程可以包括:

获取所有所述待处理任务量中大于预设任务量阈值的目标待处理任务量对应的第一线程;

获取所述第一线程中的待处理任务量减去预设任务量阈值,得到第一待处理任务量;

获取所有所述空闲时间中大于预设时间阈值的目标空闲时间对应的第二线程;

将所述第一待处理任务量的待处理任务均匀分配给所述第二线程。

示例性的,假设系统中处于繁忙状态的线程1的待处理任务量为5,处于繁忙状态的线程2的待处理任务量为2,处于繁忙状态的线程3的待处理任务量为5,处于繁忙状态的线程4的待处理任务量为1,所述预设任务量阈值为2。则获取所有待处理任务量中大于预设任务量阈值的待处理任务量对应的第一线程为线程1和线程3。线程1中的待处理任务减去预设任务量阈值的第一待处理任务量为3,线程3中的待处理任务减去预设任务量阈值的第一待处理任务量为3。处于空闲状态的线程5的空闲时间为100秒,处于空闲状态的线程6的空闲时间为200秒,处于空闲状态的线程7的空闲时间为200秒,所述预设时间阈值为150秒。则获取所有空闲时间中大于预设时间阈值的空闲时间对应的第二线程为线程6、线程7。因而,可以将处于繁忙状态的线程1中的3个待处理任务分配给处于空闲状态的线程6,将处于繁忙状态的线程3中的3个待处理任务分配给处于空闲状态的线程7。

通过将处于繁忙状态的线程中超过预设任务量阈值的任务量分配给处于空闲状态中超过预设时间阈值的线程,不仅可以充分利用空闲时间长的线程分担任务量较重的繁忙线程的任务,还可以避免频繁创建新的线程或者回收已建立的线程,占用过多的系统资源,明显降低系统的反应速度。

执行模块209,用于当第二判断模块207确定所有所述空闲时间中没有大于预设时间阈值的空闲时间时,建立新的线程执行所述目标待处理任务量对应的待处理任务。

本实施例中,当没有大于预设时间阈值的空闲时间时,建立新的线程,执行所有所述待处理任务量中大于预设任务量阈值的待处理任务量对应的待处理任务。

进一步,所述执行模块209,还可以根据预设线程创建规则建立新的线程执行所述所述待处理任务量中大于预设任务量阈值的待处理任务量对应的待处理任务。

所述预设线程创建规则可以包括:根据所述待处理任务的数量建立对应的所述数量的线程数。

示例性的,处于繁忙状态的线程1的待处理任务量为5,处于繁忙状态的线程3的待处理任务量为5,则可以建立5个新的线程执行所述待处理任务。

在另一实施例中,所述基于云监控的线程控制装置20还可以包括:警报模块210,用于判断处于繁忙状态的线程是否满足预设报警条件,若处于繁忙状态的线程满足预设报警条件,则进行报警。可以通过发出警报声、显示报警画面、发送报警消息、发送报警邮件等方式进行报警。

示例性的,将当前处于繁忙状态的线程的待处理任务量与同期数据进行比较,根据比较结果确定是否报警。例如,将周一上午10:00得到的处于繁忙状态的线程的待处理任务量与上周一上午10:00得到的处于繁忙状态的线程的待处理任务量进行比较,若周一上午10:00得到的处于繁忙状态的线程的待处理任务量超过上周一上午10:00得到的处于繁忙状态的线程的待处理任务量的20%,则进行报警。

综上所述,本发明实施例二提供的基于云监控的线程控制装置,能够将处于繁忙状态的线程中超过预设任务量阈值的任务量分配给处于空闲状态中超过预设时间阈值的线程,不仅可以充分利用空闲时间长的线程分担任务量较重的繁忙线程的任务,还可以避免频繁创建新的线程或者回收已建立的线程,占用过多的系统资源,明显降低系统的反应速度。使得处于繁忙状态的线程的待处理任务不会太多,而处理空闲状态的线程也不会空闲较久,保证了系统资源能够最大程度得到合理化的利用,从而能够有效的保证系统正常运行又能节约系统资源。

另外,传统的主机层面的进程无法区分是应用程序进程还是操作系统进程,本发明可以获取运行的应用程序的进程信息,根据运行的应用程序的进程信息获取应用程序所使用的线程,从而提高了监控应用程序当前线程数及当前线程所处的状态。

上述以软件功能模块的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机电子设备(可以是个人计算机,双屏电子设备,或者网络电子设备等)或处理器(processor)执行本发明各个实施例所述方法的部分。

实施例三

图3为本发明实施例三提供的电子设备的示意图。

所述电子设备3包括:存储器31、至少一个处理器32、存储在所述存储器31中并可在所述至少一个处理器32上运行的计算机程序33及至少一条通讯总线34。

所述至少一个处理器32执行所述计算机程序33时实现上述基于云监控的线程控制方法实施例中的步骤。

示例性的,所述计算机程序33可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器31中,并由所述至少一个处理器32执行。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序33在所述电子设备3中的执行过程。

所述电子设备3可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算电子设备。本领域技术人员可以理解,所述示意图3仅仅是电子设备3的示例,并不构成对电子设备3的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述电子设备3还可以包括输入输出电子设备、网络接入电子设备、总线等。

所述至少一个处理器32可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。该处理器32可以是微处理器或者该处理器32也可以是任何常规的处理器等,所述处理器32是所述电子设备3的控制中心,利用各种接口和线路连接整个电子设备3的各个部分。

所述存储器31可用于存储所述计算机程序33和/或模块/单元,所述处理器32通过运行或执行存储在所述存储器31内的计算机程序和/或模块/单元,以及调用存储在存储器31内的数据,实现所述电子设备3的各种功能。所述存储器31可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备3的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器31可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

所述电子设备3集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

在本发明所提供的几个实施例中,应该理解到,所揭露的服务器和方法,可以通过其它的方式实现。例如,以上所描述的服务器实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

另外,在本发明各个实施例中的各功能单元可以集成在相同处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在相同单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。

对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1