हम Netty घटना पाश कतारों के लिए निगरानी को क्रियान्वित किया है के आकार की निगरानी करना। मॉनिटर io.netty.util.concurrent.SingleThreadEventExecutor#pendingTasks
विधि का उपयोग करता है, जो अधिकांश मॉड्यूल के लिए काम करता है, लेकिन एक मॉड्यूल के लिए जो प्रति सेकंड कुछ हज़ार HTTP अनुरोधों को संभालता है, ऐसा लगता है कि यह लटका हुआ है, या बहुत धीमा है। अब मुझे एहसास है कि दस्तावेज़ सख्ती से यह एक मुद्दा हो सकते हैं, और मुझे बहुत लंगड़ा लगता है ... इसलिए मैं इस मॉनीटर को लागू करने के लिए एक और तरीका ढूंढ रहा हूं।ताकि हमारे Netty मॉड्यूल में से कुछ के साथ मुद्दों को समझने के लिए Netty घटना पाश कतारों
आप यहाँ पुराने कोड देख सकते हैं: https://github.com/outbrain/ob1k/blob/6364187b30cab5b79d64835131d9168c754f3c09/ob1k-core/src/main/java/com/outbrain/ob1k/common/metrics/NettyQueuesGaugeBuilder.java
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++;
}
}
}
मेरा प्रश्न, है वहाँ कतार आकार पर नजर रखने के लिए एक बेहतर तरीका है?
यह काफी उपयोगी मीट्रिक साबित हो सकता है क्योंकि यह विलंबता को समझने के लिए इस्तेमाल किया जा सकता है, और भी कुछ मामलों में पीछे से दबाव लागू करने के लिए इस्तेमाल किया जाएगा।
मुझे आंतरिक विवरणों पर भरोसा करने का विचार पसंद नहीं है। मुझे लगता है कि मैं घटना लूप थ्रेड के भीतर से कतार आकार की जांच करने के लिए समय-समय पर कार्य को शेड्यूल करना चाहता हूं। सटीक नहीं, लेकिन निगरानी के लिए ठीक है। –