2015-02-17 9 views
16

मैं मॉनिटर करना चाहता हूं कि node.js में इवेंट लूप के प्रत्येक भाग में कितना समय लगता है। हालांकि मैं इसे मापने का सबसे अच्छा तरीका अनिश्चित हूं। सबसे अच्छा तरीका है मैं इस तरह दिखता है के साथ आ सकता है:node.js में इवेंट लूप अवरुद्ध करने का आकलन और माप कैसे करें?

var interval = 500; 
var interval = setInterval(function() { 
    var last = Date.now();   
    setImmediate(function() { 
     var delta = Date.now() - last; 
     if (delta > blockDelta) { 
      report("node.eventloop_blocked", delta); 
     } 
    }); 
}, interval); 

मैं मूल रूप से एक setInterval की देरी को देखकर घटना पाश रन टाइम अनुमान लगाते हैं। मैंने blocked नोड मॉड्यूल में एक ही दृष्टिकोण देखा है लेकिन यह गलत और भारी लगता है। क्या इस जानकारी को पाने का कोई बेहतर तरीका है?

अपडेट: setImmediate का उपयोग करने के लिए कोड को बदलकर hapi.js.

+0

[hapi.js लोग इसे समान तरीके से करते हैं] (https://github.com/hapijs/good/blob/ecd705719777af5810dc224001940205cfebd2eb/lib/process.js#L14-L21), और वे इस मूल्य की निगरानी कर रहे हैं लगातार, ऐसा लगता है कि यह आपकी सबसे सुरक्षित शर्त होगी। –

+0

सूचक के लिए धन्यवाद। उनका उपयोग ओएस 'सेट इमीडिएट' भी बेहतर है। –

उत्तर

7

का जवाब "क्या इस जानकारी पाने के लिए एक बेहतर तरीका है?" मैं SetImmediate के समय देरी जाँच से eventloop परीक्षण करने के लिए एक बेहतर तरीका नहीं है, लेकिन आप Date.now()

var interval = 500; 
var interval = setInterval(function() { 
    var last = process.hrtime();   // replace Date.now()   
    setImmediate(function() { 
     var delta = process.hrtime(last); // with process.hrtime() 
     if (delta > blockDelta) { 
      report("node.eventloop_blocked", delta); 
     } 
    }); 
}, interval); 

नोट के बजाय नोड के उच्च संकल्प टाइमर का उपयोग बेहतर परिशुद्धता प्राप्त कर सकते हैं: डेल्टा एक टपल सरणी हो जाएगा [सेकंड, नैनोसेकंद]।

process.hrtime() के बारे में अधिक जानकारी के लिए: https://nodejs.org/api/all.html#all_process_hrtime

"प्राथमिक उपयोग के अंतराल के बीच प्रदर्शन को मापने के लिए है।"

0

कोड

इस कोड नैनोसेकंड में समय यह घटना पाश को गति प्रदान करने के लिए ले लिया मापेंगे। यह वर्तमान प्रक्रिया और अगले टिक के बीच का समय मापता है।

var time = process.hrtime(); 
process.nextTick(function() { 
    var diff = process.hrtime(time); 


    console.log('benchmark took %d nanoseconds', diff[0] * 1e9 + diff[1]); 
    // benchmark took 1000000527 nanoseconds 
}); 

संपादित करें: जोड़ा स्पष्टीकरण,

process.hrtime ([समय])

एक [सेकंड, नैनोसेकंड] टपल सरणी में मौजूदा उच्च संकल्प वास्तविक समय देता है। समय एक वैकल्पिक पैरामीटर है जो पिछले प्रक्रिया के साथ भिन्न होने के लिए पिछली प्रक्रिया का परिणाम होना चाहिए।(), (और इसलिए, एक वास्तविक समय [सेकंड, नैनोसेकंड] ट्यूपल ऐरे में एक वास्तविक समय होता है)। ये समय अतीत में मनमाने ढंग से समय के सापेक्ष होते हैं, और दिन के समय से संबंधित नहीं होते हैं और इसलिए घड़ी की बहाव के अधीन नहीं होते हैं। प्राथमिक उपयोग अंतराल के बीच प्रदर्शन को मापने के लिए है।

process.nextTick (कॉलबैक [, आर्ग] [...])

एक बार वर्तमान घटना पाश बारी पूरा करने चलाता है, कॉलबैक फ़ंक्शन कहते हैं।

यह सेटटाइम (एफएन, 0) के लिए एक साधारण उपनाम नहीं है, यह अधिक कुशल है। यह इवेंट लूप के बाद की टिकों में किसी भी अतिरिक्त आई/ओ घटनाओं (टाइमर समेत) आग से पहले चलता है।

संबंधित मुद्दे