Example #1
0
 protected function _flowPredict($flow)
 {
     if (count($this->_arrFlow) >= 18) {
         array_shift($this->_arrFlow);
     }
     array_push($this->_arrFlow, $flow);
     $average = ceil(array_sum($this->_arrFlow) / count($this->_arrFlow));
     $driveConf = $this->_objAha->getConfig()->get('aha', 'drive');
     $maxFlow = $driveConf['max_process_num'];
     if ($average > $maxFlow * 0.85) {
         \Daemon\Library\Ipc\Shared::getMaxTaskNumAtomic()->set(0);
         //根据流量预测 可能已经堵住了 清零自恢复
         Log::monitor()->error(array(Monitor::KEY => Monitor::FLOW_OVER_PREDICT_RESET, 'average' => $average, 'maxFlow' => $maxFlow * 0.85));
     }
     Log::statsLog()->debug(array('type' => 'flowPredict', 'average' => $average, 'maxFlow' => $maxFlow, 'point' => $maxFlow * 0.85));
     return $average;
 }