PHP cli内存使用优化

时间:2009-07-10 01:19:04

标签: bash optimization memory php

我正在尝试为squid编写自定义url_rewriter。 &安培;还使用了一些其他url_rewriter程序,如squidGuard 所以必须使用包装器才能使用这两个程序或任何其他程序。

当我尝试用php循环时。 (这就是鱿鱼与外部程序通信的方式。 标准输入/输出。它给你一个网址&你必须发回新的或旧的。 )

即使什么都不做,它仍具有破坏性的内存使用率。 我已经改为用另一个bash脚本包装它只有几行。 &安培;它循环而不是PHP。从外部调用php。使用url完成php脚本时返回它&退出。 这种方式比不用循环php脚本要好得多。

在PHP脚本中几乎没有任何东西。 (因为我还在开发它。) 它只是将video.yahoo.com替换为youtube.com。 还有一些变量和一个用于解析输入字符串的explode()... 但脚本仍在使用大量内存


这是最高输出:

 PID USER   VIRT  RES  SHR S %CPU %MEM TIME+  COMMAND

32059 squid   19720 7432 4396 R    0.9    2.9    0:00.02   php      
32063 squid   19720 7436 4396 R    0.9    2.9    0:00.02   php      
32066 squid   19720 7436 4396 R    0.9    2.9    0:00.02   php      
32068 squid   19460 6188 3472 R    0.9    2.4    0:00.02   php      
32070 squid   19720 7432 4396 R    0.9    2.9    0:00.02   php      
32074 squid   19588 6792 3924 R    0.9    2.6    0:00.02   php      
32077 squid   19720 7436 4396 R    0.9    2.9    0:00.02   php   

这是PHP脚本

#!/opt/lampp/bin/php -q 
<php
ini_set('html_errors',false);
ini_set('implicit_flush',true);
ini_set('max_execution_time',0);
ini_set('register_argc_argv',true);

$nl="\n"; $tab="\t";
$ds=DIRECTORY_SEPARATOR;
$lamppdir='/opt/lampp/';
$htdocsdir='/opt/lampp/htdocs/';
$wdir='/opt/lampp/htdocs/bin/';
$incdir=$htdocsdir.'inc/';
$logfile=$wdir.'log.txt';

if ($argc>1){
    $return=$argv[1];
    $return=explode(' ',trim($return));
    $url=$return[0];
    $sourceip=$return[1];
    $user=$return[2];
    $method=$return[3];
    $urlgroup=$return[4];
    $myip=$return[5];
    $myport=$return[6];

    $logdata=$argv[1];

    // if(strlen($logdata)>50){ file_put_contents($logfile,$logdata.$nl,FILE_APPEND); }

    fwrite(STDOUT,$return[0]."\r\n");
}

exit(0);

这是bash脚本

#!/bin/bash
 lamppdir=/opt/lampp/
 phpexecpath=/opt/lampp/bin/php
 phpredirectorpath=/opt/lampp/htdocs/bin/redir.php
 logdfile=/opt/lampp/htdocs/bin/log.txt
 forcedexit=false

 while [ "${forcedexit}" != "true" ]
 do
    read squidinput
    phpout=`"${phpexecpath}" "${phpredirectorpath}" "${squidinput}"`
    echo "${phpout}"
 done

 echo "\r\n"

exit 0

我已经谷歌搜索任何有关PHP cli& amp;和来源使用但没有运气。

您是否有任何减少源使用量的建议?

1 个答案:

答案 0 :(得分:0)

我打赌你会嘲笑这个。我看错了地方。

经过长期追踪stdin / stdout的鱿鱼。 我刚刚在循环中添加了一个if语句。将字符串的长度控制为url。

while [ "${forcedexit}" != "true" ]
do
    read squidinput
    if [ -n squidinput ]
       then
        phpout=`"${phpexecpath}" "${phpredirectorpath}" "${squidinput}"`
        echo "${phpout}"
    fi
done

结果:在后台没有等待的php进程了。 因为它的处理和退出只是毫秒。

没有IF语句squid正在向脚本发送空格和换行符,因此它永远不会停止。我正在修改输入字符串与php,这就是为什么我不能得到早期鱿鱼的奇怪的stdins。修剪$ argv只是一种习惯。 squid版本是2.6stable7,可能它在早期版本中都是一样的。 我刚刚失去了半天:( 谢谢大家阅读。