美文网首页
初探提高系统定时调度频率

初探提高系统定时调度频率

作者: 酱油和醋 | 来源:发表于2019-04-21 20:52 被阅读0次

背景

最近工作中要做一个优化,将定时任务的调度频率从1min/次提升到30s/次,相当于频率提高一倍。这就需要我从系统性能、任务处理时间等方面进行分析了。

数据准备

首先是需要对该场景下的调度数据进行分析。我的任务场景是比较简单的,就是每次定时调度批量处理某些任务。我的数据准备也是比较简单的,只需要观察此时线上每次调度时会处理的任务数,再加上后续业务上会扩张的任务数量,对任务数据量进行线下mock,然后分析每次任务执行时的CPU占用率以及任务执行的总时间就可以了。

工具准备

分析CPU性能有很多的工具,开发和线上的机器都是Linux的RedHat系列,所以我使用的是nmon和他的解析工具nmon Analyser

第一步在开发机上安装nmon性能监控工具:

sudo yum install nmon

验证安装成功,输入nmon命令进入性能监控控制台,如下:


验证nmon安装成功

工具使用

我先开始采集机器性能数据(每一秒采集一次数据,共采集5分钟的数据)

nmon -s 1 -c300 -f -m /home/admin/tmp &

-s1:每一秒采集一次数据;
-c300:采集300次,即为采集5分钟的数据;
-f:生成的数据文件名中包含文件创建的时间
-m:生成的数据文件的存放目录
&:后台运行

接着开始触发定时调度,定时任务触发完,观察nmon数据是否采集结束,可以通过观察/home/admin/tmp下的nmon文件大小是否还在变大来确定。nmon文件生成完毕后,可以通过测试哥哥教我的命令在文件生成的目录运行命令

python -m SimpkleHttpServer 2345

接着在本地浏览器中输入"机器域名:2345"的端口号,就可以将.nmon文件下载下来了。

下载分析工具nmon Analyser,下载下来是一个excel文件,选择启用宏并打开Analyser的sheet,点击Analyze nmon data,将download的
.nmon文件引入。

点击Analyze nmon data.png
稍等片刻,我们就可以看到一系列的性能数据了,类似如下图(并不是我的nmon数据图)。
性能数据
在我的数据里面,CPU使用率高达100%,所以需要进一步分析CPU占用率高的进程是哪一个了。

分析命令使用

可以使用top命令去观察CPU占用量大的进程是哪一个,也是一秒钟统计一次,可以得到类似的数据文件。

top -d 1 -b > /home/admin/tmp/top.txt
top(并不是我的top文件)

而我的top文件告诉我进程占用量最高的是Java进程。命令查询的结果可以和我JAVA应用服务所对应。

jps -v

所以确定了造成CPU占用率过高的原因确实是应用JAVA服务,接着需要进一步确认是JAVA进程中的哪一个线程造成的。可以通过命令分析线程的CPU利用率

top -Hp pid -d 1 -b > /home/admin/tmp/top2.txt
线程数据-1

这时候需要将图中的线程号换算成16进制数据,通过命令jstack来分析是哪些线程造成的

jstack pid | grep 十六进制线程号
线程数据-2
其中C2 CompilerThread0这个线程网上的说明有很多JAVA 进程异常分析 - CPU、内存,剩下的确实都是任务调度的线程 。

因为开发机器的性能和线上机器的性能是不能比拟的,所以在做性能分析的时候,要申请一台和线上机器性能一样的机器,当我们换到和线上机器配置的开发机器时,CPU的利用率从最高100%降到了最高20%,说明线上机器的性能是可以支撑定时调度批量触发任务的。

任务处理时间

除了要看机器的性能外,还需要看在一次调度时间内,是否所有的任务都可以被执行完,用以判断是否会存在积压的情况。

每次触发共有6种类型的任务会被触发,所以需要查询线上这6种类型的任务的一次执行时间,并且每次定时任务触发时各个类型的任务所占的比例,计算时根据线上机器数与CPU数计算整体的任务完成时间。

上下游业务分析

在机器性能和任务处理时间都满足的情况下,本以为可以完成这次调拨频率提高的优化,结果被组里的老司机告知,有一种任务对应的下游业务只能在每分钟的第40s进行处理。

结论

最后因为下游业务接口处理的原因,不能执行频率提高的优化。

总结

初探的过程主要是数据准备,工具准备以及压测,除了从机器的性能上,还要结合业务场景进行分析,在整个过程中主要使用了如下的工具和命令进行分析

1.nmon -s 1 -c300 -f -m /home/admin/tmp &
2.top -Hp 72474 -d 1 -b > /home/admin/tmp/top72474.txt
3.top -d 1 -b > top1.txt
4.python -m SimpleHTTPServer 2345
5.jps -v
6.jstack 72474
7.jinfo -flag CICOmpilerCount 72474

相关文章

  • 初探提高系统定时调度频率

    背景 最近工作中要做一个优化,将定时任务的调度频率从1min/次提升到30s/次,相当于频率提高一倍。这就需要我从...

  • 调度管理系统平台OMS——调度计划版块

    1 OMS调度系统平台 电网调度技术支持系统(OMS)系统是调度专业使用频率最高的系统平台。它是集成调度所有专业的...

  • 分布式定时任务调度框架

    1. 目标 把定时任务通过集群的方式进行管理调度,并采用分布式部署,保证系统的高可用,提高了容错。那么如何保证定时...

  • Elastic-job 介绍与使用

    目标 把定时任务通过集群的方式进行管理调度,并采用分布式部署,保证系统的高可用,提高了容错。那么如何保证定时任务只...

  • gocron - 定时任务web管理系统

    gocron - 定时任务管理系统 项目简介 使用Go语言开发的定时任务集中调度和管理系统, 用于替代Linux-...

  • shell 脚本删除过期文件

    1.定时删除7天之前的文件2.使用shell脚本定时删除 脚本内容 脚本存放目录 将脚本配置到系统调度中 编辑调度...

  • Linux任务调度

    crond任务调度 crontab用于定时任务的设置。任务调度:是指系统在某个时间执行的特定的命令或程序。任务调度...

  • dubbo + springmvc + mybatis + eh

    摘要: Jeesz目前包括以下模块项目,后台系统管理系统,RestFul独立服务系统、Scheduler定时调度系...

  • 定时任务调度之Timer

    定时任务调度之Timer 前言 定时任务调度,有两个比较重要的概念,一个是定时,一个是调度,所谓的定时调度,指的是...

  • Linux-7 任务调度

    crond 任务调度 crontab 进行定时任务的设置 概述 任务调度:是指系统在某个时间执行的特定的命令或程序...

网友评论

      本文标题:初探提高系统定时调度频率

      本文链接:https://www.haomeiwen.com/subject/byvewqtx.html