平台早上6点56出现无响应情况。
最后一条日志如下:
[2010-08-12 06:56:52:872](线程4152)客户通:客户通添加合作机构扫描线程--结束。
处理:
(1)跟踪一个定时器
跟踪DeamonTaskManager的定时器处理函数,在入和出加上日志,代码如下:
int DeamonTaskManager::handle_timeout(const ACE_Time_Value &tv,const void *arg) {
HTX_LOGGER::instance()->log(LO_STDOUT|LO_FILE,SEVERITY_DEBUG,"DeamonTask: DeamonTaskManager::handle_timeout.../n");
DeamonTask *task = ACE_reinterpret_cast(DeamonTask*,arg);
if (task->pre_cond_func_==0||(*task->pre_cond_func_)()) {
if (task->sche_strategy_->is_ripe())
task->start();
else{
HTX_LOGGER::instance()->log(LO_STDOUT|LO_FILE,SEVERITY_ERROR,"DeamonTask: DeamonTaskManager::handle_timeout task->sche_strategy_->is_ripe判断失败./n");
}
}else{
HTX_LOGGER::instance()->log(LO_STDOUT|LO_FILE,SEVERITY_ERROR,"DeamonTask: DeamonTaskManager::handle_timeout task->pre_cond_func_判断失败./n");
}
HTX_LOGGER::instance()->log(LO_STDOUT|LO_FILE,SEVERITY_DEBUG,"DeamonTask: DeamonTaskManager::handle_timeout./n");
return 0;
}
(2)跟踪创建线程是否失败
跟踪DeamonTask的start函数,记录创建线程失败日至,代码如下:
int DeamonTask::start() {
if (thr_mgr_.count_threads()){
HTX_LOGGER::instance()->log(LO_STDOUT|LO_FILE,SEVERITY_ERROR,"DeamonTask::start thr_mgr_.count_threads()失败./n");
return -1;
}
DeamonThreadArg *arg = new DeamonThreadArg; ///< func函数负责释放
arg->arg_ = arg_;
arg->task_ = this;
if( -1 == thr_mgr_.spawn(exec_task_func,arg,THR_NEW_LWP|THR_DETACHED) ){
HTX_LOGGER::instance()->log(LO_STDOUT|LO_FILE,SEVERITY_ERROR,"DeamonTask::start exec_task_func失败./n");
return -2;
}
return 0;
}
(3)在反应器事件循环线程增加初始化com,代码如下:
static ACE_THR_FUNC_RETURN reactor_event_func(void *arg) {
HRESULT hr = ::CoInitializeEx(NULL,COINIT_MULTITHREADED);
if( hr != S_OK && hr != S_FALSE ){
HTX_LOGGER::instance()->log(LO_STDOUT|LO_FILE,SEVERITY_ERROR,"reactor_event_func CoInitializeEx失败[%d]./n",hr);
}
HTX_Reactor *r = ACE_reinterpret_cast(HTX_Reactor*,arg);
r->reactor_->owner(ACE_Thread::self());
r->reactor_->run_reactor_event_loop();
HTX_LOGGER::instance()->log(LO_STDOUT|LO_FILE,SEVERITY_INFO,"HTX 反映器结束事件循环/n");
::CoUninitialize();
return 0;
}
于今晚7点半重起平台