moiot / gravity

A Data Replication Center
Apache License 2.0
912 stars 173 forks source link

gravity web 新建任务一直卡着 #354

Closed zhanjianS closed 3 months ago

zhanjianS commented 5 months ago

同 #350 一样, 之前通过重启opeara及删掉一些配置的通道恢复了,

现在 有同样的问题, 现象1: 新建的任务,查看 对应的crd的资源是生成的, opeara的日志会有这种日志

level=info msg="Pipeline[test-tmp-canyin-tidb] updated, enqueue"

但是没创建成功,这个Pipeline没有其他类似 [PipelineManager.processNextWorkItem] Successfully synced 之类的日志 如果重启opeara,这个就会创建成功, 但是之后新建其他任务的不行

现象1: 底层pod 发生重启时, web页面会有一段时间显示不在运行,但是底层pod是在运行中,隔半个小时到1个小时 之后又会恢复

这个是因为处理的线程不够用,通道多了 导致的吗,看代码目前给的是5

Ryan-Git commented 4 months ago

打个 operator 的栈看看,你们集群版本新的话可能 sdk 还是得升级。

zhanjianS commented 4 months ago

打个 operator 的栈看看,你们集群版本新的话可能 sdk 还是得升级。 goroutine 466187 [running].txt

这个是从页面 /api/debug/pprof/ 点击full goroutine stack dump 下载的 你看看有没有用

另外这个是通过点击profile 生成的svg文件 profile001

Ryan-Git commented 4 months ago

全都没在干活,worker queue 没推送更新。 可能是订阅和 crd 内容不匹配,或者 client 版本太老不兼容。用upgrade-client-go 那个分支试试呢

zhanjianS commented 4 months ago

全都没在干活,worker queue 没推送更新。 可能是订阅和 crd 内容不匹配,或者 client 版本太老不兼容。用upgrade-client-go 那个分支试试呢

更新了版本 也还是不行,

图片

这个是打印的日志,crd可以创建成功,但是底层pod拉起来要很长时间

这个 在测试的坏境 整体的gravity 通道少的时候没有这个问题,很快就能响应, 我把测试坏境通道数量造到300以上的时候,就会有这种很长时间都不更新的问题,

同时 如果把operator重启后,短时间内是可以的,长时间运行后还是这个现象

有可能是默认的workqueue 有速率限制吗?在数量多的时候处理来不及

这个是/api/debug/pprof/ 采集的默认30s的pprof new-profile.pb.gz

Ryan-Git commented 4 months ago

cpu profile 没用,还是看下栈。 不像是速率限制,如果是速率限制应该要看到有同步的对象,但间隔较长。这个日志看起来是什么也没同步。

zhanjianS commented 4 months ago

cpu profile 没用,还是看下栈。 不像是速率限制,如果是速率限制应该要看到有同步的对象,但间隔较长。这个日志看起来是什么也没同步。

需要是这个文件吗

goroutine 330396 [running].txt

zhanjianS commented 3 months ago

问题已经解决了 在master分支上 的pipelineManager修改 workqueue 初始化 的BucketRateLimiter 有10, 100 改成30,300就可以

workqueue: workqueue.NewNamedRateLimitingQueue( //workqueue.DefaultControllerRateLimiter(), workqueue.NewMaxOfRateLimiter( workqueue.NewItemExponentialFailureRateLimiter(5time.Millisecond, 1000time.Second), // 10 qps, 100 bucket size. This is only for retry speed and its only the overall factor (not per item) &workqueue.BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(30), 300)}, ), "Pipeline"),