Nutch1.7源码再研究之---14 Fetch中的监视器代码
2014-10-17 00:00
316 查看
此刻,我们知道QueueFeeder线程和FetcherThread-生产者和消费者线程都在跑,
此时主线程做什么?它在监视整个运行空间。代码如下:
----------------------------------------------------------------------------------
pagesLastSec = pages.get();
bytesLastSec = (int) bytes.get();//保存上一次的2个结果
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}//休眠一秒
pagesLastSec = pages.get() - pagesLastSec;
bytesLastSec = (int) bytes.get() - bytesLastSec;//重新取得结果
reporter.incrCounter("FetcherStatus", "bytes_downloaded",
bytesLastSec);
reportStatus(pagesLastSec, bytesLastSec);//更新结果
LOG.info("-activeThreads=" + activeThreads + ", spinWaiting="
+ spinWaiting.get() + ", fetchQueues.totalSize="
+ fetchQueues.getTotalSize());
//打印日志:活跃线程数,等待个数,剩下的需要fetch的item的个数。
说明:
1 如果在中间某个状态下活跃线程个数少的话,说明线程执行出现了异常,个人认为应该每个
死去的线程负责重启一个活跃线程,否则线程越来越少,岂不是慢得很。
2 fetchQueues.getTotalSize只是当前池子里的所有item,后续QueueFeeder会不停的读文件
补充到这个fetchQueues里。
------------------------------------------------------------------------------
接下来的一段代码:
if (!feeder.isAlive() && fetchQueues.getTotalSize() < 5) {
fetchQueues.dump();
}
这里真心不明白,这段代码干嘛的!
-----------------------------------------下面的一段代码,
由于throughputThresholdPages-------------:-1
所以不会执行。
--------------------------------------------------
然后是一段超时检测代码:
// some requests seem to hang, despite all intentions
if ((System.currentTimeMillis() - lastRequestStart.get()) > timeout) {
if (LOG.isWarnEnabled()) {
LOG.warn("Aborting with " + activeThreads
+ " hung threads.");
}
return;
}
如果在一定时间之内,没有线程更新fetch的时间,则主线程退出。
这里不需要对feeder和fetcher线程做控制吗?
------------------------------------------------------
好吧,无论如何,Fetch的部分讲解完了!
此时主线程做什么?它在监视整个运行空间。代码如下:
----------------------------------------------------------------------------------
pagesLastSec = pages.get();
bytesLastSec = (int) bytes.get();//保存上一次的2个结果
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}//休眠一秒
pagesLastSec = pages.get() - pagesLastSec;
bytesLastSec = (int) bytes.get() - bytesLastSec;//重新取得结果
reporter.incrCounter("FetcherStatus", "bytes_downloaded",
bytesLastSec);
reportStatus(pagesLastSec, bytesLastSec);//更新结果
LOG.info("-activeThreads=" + activeThreads + ", spinWaiting="
+ spinWaiting.get() + ", fetchQueues.totalSize="
+ fetchQueues.getTotalSize());
//打印日志:活跃线程数,等待个数,剩下的需要fetch的item的个数。
说明:
1 如果在中间某个状态下活跃线程个数少的话,说明线程执行出现了异常,个人认为应该每个
死去的线程负责重启一个活跃线程,否则线程越来越少,岂不是慢得很。
2 fetchQueues.getTotalSize只是当前池子里的所有item,后续QueueFeeder会不停的读文件
补充到这个fetchQueues里。
------------------------------------------------------------------------------
接下来的一段代码:
if (!feeder.isAlive() && fetchQueues.getTotalSize() < 5) {
fetchQueues.dump();
}
这里真心不明白,这段代码干嘛的!
-----------------------------------------下面的一段代码,
由于throughputThresholdPages-------------:-1
所以不会执行。
--------------------------------------------------
然后是一段超时检测代码:
// some requests seem to hang, despite all intentions
if ((System.currentTimeMillis() - lastRequestStart.get()) > timeout) {
if (LOG.isWarnEnabled()) {
LOG.warn("Aborting with " + activeThreads
+ " hung threads.");
}
return;
}
如果在一定时间之内,没有线程更新fetch的时间,则主线程退出。
这里不需要对feeder和fetcher线程做控制吗?
------------------------------------------------------
好吧,无论如何,Fetch的部分讲解完了!
相关文章推荐
- Nutch1.7源码再研究之---11 Fetch中的QueueFeeder线程代码分析
- .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:WinDbg和SOS
- .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:WinDbg和SOS
- .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:WinDbg和SOS
- 很棒的图片浏览器代码,源码研究
- 从std::string、leveldb、openbsc源码,研究为什么他们要这么设计代码
- .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:WinDbg和SOS
- Nutch1.7源码再研究之---4 Nutch的Inject过程详解(续)
- .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:WinDbg和SOS
- .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:WinDbg和SOS
- caffe源码分析--Blob类代码研究
- .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:WinDbg和SOS
- .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:WinDbg和SOS
- .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:WinDbg和SOS
- .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:WinDbg和SOS
- .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:WinDbg和SOS
- .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:WinDbg和SOS
- .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:WinDbg和SOS
- thift源码研究-客户端代码分析
- Nutch1.7源码再研究之---5 Nutch的generate详解