MassTransit空闲时CPU占用达30%,求优化解决办法
MassTransit空闲状态CPU占用过高问题排查
我花费数日排查C# MassTransit配置在空闲状态下CPU占用过高(达30%+)的原因,发现其他用户提出相同问题后得到的回复极少,且大多表示‘你肯定哪里操作有误’。但我严格遵循MassTransit官网示例,甚至创建了最简项目,空闲时仍会出现30%+的CPU占用。在我们的环境中,空闲进程占用如此高的CPU资源影响重大,请问是否有办法将其降至0-10%?
.NET7应用中MassTransit配置示例
.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飙升。
内容的提问来源于stack exchange,提问作者jforward5
相关产品推荐
相关产品推荐

