これがnodejsの場合は、単純なモニタスレッドが行いますか?イベントキューの内部情報を取得する方法はわかりませんが、イベントキューにトレーサを挿入して、スレッドが適時に実行されていることを監視できます。 (これは、まだ実行されていないスレッドの数ではなく、スレッドが所定の時間内に実行されているかどうかによって負荷を測定します)。
モニタスレッドは、自身を再キューして、少なくとも10ミリ秒ごと(または累積ブロッキング・ミリ秒が許容される最大値)です。 nodejはスレッドをラウンドロビンで実行するので、モニタスレッドが所定の時間に実行された場合、他のすべてのスレッドが同じ10ミリ秒のウィンドウ内で実行される可能性があることがわかります。ノード内のようなもの:
// like Date.now(), but with higher precision
// the extra precision is needed to be able to track small delays
function dateNow() {
var t = process.hrtime();
return (t[0] + t[1] * 1e-9) * 1000;
}
var _lastTimestamp = dateNow(); // when healthMonitor ran last, in ms
var _maxAllowedDelay = 10.0; // max ms delay we allow for our task to run
function healthMonitor() {
var now = dateNow();
var delay = now - _lastTimestamp;
if (delaly > _maxAllowedDelay) {
console.log("healthMonitor was late:", delay, " > ", _maxAllowedDelay);
}
_lastTimestamp = now;
setTimeout(healthMonitor, 1);
}
// launch the health monitor and run it forever
// note: the node process will never exit, it will have to be killed
healthMonitor();
アラートメッセージを抑制し、クリーンシャットダウンをサポートすることは、読者に残された課題です。
node.jsアプリまたはスタンドアロンの一部としてlibuvを使用していますか? –