crocodile icon indicating copy to clipboard operation
crocodile copied to clipboard

创建按日和按月结合的定时任务,cpu会出现使用率占满的情况

Open Gerrylinux opened this issue 3 years ago • 13 comments

创建的任务时间。 刚创建成功后,master 服务的cpu会立马占用所有资源 将任务设置停止调度时,cpu会占用在170%左右。 删除该任务,cpu资源立马释放。

image image image

Gerrylinux avatar Dec 24 '20 07:12 Gerrylinux

你上面那个图没选日月吗。右边的最近运行时间全是相同的

labulakalia avatar Dec 30 '20 03:12 labulakalia

选了日和月,6月和12月的15日运行,没选周,年是每年。

Gerrylinux avatar Dec 30 '20 03:12 Gerrylinux

@Gerrylinux 能发下最后生成的完整cronexpr表达式吗?在选择日期的右边是最近运行的时间,我看你那个图最近运行的时间都是相同的,可能某些地方有bug。你先发给我看下吧

labulakalia avatar Dec 30 '20 03:12 labulakalia

image 这个可以看出来嘛? 目前master服务 只要启动后,就会出现cpu 异常,所以没有启动服务。

Gerrylinux avatar Dec 30 '20 04:12 Gerrylinux

日志里有error吗

labulakalia avatar Dec 30 '20 04:12 labulakalia

这是启动后的error 日志。 2020-12-30T12:02:33.313+0800 error schedule/schedule2.go:564 t.islock failed {"error": "redis: connection pool timeout"} 2020-12-30T12:02:33.312+0800 error schedule/schedule2.go:517 redis.SetNX failed {"error": "redis: connection pool timeout"} 2020-12-30T12:02:33.313+0800 error schedule/schedule2.go:517 redis.SetNX failed {"error": "redis: connection pool timeout"} 2020-12-30T12:02:33.313+0800 error schedule/schedule2.go:548 redis.Exists failed {"key": "running:348519839943364608", "error": "redis: connection pool timeout"} 2020-12-30T12:02:33.313+0800 error schedule/schedule2.go:581 t.getlock failed {"error": "redis: connection pool timeout"} 2020-12-30T12:02:33.313+0800 error schedule/schedule2.go:581 t.getlock failed {"error": "redis: connection pool timeout"} 2020-12-30T12:02:33.312+0800 error schedule/schedule2.go:548 redis.Exists failed {"key": "running:348519839943364608", "error": "redis: connection pool timeout"} 2020-12-30T12:02:33.313+0800 error schedule/schedule2.go:564 t.islock failed {"error": "redis: connection pool timeout"} 2020-12-30T12:02:33.313+0800 error schedule/schedule2.go:564 t.islock failed {"error": "redis: connection pool timeout"}

Gerrylinux avatar Dec 30 '20 04:12 Gerrylinux

redis 测试后可连接的,这块导致 把服务器 cpu资源全部占用

Gerrylinux avatar Dec 30 '20 04:12 Gerrylinux

如果redis正常不会产生timeout,你用 telnet 127.0.0.1 6379 后输入ping 看下是不是有返回Pong

labulakalia avatar Dec 30 '20 04:12 labulakalia

这个redis的日志错误和cpu 资源耗尽,是新部署后的大约四五天的时间,晚上12点整,突然暴增, 我继续排查相关服务的问题。目前是将master服务通过二进制的方式在服务器部署启动,redis 使用的是 本地 服务,脱离的docker。

Gerrylinux avatar Dec 30 '20 08:12 Gerrylinux

之前采用容器化部署后产生的问题,这次更换成二进制后,运行了2天,暂时没有发现问题。

Gerrylinux avatar Jan 15 '21 06:01 Gerrylinux

请问是否在生产环境使用

rinyshen avatar Mar 10 '21 06:03 rinyshen

00 22 18 19 12 ? 2022-2022 只要设置的计划时间是已过期貌似就会疯狂推任务,这种情况一般都是年份固定的情况

Nuoky avatar Dec 19 '22 10:12 Nuoky

调试了下,发现以下问题;不过不太熟Golang... 不知道作者还维护么

# schedule2.go

	for {
		next = expr.Next(last)
		select {
		case <-task.close:
			log.Info("close task Schedule", zap.String("taskid", taskid), zap.Any("name", task.name))
			return
		case <-time.After(next.Sub(last)):
			// 这里会无限循环, next 时间是 0,被赋值到了 last 导致时间为 0
			last = next

Nuoky avatar Dec 19 '22 15:12 Nuoky