【发布时间】:2016-01-01 05:03:00
【问题描述】:
我们已经对 Netty 事件循环队列实施了监控,以便了解我们的一些 Netty 模块存在的问题。
监视器使用io.netty.util.concurrent.SingleThreadEventExecutor#pendingTasks 方法,该方法适用于大多数模块,但对于每秒处理几千个HTTP 请求的模块,它似乎被挂起,或者非常慢。
我现在意识到文档严格指定这可能是一个问题,我觉得很蹩脚......所以我正在寻找另一种方法来实现这个监视器。
public static void registerQueueGauges(final MetricFactory factory, final EventLoopGroup elg, final String componentName) {
int index = 0;
for (final EventExecutor eventExecutor : elg) {
if (eventExecutor instanceof SingleThreadEventExecutor) {
final SingleThreadEventExecutor singleExecutor = (SingleThreadEventExecutor) eventExecutor;
factory.registerGauge("EventLoopGroup-" + componentName, "EventLoop-" + index, new Gauge<Integer>() {
@Override
public Integer getValue() {
return singleExecutor.pendingTasks();
}
});
index++;
}
}
}
我的问题是,有没有更好的方法来监控队列大小?
这是一个非常有用的指标,因为它可以用来了解延迟,也可以在某些情况下用于施加背压。
【问题讨论】:
标签: java netty monitoring event-loop