예제 #1
0
파일: Stats.php 프로젝트: eyehere/aha
 protected function _stats($package)
 {
     $arrWorkers = unserialize($package);
     if (!is_array($arrWorkers) || empty($arrWorkers)) {
         return;
     }
     $total = 0;
     $arrRet = array();
     foreach ($arrWorkers as $pid) {
         $taskNum = \Daemon\Library\Ipc\Shared::getCurrentTaskNumByKey($pid);
         $arrRet["w_{$pid}"] = $taskNum;
         $total += $taskNum;
     }
     $arrRet['total'] = $total;
     $flow = \Daemon\Library\Ipc\Shared::getMaxTaskNumAtomic()->get();
     $arrRet['flow'] = $flow;
     $driveConf = $this->_objAha->getConfig()->get('aha', 'drive');
     $maxProcessNum = intval($driveConf['max_process_num']);
     if ($flow > $total) {
         $arrRet['MONITOR1'] = "FLOW_OVER_FLOW_TOTAL";
     }
     if ($flow >= $maxProcessNum) {
         $arrRet['MONITOR2'] = "FLOW_OVER_FLOW_MAX_PROCESS_NUM";
     }
     Log::statsLog()->debug($arrRet);
     $average = $this->_flowPredict($flow);
     if ($average <= 0) {
         foreach ($arrWorkers as $pid) {
             \Daemon\Library\Ipc\Shared::setCurrentTaskTable($pid, array('taskNum' => 0));
         }
     }
 }
예제 #2
0
파일: Master.php 프로젝트: eyehere/aha
 protected function _taskWorkerBalance($distributeWorkers)
 {
     $pids = array_keys($distributeWorkers);
     $index = mt_rand(0, count($pids) - 1);
     $pid = $pids[$index];
     $driveConf = $this->_objAha->getConfig()->get('aha', 'drive');
     $maxCnt = intval($driveConf['max_task']);
     $taskNum = \Daemon\Library\Ipc\Shared::getCurrentTaskNumByKey($pid);
     if ($taskNum < $maxCnt) {
         return $pid;
     }
     foreach ($pids as $sparePid) {
         $taskNum = \Daemon\Library\Ipc\Shared::getCurrentTaskNumByKey($sparePid);
         if ($taskNum < $maxCnt) {
             return $sparePid;
         }
     }
     return $pid;
 }