在libuv中,您最终可能会在工作线程中绑定过多的工作或错误的代码。有没有一个简单的函数可以检查工作线程或线程队列的健康状况?它不必是100%确定性的,毕竟不可能确定工作线程挂在慢代码还是无限循环上。libuv工作线程或工作队列运行状况检查?
所以以下任何试探的将是一件好事:
排队的项目数尚未制定上。如果这太大,可能意味着工作线程繁忙或挂起。
libuv是否有任何线程查杀机制,如果工作线程在n秒内未检查回来,它会终止?
在libuv中,您最终可能会在工作线程中绑定过多的工作或错误的代码。有没有一个简单的函数可以检查工作线程或线程队列的健康状况?它不必是100%确定性的,毕竟不可能确定工作线程挂在慢代码还是无限循环上。libuv工作线程或工作队列运行状况检查?
所以以下任何试探的将是一件好事:
排队的项目数尚未制定上。如果这太大,可能意味着工作线程繁忙或挂起。
libuv是否有任何线程查杀机制,如果工作线程在n秒内未检查回来,它会终止?
该函数在libuv本身中不存在,我不知道任何提供类似的OSS。
在杀菌机制方面,有没有烤成libuv,但http://nikhilm.github.io/uvbook/threads.html#core-thread-operations提示:
一个精心设计的方案将有一种方式来终止长时间运行 工人说已经开始执行。这样的工作人员可以定期检查只有主进程设置为 信号终止的变量。
如果这是针对nodejs,是否会有一个简单的监控线程呢?我不知道如何获取有关事件队列内部的信息,但是您可以在事件队列中注入一个跟踪器,以监视线程是否正在及时运行。 (这种测量不是通过尚未运行的线程的数量来加载,而是通过线程是否按时运行。相同的东西,种类。)
监视器线程可以自行重新排队并检查它是否被调用至少每10毫秒(或允许的最大累积阻塞毫秒数)。由于nodej运行线程循环,如果监视器线程按时运行,它告诉我们所有其他线程都有机会在相同的10ms窗口内运行。类似于(在节点中):
// 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();
限制警报消息并支持干净关闭是读者的一项练习。
你使用libuv作为node.js应用程序的一部分还是独立? –