可左右滑动选省市

线程池性能监控方法、装置、设备和存储介质

更新时间:2024-07-01
线程池性能监控方法、装置、设备和存储介质 专利申请类型:发明专利;
源自:北京高价值专利检索信息库;

专利名称:线程池性能监控方法、装置、设备和存储介质

专利类型:发明专利

专利申请号:CN202010796290.0

专利申请(专利权)人:北京沃东天骏信息技术有限公司,北京京东世纪贸易有限公司
权利人地址:北京市大兴区北京经济技术开发区科创十一街18号院2号楼4层A402室

专利发明(设计)人:吴风浪

专利摘要:本发明实施例公开了一种线程池性能监控方法、装置、设备和存储介质。涉及互联网技术领域,所述方法包括:接收任务处理请求,启动运行线程池代码以对所述任务处理请求进行处理;基于预先设置在所述线程池代码中预设位置的监控代码,将执行所述预设位置处的代码的时间信息记录在性能日志中;其中,所述监控代码是根据需要监控的性能指标对应的待监控操作预先设置的,所述预设位置处的代码是所述待监控操作对应的代码;根据所述性能日志确定所述性能指标,并将所述性能指标进行输出。采用本方案可以实现实时对线程池的各性能进行监控的效果。

主权利要求:
1.一种线程池性能监控方法,其特征在于,包括:
接收任务处理请求,启动运行线程池代码以对所述任务处理请求进行处理;
基于预先设置在所述线程池代码中预设位置的监控代码,将执行所述预设位置处的代码的时间信息记录在性能日志中;其中,所述监控代码是根据需要监控的性能指标对应的待监控操作预先设置的,所述预设位置处的代码是所述待监控操作对应的代码;
根据所述性能日志确定所述性能指标,并将所述性能指标进行输出;
基于各性能指标与预设标准性能指标的差值,对应调整线程池配置参数;
其中,所述性能指标包括核心线程使用率、队列使用率、任务等待时间和扩展线程存活率中的至少一种;
所述基于各性能指标与预设标准性能指标的差值,对应调整线程池配置参数,包括:当核心线程使用率大于标准核心线程使用率时,增加核心线程数量,当核心线程使用率小于标准核心线程使用率时,减少核心线程数量;
当队列使用率大于标准队列使用率,和/或,任务等待时间小于标准任务等待时间时,增加队列容量,当队列使用率大于标准队列使用率,和/或,任务等待时间小于标准任务等待时间时,减少队列容量;
当扩展线程存活率大于标准扩展线程存活率时,增加核心线程数量或增加总线程数量,其中,所述总线程数量为核心线程数量和扩展线程数量的和。
2.根据权利要求1所述的方法,其特征在于,所述基于预先设置在所述线程池代码中预设位置的监控代码,将执行所述预设位置处的代码的时间信息记录在性能日志中,包括:基于分别预先在所述线程池代码中的核心线程任务开始执行处和核心线程任务执行成功处设置的监控代码,分别将所述线程池的核心线程任务开始执行时间和核心线程任务执行成功时间记录在性能日志中。
3.根据权利要求1所述的方法,其特征在于,所述基于预先设置在所述线程池代码中预设位置的监控代码,将执行所述预设位置处的代码的时间信息记录在性能日志中,包括:基于分别预先在所述线程池代码中的线程池的任务入队列处和任务出队列处设置的监控代码,分别将任务入队列时间和任务出队列时间记录在性能日志中。
4.根据权利要求1所述的方法,其特征在于,所述基于预先设置在所述线程池代码中预设位置的监控代码,将执行所述预设位置处的代码的时间信息记录在性能日志中,包括:基于分别预先在所述线程池代码中的创建扩展线程处和销毁扩展线程处设置的监控代码,分别将创建扩展线程时间和销毁扩展线程时间记录在性能日志中。
5.根据权利要求1‑4中任一项所述的方法,其特征在于,所述线程池代码的运行包括:判断所述线程池的核心线程数量是否小于预设核心线程数量;
若是,则创建核心线程,基于核心线程获取所述任务处理请求对应的任务,并执行获取的任务;
若否,则判断所述线程池的队列中是否有空闲位置;
若有空闲位置,则将所述任务加入所述队列中,在已创建的核心线程或扩展线程空闲时从所述队列中获取所述任务并执行;
若无空闲位置,则判断扩展线程数量是否小于预设扩展线程数量;
若小于预设扩展线程数量,则创建扩展线程,基于所述扩展线程获取所述任务,并执行获取的任务,若所述任务执行完成后,在预设时间段内所述扩展线程无新的任务获取,则销毁所述扩展线程;
若不小于预设扩展线程数量,则拒绝接收所述任务。
6.一种线程池性能监控装置,其特征在于,包括:
线程池代码启动模块,用于接收任务处理请求,启动运行线程池代码以对所述任务处理请求进行处理;
监控模块,用于基于预先设置在所述线程池代码中预设位置的监控代码,将执行所述预设位置处的代码的时间信息记录在性能日志中;其中,所述监控代码是根据需要监控的性能指标对应的待监控操作预先设置的,所述预设位置处的代码是所述待监控操作对应的代码;
性能指标确定模块,用于根据所述性能日志确定所述性能指标,并将所述性能指标进行输出;
线程池配置参数调整模块,用于基于各性能指标与预设标准性能指标的差值,对应调整线程池配置参数;
其中,所述性能指标包括核心线程使用率、队列使用率、任务等待时间和扩展线程存活率中的至少一种;
所述线程池配置参数调整模块,具体用于:
当核心线程使用率大于标准核心线程使用率时,增加核心线程数量,当核心线程使用率小于标准核心线程使用率时,减少核心线程数量;
当队列使用率大于标准队列使用率,和/或,任务等待时间小于标准任务等待时间时,增加队列容量,当队列使用率大于标准队列使用率,和/或,任务等待时间小于标准任务等待时间时,减少队列容量;
当扩展线程存活率大于标准扩展线程存活率时,增加核心线程数量或增加总线程数量,其中,所述总线程数量为核心线程数量和扩展线程数量的和。
7.一种设备,其特征在于,所述设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1‑5中任一所述的线程池性能监控方法。
8.一种包含计算机可执行指令的存储介质,其特征在于,所述计算机可执行指令在由计算机处理器执行时用于执行如权利要求1‑5中任一所述的线程池性能监控方法。 说明书 : 线程池性能监控方法、装置、设备和存储介质技术领域[0001] 本发明实施例涉及互联网技术,尤其涉及一种线程池性能监控方法、装置、设备和存储介质。背景技术[0002] 根据摩尔定律,单核中央处理器的性能已接近理论瓶颈,中央处理器朝着多核多线程方向发展。在大型电商系统中,为了提高软件系统的性能,发挥多核中央处理器的优势,线程池技术得到的广泛使用。[0003] 在实现本发明的过程中,发明人发现现有技术中至少存在以下技术问题:[0004] 在线程池使用时,多基于研发人员的经验对线程池配置参数进行设置,但是这种方法,由于人为的差异性,各线程池参数配置也具有很大的差异性,无法获知不同的线程池参数配置下的线程池性能。发明内容[0005] 本发明实施例提供一种线程池性能监控方法、装置、设备和存储介质,以实现可实时对线程池的各性能进行监控的效果。[0006] 第一方面,本发明实施例提供了一种线程池性能监控方法,该方法包括:[0007] 接收任务处理请求,启动运行线程池代码以对所述任务处理请求进行处理;[0008] 基于预先设置在所述线程池代码中预设位置的监控代码,将执行所述预设位置处的代码的时间信息记录在性能日志中;其中,所述监控代码是根据需要监控的性能指标对应的待监控操作预先设置的,所述预设位置处的代码是所述待监控操作对应的代码;[0009] 根据所述性能日志确定所述性能指标,并将所述性能指标进行输出。[0010] 第二方面,本发明实施例还提供了一种线程池性能监控装置,该装置包括:[0011] 线程池代码启动模块,用于接收任务处理请求,启动运行线程池代码以对所述任务处理请求进行处理;[0012] 监控模块,用于基于预先设置在所述线程池代码中预设位置的监控代码,将执行所述预设位置处的代码的时间信息记录在性能日志中;其中,所述监控代码是根据需要监控的性能指标对应的待监控操作预先设置的,所述预设位置处的代码是所述待监控操作对应的代码;[0013] 性能指标确定模块,用于根据所述性能日志确定所述性能指标,并将所述性能指标进行输出。[0014] 第三方面,本发明实施例还提供了一种设备,该设备包括:[0015] 一个或多个处理器;[0016] 存储装置,用于存储一个或多个程序;[0017] 当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明实施例中任一所述的线程池性能监控方法。[0018] 第四方面,本发明实施例还提供了一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行本发明实施例中任一所述的线程池性能监控方法。[0019] 本发明实施例的技术方案,通过接收任务处理请求,启动运行线程池代码以对任务处理请求进行处理,通过预先设置在线程池代码中预设位置的监控代码,将执行预设位置处的代码的时间信息记录在性能日志中,这样实现了对线程池代码的运行的实时监控的目的,进而根据对线程池代码的监控,实现了实时对线程池的各性能进行监控的效果。根据性能日志中记录的各时间信息,确定各性能指标,这样有便于实时了解线程池的各性能指标,以便基于各性能指标对线程池配置进行评价。附图说明[0020] 图1是本发明实施例一中的线程池性能监控方法的流程图;[0021] 图2是本发明实施例二中的线程池性能监控方法的流程图;[0022] 图3是本发明实施例二中的线程池代码运行过程示意图;[0023] 图4是本发明实施例三中的线程池性能监控装置的结构示意图;[0024] 图5是本发明实施例四中的一种设备的结构示意图。具体实施方式[0025] 下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。[0026] 实施例一[0027] 图1为本发明实施例一提供的线程池性能监控方法的流程图,本实施例可适用于对线程池运行过程中的各性能进行监控的情况,该方法可以由线程池性能监控装置来执行,该线程池性能监控装置可以由软件和/或硬件来实现,该线程池性能监控装置可以配置在计算设备上,具体包括如下步骤:[0028] S110、接收任务处理请求,启动运行线程池代码以对任务处理请求进行处理。[0029] 示例性的,任务处理请求可以是对某一或某几个任务进行处理的请求。例如,可以是当接收到某一个任务时,即可生成对该任务进行处理的请求。[0030] 当接收到某一个任务时,生成对该任务进行处理的请求,即可启动线程池代码,执行该线程池代码,以对该任务处理请求进行处理。[0031] S120、基于预先设置在线程池代码中预设位置的监控代码,将执行预设位置处的代码的时间信息记录在性能日志中;其中,监控代码是根据需要监控的性能指标对应的待监控操作预先设置的,预设位置处的代码是待监控操作对应的代码。[0032] 示例性的,监控代码是根据需要监控的性能指标对应的待监控操作预先在对应的预设位置处设置的。[0033] 这里的性能指标可以但不限于包括:核心线程使用率、队列使用率、任务等待时间和扩展线程存活率等。[0034] 相对应的,这里的待监控操作可以但不限于包括:执行核心线程任务、执行任务入队任务、任务出队任务、执行创建扩展线程任务和执行销毁扩展线程任务等。[0035] 预设位置可以是在线程池代码中与要监控的性能指标对应的待监控操作的代码处的位置。例如,若性能指标为核心线程使用率,预设位置可以是核心线程开始执行任务的位置和核心线程结束执行任务的位置。[0036] 预设位置处的代码可以是待监控操作对应的代码,即用于执行待监控操作的代码。[0037] 需要说明的是,在线程池代码中预设位置设置监控代码,可以是通过在线程池代码的spring类中声明一个切面类,在这个切面类中声明一个监控方法,并在该监控方法中注入监控代码。即将监控代码封装为线程池代理类,当接收到任务处理请求后,启动运行线程池代码对任务处理请求进行处理,在监控代码处生成相应的性能日志。在该性能日志中包括执行预设位置处的监控代码的时间信息。这样通过代理模式植入监控代码,实现了对线程池的实时监控。[0038] 可选的,当性能指标为核心线程使用率时,所述基于预先设置在线程池代码中预设位置的监控代码,将执行预设位置处的代码的时间信息记录在性能日志中,具体可以是:基于分别预先在线程池代码中的核心线程任务开始执行处和核心线程任务执行成功处设置的监控代码,分别将线程池的核心线程任务开始执行时间和核心线程任务执行成功时间记录在性能日志中。[0039] 示例性的,当性能指标为核心线程使用率时,分别预先在线程池代码中的核心线程任务开始执行处和核心线程任务执行成功处设置监控代码,这样当线程池代码运行过程中,即可分别将线程池的核心线程任务开始执行时间和核心线程任务执行成功时间记录在性能日志中。这样以便后续基于核心线程任务开始执行时间和核心线程任务执行成功时间计算得到核心线程使用率。[0040] 可选的,当性能指标为队列使用率和/或任务等待时间时,所述基于预先设置在线程池代码中预设位置的监控代码,将执行预设位置处的代码的时间信息记录在性能日志中,具体可以是:基于分别预先在线程池代码中的线程池的任务入队列处和任务出队列处设置的监控代码,分别将任务入队列时间和任务出队列时间记录在性能日志中。[0041] 示例性的,当性能指标为队列使用率和/或任务等待时间时,可分别预先在线程池代码中的线程池的任务入队列处和任务出队列处设置监控代码,这样当线程池代码运行过程中,即可分别将任务入队列时间和任务出队列时间记录在性能日志中。这样以便后续基于任务入队列时间和任务出队列时间计算得到队列使用率和/或任务等待时间。[0042] 可选的,当性能指标为扩展线程存活率时,所述基于预先设置在线程池代码中预设位置的监控代码,将执行预设位置处的代码的时间信息记录在性能日志中,具体可以是:基于分别预先在线程池代码中的创建扩展线程处和销毁扩展线程处设置的监控代码,分别将创建扩展线程时间和销毁扩展线程时间记录在性能日志中。[0043] 示例性的,当性能指标为扩展线程存活率时,可分别预先在线程池代码中的创建扩展线程处和销毁扩展线程处设置监控代码,这样当线程池代码运行过程中,即可分别将创建扩展线程时间和销毁扩展线程时间记录在性能日志中。这样以便后续基于创建扩展线程时间和销毁扩展线程时间计算得到扩展线程存活率。[0044] 这样通过预先设置在线程池代码中预设位置的监控代码,将执行预设位置处的代码的时间信息记录在性能日志中,这样实现了对线程池代码的运行的实时监控的目的,进而根据对线程池代码的监控,实现了实时对线程池的各性能进行监控的效果。[0045] S130、根据性能日志确定性能指标,并将性能指标进行输出。[0046] 示例性的,根据性能日志中记录的执行预设位置处的监控代码的时间信息,即可确定各性能指标,并将各性能指标进行输出。[0047] 可选的,可以根据性能日志中记录的核心线程任务开始执行时间和核心线程任务执行成功时间,确定核心线程使用率。[0048] 具体的可以是,根据核心线程任务开始执行时间和核心线程任务执行成功时间,可得到核心线程执行任务的时长,根据核心线程执行任务的时长以及核心线程的数量,可得到核心线程执行任务的总时长。[0049] 例如,核心线程数量为3个,第一个核心线程执行任务时,开始执行时间为8点,任务执行成功时间为8点0.1秒,则该核心线程执行任务的时长为0.1秒。第二个核心线程执行任务时,开始执行时间为8点,任务执行成功时间为8点0.2秒,则该核心线程执行任务的时长为0.2秒。第三个核心线程执行任务时,开始执行时间为8点,任务执行成功时间为8点0.15秒,则该核心线程执行任务的时长为0.15秒。则核心线程执行任务的总时长为0.1+0.2+0.15=0.45秒。[0050] 根据核心线程执行任务的总时长与预设总时长,具体可以是:将核心线程执行任务总时长与预设总时长的比值确定为核心线程使用率,即核心线程使用率=核心线程执行任务总时长/预设总时长。这里的预设时长可以是根据用户需求自行设定的,这里不做限定。[0051] 这里的预设总时长可以是根据预设时长和核心线程的数量确定。例如,用户要统计从8点到8点1秒这一秒钟内的核心线程的使用率,则8点到8点1秒这一秒钟即为预设时长,若核心线程的数量为3个,则预设总时长=1*3=3秒。[0052] 然后根据公式:核心线程使用率=核心线程执行任务总时长/预设总时长,即0.45/3=15%。即在8点到8点1秒这一秒钟内核心线程使用率为15%。[0053] 可选的,可以根据性能日志中记录的任务入队列时间和任务出队列时间,确定队列使用率和/或任务等待时间。[0054] 具体的可以是,根据任务入队列时间和任务出队列时间的差值,即可确定任务在队列中等待的时间。还可以是根据任务入队列时间和任务出队列时间,利用任务等待时间统计算法模型,统计得到任务在队列中的等待时间。[0055] 根据任务在队列中的等待时间以及预设时长,根据公式:队列使用率=队列存放任务时长/预设时长,即可确定队列使用率。例如,任务入队列时间为8点0.1秒,任务出队列时间为点0.15秒,则任务在队列中的存放时长为0.05秒,若要统计8点到8点1秒这一秒钟内队列使用率,则预设时长为8点到8点1秒这一秒钟,队列使用率=0.05/1=5%,即在8点到8点1秒这一秒钟内,队列使用率为5%。[0056] 可选的,可以根据性能日志中记录的创建扩展线程时间和销毁扩展线程时间,确定扩展线程存活率。[0057] 具体的可以是,根据创建扩展线程时间和销毁扩展线程时间,根据公式:扩展线程存活率=(创建线程数‑销毁线程数)/创建线程数,即可确定扩展线程存活率。[0058] 例如,若要统计在8点到8点1秒这一秒钟内,扩展线程存活率。若在8点时创建了A线程,在8点0.1秒创建了B线程,在8点0.11秒销毁了A线程,在8点0.2秒创建了C线程,则在8点到8点1秒这一秒钟内,扩展线程存活率=(3‑1)/3=66.7%,即在8点到8点1秒这一秒钟内,扩展线程存活率为66.7%。[0059] 这样根据性能日志中记录的各时间信息,即可确定各性能指标,这样有便于实时了解线程池的各性能指标,以便基于各性能指标对线程池配置进行评价。[0060] 本发明实施例的技术方案,通过接收任务处理请求,启动运行线程池代码以对任务处理请求进行处理,通过预先设置在线程池代码中预设位置的监控代码,将执行预设位置处的代码的时间信息记录在性能日志中,这样实现了对线程池代码的运行的实时监控的目的,进而根据对线程池代码的监控,实现了实时对线程池的各性能进行监控的效果。根据性能日志中记录的各时间信息,确定各性能指标,这样有便于实时了解线程池的各性能指标,以便基于各性能指标对线程池配置进行评价。[0061] 实施例二[0062] 图2为本发明实施例二提供的线程池性能监控方法的流程图,本发明实施例与上述实施例中各个可选方案可以结合。在本发明实施例中,可选的,在输出各性能指标后,所述方法还包括:基于各性能指标与预设标准性能指标的差值,对应调整线程池配置参数。其中与上述各实施例相同或相应的术语的解释在此不再赘述。[0063] 如图2所示,本发明实施例的方法具体包括如下步骤:[0064] S210、接收任务处理请求,启动运行线程池代码以对任务处理请求进行处理。[0065] 可选的,当接收到任务处理请求后,启动运行线程池,这里线程池代码的运行具体可以是参考图3所述的线程池代码运行过程示意图:[0066] 判断线程池的核心线程数量是否小于预设核心线程数量;[0067] 若是,则创建核心线程,基于核心线程获取所述任务处理请求对应的任务,并执行获取的任务;[0068] 若否,则判断线程池的队列中是否有空闲位置;[0069] 若有空闲位置,则将任务加入队列中,在已创建的核心线程或扩展线程空闲时从队列中获取任务并执行;[0070] 若无空闲位置,则判断扩展线程数量是否小于预设扩展线程数量;[0071] 若小于预设扩展线程数量,则创建扩展线程,基于扩展线程获取任务,并执行获取的任务,若任务执行完成后,在预设时间段内扩展线程无新的任务获取,则销毁扩展线程;[0072] 若不小于预设扩展线程数量,则拒绝接收任务。[0073] 示例性的,这里的预设核心线程数量可以是预先设置的核心线程的数量。[0074] 预设扩展线程数量可以是预先设置的扩展线程的数量。[0075] 预设时间段可以是预先设置的时间段,例如,可以是10毫秒。[0076] 当接收到一个任务时,先判断线程池的核心线程数量是否小于预设核心线程数量,当线程池的核心线程数量小于预设核心线程数量时,且此时,各核心线程均在执行任务,则可重新创建一个核心线程,用于执行刚接收到的任务,创建的核心线程从队列中拉取任务,在图3中的监控点1处将各核心线程任务开始执行时间和任务执行成功时间记录在性能日志中。[0077] 当线程池的核心线程数量等于预设核心线程数量时(即核心线程数量已满),此时,判断队列中是否还有空闲位置,若有空闲位置,则将任务存放在队列中,并在图3中的监控点2处将任务入队列时间和任务出队列时间记录在性能日志中。[0078] 若队列中没有空闲位置,则判断扩展线程数量是否小于预设扩展线程数量,若扩展线程数量小于预设扩展线程数量,且此时,各扩展线程均在执行任务,则可重新创建一个扩展线程,用于执行刚接收到的任务,创建的扩展线程从队列中拉取任务,在图3中的监控点3处将创建各扩展线程的时间记录在性能日志中。当新创建的扩展线程中的任务执行成功后,在预设时间段内若无新的任务获取,则销毁该新创建的扩展线程,并在监控点3处将销毁该扩展线程的时间记录在性能日志中。[0079] 若扩展线程数量等于预设扩展线程数量(即扩展线程数量已满),则启动拒绝策略,即拒绝该新接收的任务。[0080] 需要说明的是,将任务从队列中获取到新创建的核心线程或扩展线程时,还可以判断任务是否获取成功,若成功,则运行后续代码,若失败,则重新获取任务,和/或,提示用户。[0081] S220、基于预先设置在线程池代码中预设位置的监控代码,将执行预设位置处的代码的时间信息记录在性能日志中;其中,监控代码是根据需要监控的性能指标对应的待监控操作预先设置的,预设位置处的代码是待监控操作对应的代码。[0082] S230、根据性能日志确定性能指标,并将性能指标进行输出。[0083] S240、基于各性能指标与预设标准性能指标的差值,对应调整线程池配置参数。[0084] 示例性的,预设标准性能指标可以是预先设置的标准的性能指标,当各性能指标与其对应的预设标准性能指标不符时,则对应调整线程池配置参数。[0085] 这里的线程池配置参数可以但不限于包括:核心线程的数量、扩展线程的数量和队列容量等。[0086] 可选的,所述基于各性能指标与预设标准性能指标的差值,对应调整线程池配置参数,具体可以是:当核心线程使用率大于标准核心线程使用率时,增加核心线程数量,当核心线程使用率小于标准核心线程使用率时,减少核心线程数量;当队列使用率大于标准队列使用率,和/或,任务等待时间小于标准任务等待时间时,增加队列容量,当队列使用率大于标准队列使用率,和/或,任务等待时间小于标准任务等待时间时,减少队列容量;当扩展线程存活率大于标准扩展线程存活率时,增加核心线程数量或增加总线程数量,其中,总线程数量为核心线程数量和扩展线程数量的和。[0087] 示例性的,当核心线程使用率大于标准核心线程使用率时,则说明当前的核心线程使用率过高,即当前核心线程处理的任务过多,此时,可增加核心线程的数量,这样以便提高核心线程处理任务的效率。当核心线程使用率小于标准核心线程使用率时,则说明当前的核心线程使用率过低,即当前核心线程处理的任务过少,此时,可减少核心线程的数量,避免核心线程的浪费。[0088] 当队列使用率大于标准队列使用率,和/或,任务等待时间小于标准任务等待时间时,说明队列被占用时间过长,和/或,任务等待时间过短,则增加队列容量。当队列使用率小于标准队列使用率,和/或,任务等待时间大于标准任务等待时间时,说明队列被占用时间过短,和/或,任务等待时间过长,则减少队列容量。[0089] 当扩展线程存活率大于标准扩展线程存活率时,则说明扩展线程的存活率过高,即当前扩展线程处理的任务过多,即需要更多的扩展线程来处理任务,因此,此时需要增加核心线程的数量,或者增加总线程数量。[0090] 这样根据各性能指标与预设标准性能指标的差值,来对应调整线程池配置参数,实现了通过各性能指标来对线程池配置进行客观评价的效果,以便可根据性能指标提供合理的优化方案。[0091] 需要说明的是,在得到各性能指标后,还可对各性能指标进行图表绘制,以便更直观、形象的对各性能指标进行了解。[0092] 本发明实施例的技术方案,通过基于各性能指标与预设标准性能指标的差值,对应调整线程池配置参数,实现了通过各性能指标来对线程池配置进行客观评价的效果,以便可根据性能指标提供合理的优化方案。[0093] 以下是本发明实施例提供的线程池性能监控装置的实施例,该装置与上述各实施例的线程池性能监控方法属于同一个发明构思,在线程池性能监控装置的实施例中未详尽描述的细节内容,可以参考上述线程池性能监控方法的实施例。[0094] 实施例三[0095] 图4为本发明实施例三提供的线程池性能监控装置的结构示意图,如图4所示,该装置包括:线程池代码启动模块31、监控模块32和性能指标确定模块33。[0096] 其中,线程池代码启动模块31,用于接收任务处理请求,启动运行线程池代码以对所述任务处理请求进行处理;[0097] 监控模块32,用于基于预先设置在所述线程池代码中预设位置的监控代码,将执行所述预设位置处的代码的时间信息记录在性能日志中;其中,所述监控代码是根据需要监控的性能指标对应的待监控操作预先设置的,所述预设位置处的代码是所述待监控操作对应的代码;[0098] 性能指标确定模块33,用于根据所述性能日志确定所述性能指标,并将所述性能指标进行输出。[0099] 在本发明实施例的技术方案的基础上,当所述性能指标为核心线程使用率时,监控模块32具体用于:[0100] 基于分别预先在所述线程池代码中的所述核心线程任务开始执行处和所述核心线程任务执行成功处设置的监控代码,分别将所述线程池的核心线程任务开始执行时间和核心线程任务执行成功时间记录在性能日志中。[0101] 在本发明实施例的技术方案的基础上,当所述性能指标为队列使用率和/或任务等待时间时,监控模块32具体用于:[0102] 基于分别预先在所述线程池代码中的线程池的任务入队列处和任务出队列处设置的监控代码,分别将任务入队列时间和任务出队列时间记录在性能日志中。[0103] 在本发明实施例的技术方案的基础上,当所述性能指标为扩展线程存活率时,监控模块32具体用于:[0104] 基于分别预先在所述线程池代码中的创建扩展线程处和销毁扩展线程处设置的监控代码,分别将创建扩展线程时间和销毁扩展线程时间记录在性能日志中。[0105] 在本发明实施例的技术方案的基础上,所述线程池代码的运行具体可以是:[0106] 判断所述线程池的核心线程数量是否小于预设核心线程数量;[0107] 若是,则创建核心线程,基于核心线程获取任务,执行获取所述任务处理请求对应的任务,并执行获取的任务;[0108] 若否,则判断所述线程池的队列中是否有空闲位置;[0109] 若有空闲位置,则将所述任务加入所述队列中,在已创建的核心线程或扩展线程空闲时从所述队列中获取所述任务并执行;[0110] 若无空闲位置,则判断扩展线程数量是否小于预设扩展线程数量;[0111] 若小于预设扩展线程数量,则创建扩展线程,基于所述扩展线程获取所述任务,并执行获取的任务,若所述任务执行完成后,在预设时间段内所述扩展线程无新的任务获取,则销毁所述扩展线程;[0112] 若不小于预设扩展线程数量,则拒绝接收所述任务。[0113] 在本发明实施例的技术方案的基础上,该装置还包括:[0114] 线程池配置参数调整模块,用于基于各性能指标与预设标准性能指标的差值,对应调整线程池配置参数。[0115] 在本发明实施例的技术方案的基础上,线程池配置参数调整模块具体用于:[0116] 当核心线程使用率大于标准核心线程使用率时,增加核心线程数量,当核心线程使用率小于标准核心线程使用率时,减少核心线程数量;[0117] 当队列使用率大于标准队列使用率,和/或,任务等待时间小于标准任务等待时间时,增加队列容量,当队列使用率大于标准队列使用率,和/或,任务等待时间小于标准任务等待时间时,减少队列容量;[0118] 当扩展线程存活率大于标准扩展线程存活率时,增加核心线程数量或增加总线程数量,其中,所述总线程数量为所述核心线程数量和所述扩展线程数量的和。[0119] 本发明实施例所提供的线程池性能监控装置可执行本发明任意实施例所提供的线程池性能监控方法,具备执行方法相应的功能模块和有益效果。[0120] 值得注意的是,上述线程池性能监控装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。[0121] 实施例四[0122] 图5为本发明实施例四提供的一种设备的结构示意图,如图5所示,该设备包括处理器70、存储器71、输入装置72和输出装置73;设备中处理器70的数量可以是一个或多个,图5中以一个处理器70为例;设备中的处理器70、存储器71、输入装置72和输出装置73可以通过总线或其他方式连接,图5中以通过总线连接为例。[0123] 存储器71作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的线程池性能监控方法对应的程序指令/模块(例如,线程池代码启动模块31、监控模块32和性能指标确定模块33)。处理器70通过运行存储在存储器71中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的线程池性能监控方法。[0124] 存储器71可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器71可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器71可进一步包括相对于处理器70远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。[0125] 输入装置72可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置73可包括显示屏等显示设备。[0126] 实施例五[0127] 本发明实施例五还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种线程池性能监控方法。[0128] 当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的线程池性能监控方法中的相关操作。[0129] 通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read‑OnlyMemory,ROM)、随机存取存储器(RandomAccessMemory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。[0130] 注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

专利地区:北京

专利申请日期:2020-08-10

专利公开日期:2024-06-18

专利公告号:CN113760632B

电话咨询
读内容
搜本页
回顶部