公共交通在空闲时使用 30% CPU

问题描述 投票:0回答:1

我几天来一直在寻找答案,以找出为什么我的 C# MassTransit 配置在空闲时使用如此多的 CPU。

我发现其他用户提出同样问题的回复很少,大多数人都说“你一定做错了什么”。 问题是,我已经按照 MassTransit 网站上的示例进行操作,甚至完成了一个简单的项目,但仍然看到它在空闲时使用 30+% 的 cpu。

有什么办法可以让它在闲置时使用0-10%吗? 在我们的环境中,运行一个空闲时消耗 30% 以上 cpu 的进程是很重要的。

这是我如何在 dotnet 7 应用程序中配置 MT 的示例:

    .ConfigureServices((host, services) =>
    {

    IAgentInformation agentInformation = new AgentInformation(host.Configuration);

    services.AddMassTransit(x =>
    {
        x.SetKebabCaseEndpointNameFormatter();

        var entryAssembly = Assembly.GetEntryAssembly();

        x.AddConsumer<AgentConsumer>();
        x.AddSagaStateMachines(entryAssembly);
        x.AddSagas(entryAssembly);
        x.AddActivities(entryAssembly);

        x.UsingRabbitMq((context, cfg) =>
        {
            cfg.Host(agentInformation.ATLASServer, "/", h =>
            {
                h.Username(agentInformation.RabbitId);
                h.Password(agentInformation.Rabbit);
            });

            cfg.ConfigureEndpoints(context);
        });
        services.AddHostedService<Worker>();
    });
    });

食用时:

    public class AgentConsumer : IConsumer<ServerMessageContract>
{
    readonly ILogger<AgentConsumer> _logger;

    public AgentConsumer(ILogger<AgentConsumer> logger)
    {
        _logger = logger;
    }

    public Task Consume(ConsumeContext<ServerMessageContract> context)
    {
        _logger.LogInformation("Received Message: {Text}", context.Message.Payload == null ? "" : context.Message.Payload.ToString());
        TaskRunner.CommandsFromServer(context.Message);

        return Task.CompletedTask;
    }
}

发布时:

var endpoint = await _bus.GetSendEndpoint(new Uri($"rabbitmq://{ServerAddress}/{SendQueue}"));
await endpoint.Send(agentMessage, stoppingToken);

非常简单......

编辑: 问题出在我们内部创建的另一个库,它导致了 CPU 的峰值。 通过排除法我们发现了问题。

c# masstransit
1个回答
1
投票

好吧,我不想重复你在其他地方听到的内容,但这是你的事情。

CONTAINER ID   NAME                CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O         PIDS
09155c5ce2d1   outbox-postgres-1   0.12%     75.51MiB / 47.06GiB   0.16%     95.8kB / 107kB    47.3MB / 47.5MB   8
6ad4b6151e35   outbox-rabbitmq-1   0.51%     149.1MiB / 47.06GiB   0.31%     10.9kB / 8.23kB   57.3MB / 778kB    46
317dc978e517   outbox-api-1        0.55%     89.48MiB / 47.06GiB   0.19%     96.3kB / 89.8kB   34.9MB / 0B       29
8dda648a87ad   outbox-jaeger-1     0.05%     10.66MiB / 47.06GiB   0.02%     1.47kB / 0B       29.7MB / 0B       16
f01392265691   outbox-service-1    0.00%     67.85MiB / 47.06GiB   0.14%     21.8kB / 14.1kB   62.1MB / 0B       16

outbox-api
outbox-service
都在使用大量端点针对 RabbitMQ 运行 MassTransit。正如你所看到的,几乎闲置。

这是来自 Sample-Outbox 项目。

© www.soinside.com 2019 - 2024. All rights reserved.