美文网首页
rabbitmq beam.smp cpu利用率过高

rabbitmq beam.smp cpu利用率过高

作者: 不要重不要重 | 来源:发表于2019-06-12 16:21 被阅读0次

问题:
rabbitmq 的吞吐有多大?
目前开启了rabbitmq的持久化/Ack 机制/用的是direct路由器。
上次测试,4.5w/min 的时候,beam.smp cpu利用率过100%
下午做了个测试,不阻塞下游,只测试rabbitmq 的消费速度:

package main
import (
        "fmt"
        "github.com/streadway/amqp"
        "sync"
)
const (
        queueName               = "queue.newpushservice.deal.push"
        exchange                = "exchange.newpushservice.deal.push"
        mqurl                   = "amqp://admin:admin@172.18.19.168:5672/"
        ReceiverNum         int = 5
        ChannelBufferLength     = 1000
)

func main() {
        fmt.Println("start")
        forever := make(chan bool)
        go WorkMessage(ReceiveMessage())
        <-forever
}

func getChannel() (*amqp.Connection, *amqp.Channel, error) {
        conn, err := amqp.Dial(mqurl)
        if err != nil {
                return nil, nil, err
        }
        channel, err := conn.Channel()
        if err != nil {
                return nil, nil, err
        }
        err = channel.Qos(1, 0, false)
        if err != nil {
                return nil, nil, err
        }
        return conn, channel, nil
}

func ReceiveMessage() <-chan amqp.Delivery {
        out := make(chan amqp.Delivery, ChannelBufferLength)
        var wg sync.WaitGroup

        receiver := func() {
                defer wg.Done()
        RECONNECT:
                for {
                        _, channel, err := getChannel()
                        if err != nil {
                             panic(err)
                        }
                        msgs, err := channel.Consume(
                             queueName, // queue
                             "",        // consumer
                             false,     // auto-ack
                             false,     // exclusive
                             false,     // no-local
                             false,     // no-wait
                             nil,       // args
                        )
                        if err != nil {
                             panic(err)
                        }
                        //检测是否改通道有问题
                        closeChan := make(chan bool, 1)
                        go func() {
                             cc := make(chan *amqp.Error)
                             e := <-channel.NotifyClose(cc)
                             fmt.Printf("[RABBITMQ_CLIENT], channel close error:%s", e.Error())
                             closeChan <- true
                        }()

                        for {
                             select {
                             case msg, ok := <-msgs:
                                if !ok {
                                        fmt.Println("channel be closed,need reconnect")
                                        continue RECONNECT
                                }
                                out <- msg

                             case <-closeChan:
                                continue RECONNECT
                             }
                        }
                }
        }
        wg.Add(ReceiverNum)
        for i := 0; i < ReceiverNum; i++ {
                go receiver()
        }
        go func() {
                wg.Wait()
                fmt.Println("all receiver is done, closing channel")
                close(out)
        }()
        return out
}
func WorkMessage(in <-chan amqp.Delivery) {
        var wg sync.WaitGroup

        worker := func(msg amqp.Delivery) {
                defer wg.Done()
                fmt.Printf("receive message : %s", string(msg.Body))
                msg.Ack(false)
        }
        wg.Add(1)
        go func() {
                defer wg.Done()
                for message := range in {
                        wg.Add(1)
                        go worker(message)
                }
        }()
        go func() {
                wg.Wait()
                fmt.Println("all worker is done, closing channel")
        }()
}

消费速度在 30-40w/min,cpu 占有率在 180-200% , 内存占用在8%-10%。
4核64位系统,内存16G,cpu 型号( 8 Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz)
这里有个测试,留着遇到问题可以看
https://segmentfault.com/a/1190000016351345

相关文章

  • rabbitmq beam.smp cpu利用率过高

    问题:rabbitmq 的吞吐有多大?目前开启了rabbitmq的持久化/Ack 机制/用的是direct路由器。...

  • VScode常用插件及相关配置

    CPU占用过高 有时,vscode会出现CPU利用率100%的情况,原因是两个rg.exe占用了全部的CPU。解决...

  • 理解cpu负载和linux性能监控

    概述 两个术语: System load/CPU Load:是衡量Linux系统中CPU使用率过高或利用率不足的指...

  • Android性能测试之cpu占用率

    测试时,经常会发生手机的CPU使用率过高而引发的问题。那接下来,我对这方面知识做些整理及归纳:CPU利用率:CPU...

  • CPU利用率和Load Average

    CPU利用率和Load Average的区别 CPU利用率:CPU利用率在过去常常被我们这些外行认为是判断机器是否...

  • 为什么磁盘慢会导致Linux负载飙升?

    一、CPU利用率和负载率的区别 为什么磁盘慢会导致Linux负载飙升? 这里要区别CPU负载和CPU利用率,它们是...

  • cpu过高

    1.获取Java进程的pid jps -l 2.查看占用cpu高,且占用时间长的线程 ps -mp pid -o ...

  • CPU过高

    查看cpu负载 top 打印堆栈信息 jstack pid >pid.txtsz pid.txt 找到16进制的线...

  • 用脚本检测系统 CPU 负载

    原理说明 在对服务器进行维护时,有时也遇到由于系统 CPU(利用率)负载过高导致业务中断的情况。服务器上可能运行多...

  • 性能指标

    CPU CPU资源利用率很高的话,需要看CPU消耗User、Sys、Wait哪种状态。 如果CPU User非常高...

网友评论

      本文标题:rabbitmq beam.smp cpu利用率过高

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