Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
减少php守护程序内存使用_Php_Zend Framework_Memory Management_Daemon - Fatal编程技术网

减少php守护程序内存使用

减少php守护程序内存使用,php,zend-framework,memory-management,daemon,Php,Zend Framework,Memory Management,Daemon,你能帮我找出是什么原因导致这个进程的内存使用量达到500MB吗。 它基本上是一个html页面下载程序。 尽管这个过程是稳定的(并且没有超过这个限制),但它的目的是在低性能的机器上使用,我不满意。 mysql表“Sites”的大小为170MB。 遵循脚本代码。 提前谢谢 function start() { try { global $log; $db = getConnection(); Zend_Db_Table::setDefaultAdapter($db);

你能帮我找出是什么原因导致这个进程的内存使用量达到500MB吗。 它基本上是一个html页面下载程序。 尽管这个过程是稳定的(并且没有超过这个限制),但它的目的是在低性能的机器上使用,我不满意。 mysql表“Sites”的大小为170MB。 遵循脚本代码。 提前谢谢

function start() {
try {
    global $log;
    $db = getConnection();
    Zend_Db_Table::setDefaultAdapter($db);
    $log->logInfo("logger start");
    while (1) {
        $sitesTable = new Zend_Db_Table('Sites');
        $rowset = $sitesTable->fetchAll();
        foreach ($rowset as $row) {
            if (time() >= (strtotime($row->lastUpdate) + $row->pollingHours * 60 * 60)) {
                db_updateHtml($row);
            }
        }
    }
} catch (Exception $e) {
    global $log;
    $log->logError($e->getMessage());
}
}

    function db_updateHtml($siteRecord) {
        try {
            if ($siteRecord instanceof Zend_Db_Table_Row) {
                $rowwithConnection = $siteRecord;
                $url = $siteRecord->url;

                $idSite = $siteRecord->idSite;
                $crawler = new Crawler();
                $sitesTable = new Zend_Db_Table('Sites');
                //$rowwithConnection = $sitesTable->fetchRow(
                  //      $sitesTable->select()->where('idSite = ?', $idSite));
                $newHtml = HtmlDbEncode($crawler->get_web_page($url));


                if (strlen($newHtml) < 10) {
                    global $log;
                    $log->logError("Download failed for: url: $url \t idsite: $idSite ");
                }
                if ($rowwithConnection->isChecked != 0) {
                    $rowwithConnection->oldHtml = $rowwithConnection->newHtml;
                    $rowwithConnection->isChecked = 0;
                }
                $rowwithConnection->newHtml = $crawler->get_web_page($url);
                $rowwithConnection->lastUpdate = date("Y-m-d H:i:s");
                //$rowwithConnection->diffHtml = getDiff($rowwithConnection->oldHtml, $rowwithConnection->newHtml, false, $rowwithConnection->minLengthChange);
                $rowwithConnection->diffHtml = getDiffFromRecord($rowwithConnection, false, $rowwithConnection->minLengthChange);
                /* if (strlen($rowwithConnection->diffHtml) > 30) {
                  $rowwithConnection->lastChanged = $rowwithConnection->lastUpdate;
                  } */
                $rowwithConnection->save();
            } else {
                $log->logCrit("siteRecord is uninitialized");
            }
        } catch (Exception $e) {
            global $log;
            $log->logError($e->getMessage());
        }
    }

    function getDiffFromRecord($row, $force = false, $minLengthChange = 100) {
        if ($row instanceof Zend_Db_Table_Row) {
            require_once '/var/www/diff/library/finediff.php';
            include_once '/var/www/diff/library/Text/Diff.php';
            $diff = new AndreaDiff();
            $differences = $diff->getDiff($row->oldHtml, $row->newHtml);
            if ($diff->isChanged($minLengthChange) || $force) {
                $row->lastChanged = $row->lastUpdate;
                $row->isChecked = false;
                return ($differences);
            }
        }
        return null;
    }

    function getConnection() {
        try {
            $pdoParams = array(
                PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
            );
            $db = new Zend_Db_Adapter_Pdo_Mysql(array(
                        'host' => '127.0.0.1',
                        'username' => 'root',
                        'password' => 'administrator',
                        'dbname' => 'diff',
                        'driver_options' => $pdoParams
                    ));
            return $db;
        } catch (Exception $e) {
            global $log;
            $log->logError($e->getMessage());
        }

    }
函数开始(){
试一试{
全球$log;
$db=getConnection();
Zend_Db_Table::setDefaultAdapter($Db);
$log->logInfo(“记录器启动”);
而(1){
$sitesTable=新的Zend_Db_表(“站点”);
$rowset=$sitesTable->fetchAll();
foreach($rowset为$row){
如果(time()>=(strottime($row->lastUpdate)+$row->pollingHours*60*60)){
db_updateHtml($row);
}
}
}
}捕获(例外$e){
全球$log;
$log->logError($e->getMessage());
}
}
函数db_updateHtml($siteRecord){
试一试{
if($siteRecord instanceof Zend\u Db\u Table\u行){
$rowwithConnection=$siteRecord;
$url=$siteRecord->url;
$idSite=$siteRecord->idSite;
$crawler=新爬虫();
$sitesTable=新的Zend_Db_表(“站点”);
//$rowwithConnection=$sitesTable->fetchRow(
//$sitesTable->select()->where('idSite=?',$idSite));
$newHtml=HtmlDbEncode($crawler->get_web_page($url));
if(strlen($newHtml)<10){
全球$log;
$log->logError(“下载失败:url:$url\t idsite:$idsite”);
}
如果($rowwithConnection->isChecked!=0){
$rowwithConnection->oldHtml=$rowwithConnection->newHtml;
$rowwithConnection->isChecked=0;
}
$rowwithConnection->newHtml=$crawler->获取网页($url);
$rowwithConnection->lastUpdate=日期(“Y-m-d H:i:s”);
//$rowwithConnection->diffHtml=getDiff($rowwithConnection->oldHtml,$rowwithConnection->newHtml,false,$rowwithConnection->minLengthChange);
$rowwithConnection->diffHtml=getDiffFromRecord($rowwithConnection,false,$rowwithConnection->minLengthChange);
/*如果(strlen($rowwithConnection->diffHtml)>30){
$rowwithConnection->lastChanged=$rowwithConnection->lastUpdate;
} */
$rowwithConnection->save();
}否则{
$log->logCrit(“siteRecord未初始化”);
}
}捕获(例外$e){
全球$log;
$log->logError($e->getMessage());
}
}
函数getDiffFromRecord($row,$force=false,$minLengthChange=100){
if($Zend\u Db\u Table\u行的行实例){
需要_once'/var/www/diff/library/finediff.php';
包括_once'/var/www/diff/library/Text/diff.php';
$diff=新的AndreaDiff();
$differences=$diff->getDiff($row->oldHtml,$row->newHtml);
如果($diff->isChanged($minLengthChange)| |$force){
$row->lastChanged=$row->lastUpdate;
$row->isChecked=false;
回报(差额);
}
}
返回null;
}
函数getConnection(){
试一试{
$pdoParams=数组(
PDO::MYSQL\u ATTR\u USE\u BUFFERED\u QUERY=>true
);
$db=新的Zend_db_适配器_Pdo_Mysql(阵列)(
“主机”=>“127.0.0.1”,
'用户名'=>'根',
“密码”=>“管理员”,
“dbname”=>“diff”,
“驱动程序选项”=>$pdoParams
));
返回$db;
}捕获(例外$e){
全球$log;
$log->logError($e->getMessage());
}
}
1)尝试使用fetch方法,而不是fetchAll:

foreach($sitesTable->fetch() as $row){
   //...
}
2) 尝试取消设置所有存储html代码的变量(如果您将其保存在内存中),在最后一次迭代中,我假设变量
$rowwithConnection
将包含html代码

当我需要配置文件php应用程序时,我使用它将为您节省大量时间。祝你好运