异步任务出现超多busy

liong

问题描述

开启了10个进程的异步任务,查看状态好多都是 N/A N/A N/A N/A N/A [busy]

load average: 0.06, 0.14, 0.08 event-loop:\Workerman\Events\Select
2 workers 11 processes
worker_name exit_status exit_count
TaskWorker 0 0
none 0 0
----------------------------------------------PROCESS STATUS---------------------------------------------------
pid memory listening worker_name connections send_fail timers total_request qps status
20840 N/A text://127.0.0.1:8089 TaskWorker N/A N/A N/A N/A N/A [busy]
20841 N/A text://127.0.0.1:8089 TaskWorker N/A N/A N/A N/A N/A [busy]
20842 N/A text://127.0.0.1:8089 TaskWorker N/A N/A N/A N/A N/A [busy]
20843 5.73M text://127.0.0.1:8089 TaskWorker 1 0 0 8 0 [idle]
20844 N/A text://127.0.0.1:8089 TaskWorker N/A N/A N/A N/A N/A [busy]
20845 N/A text://127.0.0.1:8089 TaskWorker N/A N/A N/A N/A N/A [busy]
20846 5.73M text://127.0.0.1:8089 TaskWorker 1 0 0 8 0 [idle]
20847 N/A text://127.0.0.1:8089 TaskWorker N/A N/A N/A N/A N/A [busy]
20848 N/A text://127.0.0.1:8089 TaskWorker N/A N/A N/A N/A N/A [busy]
20849 N/A text://127.0.0.1:8089 TaskWorker N/A N/A N/A N/A N/A [busy]
20850 4.81M http://127.0.0.1:8088 none 22 0 0 167 0 [idle]
----------------------------------------------PROCESS STATUS---------------------------------------------------
Summary 14M - - 24 0 0 183 0 [Summary]
需要同时处理多个慢业务,用命令行按顺序一个个执行,需要4个小时左右,想要减少到2个小时内,1个小时更好
服务器需要什么配置
需要做哪些优化
截图
怎么查看业务并发连接数超过1000同时在线,我的服务器没有优化内核
需要怎么设置才不会出现很多N/A 和 busy

为此你搜索到了哪些方案及不适用的原因

问答去搜索和看文档

496 4 0
4个回答

latin

进程在处理慢业务,显示busy是正常的

  • liong 2024-04-11

    不想出现太多的busy要怎么设置

  • latin 2024-04-11

    优化业务,让业务处理更快些

  • liong 2024-04-11

    是第三方的,没法优化

  • 释永战 2024-04-12

    在异步任务里面再创建一个异步任务就可以了····

  • liong 2024-04-12

    这样不行的吧

TM

多开进程

  • liong 2024-04-12

    异步任务开了20个进程

rbb

你的异步任务是在你的业务流程中干嘛用的,类似定时任务,或者队列这种性质还是

  • liong 2024-04-12

    同步第三方数据

  • rbb 2024-04-12

    那就无所谓啊,不怕阻塞的场景

  • liong 2024-04-12

    是不怕堵,但是时间长啊,想把4小时降到2小时内

  • rbb 2024-04-12

    一个任务能执行4小时,那你要优化这个任务,和框架无关系喔。要优化的是你的业务流程,碎片化,分片等操作

  • rbb 2024-04-12

    比如一次任务是100W数据,你可以分片成每个进程1W条数数据,然后不同的进程执行不同的批次号这样?

  • liong 2024-04-12

    比如一次任务是100W数据,你可以分片成每个进程1W条数数据,然后不同的进程执行不同的批次号这样?

    是的,同时执行

  • liong 2024-04-12

    这就可以减少时间了

  • rbb 2024-04-12

    或者是做增量同步,只把要同步的,丢到队列,让进程自己去竞争消费同步

  • rbb 2024-04-12

    这样也是自动分片咯

  • liong 2024-04-12

    队列是排队执行的

  • rbb 2024-04-12

    只是按顺序出列,但是实际执行还是看进程的,多进程竞争这个,几乎是做到了自动分片和异步了。当然这是指增量同步的方案

  • liong 2024-04-12

    执行完后,记录id,id还是和进入队列的顺序一下的,如果是多进程竞争,记录的id应该是乱序的才对

  • rbb 2024-04-12

    正常是按id顺序出列和入库,如果某个消费进程有阻塞,这个id不会按顺序入库了。不过这样对你业务有什么影响吗,现在只是要解决你慢的情况呀

  • rbb 2024-04-12

    按顺序出列,这个好像不重要吧?重要的是N个进程来消费啊,你也可以把你的消息手动分片入列,消费进程在手动按类型消费,达到手动分片目的

  • liong 2024-04-12

    进程堵塞不影响,经常是串行执行,还是并行执行的会有影响,比如,设置了8个进程,是8个进程同时处理8个请求呢,还是要等其中的一个进程处理完请求,下一个进程才会处理请求

  • nitron 2024-04-12

    理想状况,N个核心就可以并行处理N个请求,超出就交替执行或者串行

  • rbb 2024-04-12

    竞争模型下,就是进程主要拿到就处理,如果满载那几乎是同时

  • liong 2024-04-12

    N个进程来消费,是N个进程都在消费, 还是需等一个进程消费完了,其他进程在来消费

  • nitron 2024-04-12

    还有你的10M带宽也未必够,对方的100M带宽也未必是你独享

  • rbb 2024-04-12

    消费进程就是不断轮训队列,谁拿到就执行,满载就是全部都在执行

  • nitron 2024-04-12

    N个进程都在消费

  • nitron 2024-04-12

    把它想象城地铁的出入闸机就很好理解了

  • liong 2024-04-12

    理解是理解,对应的文档不知道是哪个

  • rbb 2024-04-12

    这个就行了

  • liong 2024-04-12

    好的,感谢大佬们

  • liong 2024-04-12

    https://www.workerman.net/doc/workerman/components/workerman-redis-queue.html 这个不行
    只适合设置一个进程,设置多个进程,会有很多数据同不了

  • rbb 2024-04-12

    为什么,不会的吧

  • liong 2024-04-15

    多个count,onWorkerStart 会执行多次,然后数据就莫名不能同步了

  • rbb 2024-04-15

    1.有生产消息吗?2.没有消费到吗?3.消费了执行有问题吗?你是指的哪个环节

  • liong 2024-04-15

    有生产记录,部分数据没有消费记录

  • rbb 2024-04-15

    那你打印一下,消费这里,1.有没有出列2.同步逻辑有无抛异常,异常了需需不要重新入列

  • liong 2024-04-15

    同步逻辑没有异常,消费也没异常
    没有数据进入队列,每次查看状态total_request都会增加,redis里没有数据,订阅那里打印也没有数据

  • liong 2024-04-15

    设置了20个进程

  • rbb 2024-04-15

    那你就是生产消息这里啊,投递消息失败?

  • liong 2024-04-15

    78 56581 0 [Summary]

  • liong 2024-04-15

    pid memory listening worker_name connections send_fail timers total_request qps status
    3534 4.19M none Redis 2 0 3 2176 0 [idle]
    3535 4.19M none Redis 2 0 3 2176 0 [idle]
    3536 4.19M none Redis 2 0 3 2176 0 [idle]
    3537 4.19M none Redis 2 0 3 2176 0 [idle]
    3538 4.19M none Redis 2 0 3 2176 0 [idle]
    3539 4.19M none Redis 2 0 3 2176 0 [idle]
    3540 4.19M none Redis 2 0 3 2176 0 [idle]
    3541 4.19M none Redis 2 0 3 2176 0 [idle]
    3542 4.19M none Redis 2 0 3 2176 0 [idle]
    3543 4.19M none Redis 2 0 3 2176 0 [idle]
    3544 4.19M none Redis 2 0 3 2176 0 [idle]
    3545 4.19M none Redis 2 0 3 2176 0 [idle]
    3546 4.19M none Redis 2 0 3 2176 0 [idle]
    3547 4.19M none Redis 2 0 3 2176 0 [idle]
    3548 4.19M none Redis 2 0 3 2176 0 [idle]
    3549 4.19M none Redis 2 0 3 2176 0 [idle]
    3550 4.19M none Redis 2 0 3 2177 0 [idle]
    3551 4.19M none Redis 2 0 3 2176 0 [idle]
    3552 4.19M none Redis 2 0 3 2176 0 [idle]
    3553 4.19M none Redis 2 0 3 2176 0 [idle]
    3554 4.19M none Redis 2 0 3 2177 0 [idle]
    3555 4.19M none Redis 2 0 3 2177 0 [idle]
    3556 4.19M none Redis 2 0 3 2178 0 [idle]
    3557 4.19M none Redis 2 0 3 2176 0 [idle]
    3558 4.19M none Redis 2 0 3 2176 0 [idle]
    3559 4.19M none Redis 2 0 3 2176 0 [idle]
    ----------------------------------------------PROCESS STATUS---------------------------------------------------
    Summary 104M - - 52 0 78 56581 0 [Summary]

  • liong 2024-04-15

    pid memory listening worker_name connections send_fail timers total_request qps status
    3534 4.19M none Redis 2 0 3 2283 0 [idle]
    3535 4.19M none Redis 2 0 3 2283 0 [idle]
    3536 4.19M none Redis 2 0 3 2283 0 [idle]
    3537 4.19M none Redis 2 0 3 2283 0 [idle]
    3538 4.19M none Redis 2 0 3 2283 0 [idle]
    3539 4.19M none Redis 2 0 3 2283 0 [idle]
    3540 4.19M none Redis 2 0 3 2283 0 [idle]
    3541 4.19M none Redis 2 0 3 2283 0 [idle]
    3542 4.19M none Redis 2 0 3 2283 0 [idle]
    3543 4.19M none Redis 2 0 3 2283 0 [idle]
    3544 4.19M none Redis 2 0 3 2283 0 [idle]
    3545 4.19M none Redis 2 0 3 2283 0 [idle]
    3546 4.19M none Redis 2 0 3 2283 0 [idle]
    3547 4.19M none Redis 2 0 3 2283 0 [idle]
    3548 4.19M none Redis 2 0 3 2283 0 [idle]
    3549 4.19M none Redis 2 0 3 2283 0 [idle]
    3550 4.19M none Redis 2 0 3 2284 0 [idle]
    3551 4.19M none Redis 2 0 3 2283 0 [idle]
    3552 4.19M none Redis 2 0 3 2283 0 [idle]
    3553 4.19M none Redis 2 0 3 2283 0 [idle]
    3554 4.19M none Redis 2 0 3 2284 0 [idle]
    3555 4.19M none Redis 2 0 3 2284 0 [idle]
    3556 4.19M none Redis 2 0 3 2285 0 [idle]
    3557 4.19M none Redis 2 0 3 2283 0 [idle]
    3558 4.19M none Redis 2 0 3 2283 0 [idle]
    3559 4.19M none Redis 2 0 3 2283 0 [idle]
    ----------------------------------------------PROCESS STATUS---------------------------------------------------
    Summary 104M - - 52 0 78 59363 0 [Summary]

  • liong 2024-04-15

    total_request 这个数量为何会自动增加

  • liong 2024-04-15

    没有数据入队列

  • liong 2024-04-15

    ----------------------------------------------PROCESS STATUS---------------------------------------------------
    pid memory listening worker_name connections send_fail timers total_request qps status
    3534 4.19M none Redis 2 0 3 2550 0 [idle]
    3535 4.19M none Redis 2 0 3 2550 0 [idle]
    3536 4.19M none Redis 2 0 3 2550 0 [idle]
    3537 4.19M none Redis 2 0 3 2550 0 [idle]
    3538 4.19M none Redis 2 0 3 2550 0 [idle]
    3539 4.19M none Redis 2 0 3 2550 0 [idle]
    3540 4.19M none Redis 2 0 3 2550 0 [idle]
    3541 4.19M none Redis 2 0 3 2550 0 [idle]
    3542 4.19M none Redis 2 0 3 2550 0 [idle]
    3543 4.19M none Redis 2 0 3 2550 0 [idle]
    3544 4.19M none Redis 2 0 3 2550 0 [idle]
    3545 4.19M none Redis 2 0 3 2550 0 [idle]
    3546 4.19M none Redis 2 0 3 2550 0 [idle]
    3547 4.19M none Redis 2 0 3 2550 0 [idle]
    3548 4.19M none Redis 2 0 3 2550 0 [idle]
    3549 4.19M none Redis 2 0 3 2550 0 [idle]
    3550 4.19M none Redis 2 0 3 2551 0 [idle]
    3551 4.19M none Redis 2 0 3 2550 0 [idle]
    3552 4.19M none Redis 2 0 3 2550 0 [idle]
    3553 4.19M none Redis 2 0 3 2550 0 [idle]
    3554 4.19M none Redis 2 0 3 2551 0 [idle]
    3555 4.19M none Redis 2 0 3 2551 0 [idle]
    3556 4.19M none Redis 2 0 3 2552 0 [idle]
    3557 4.19M none Redis 2 0 3 2550 0 [idle]
    3558 4.19M none Redis 2 0 3 2550 0 [idle]
    3559 4.19M none Redis 2 0 3 2550 0 [idle]
    ----------------------------------------------PROCESS STATUS---------------------------------------------------
    Summary 104M - - 52 0 78 66305 0 [Summary]

  • rbb 2024-04-15

    用redis客户端看,或者用命令看有没有数据,这不是看redis有没有数据的

  • liong 2024-04-15

    redis客户端看了没有数据

  • rbb 2024-04-15

    那就投递消息有问题啊,你文档看了吗,知道怎么投递消息吧

  • liong 2024-04-15

    在投递的数据加了个id,在订阅那里可以打印出来,进入消费了就记录id,但是有部分id会缺少

  • rbb 2024-04-15

    那这里应该是属于你业务上的bug,没代码也看不到怎么回事。流程没问题的。

  • liong 2024-04-15

    有bug就全部都不会记录,执行业务方法的第一行就记录了id,不是执行完成后记录id

  • rbb 2024-04-15

    你异常处理了吗?看不到代码啊

  • liong 2024-04-15

    $client->subscribe('async', function($data)use($syncService){
    dump($data['id']);
    $syncService->syncTgc($data);
    });
    public function syncTgc($data)
    {
    Log::info('syncTgc:'.$data['id']);

    }

    syncTgc第一行就记录了id

nitron

同步第三方数据,取决于你的带宽,对方的带宽,对方的处理速度

  • liong 2024-04-12

    我方10M带宽,第三方100M带宽,用循环一个个去同步数据,go有个方法,循环数据打印出来的id是无徐的,workerman能实现吗

🔝