0

PHPで次のcronスクリプトをカスタマイズするのを手伝っていただけませんか。スクリプトは、サーバーに多くのバックグラウンドプロセスを作成しています。1日後、サーバーがビジー状態になり、MYSQLサーバーがクラッシュします。

次のスクリプトの何が問題になっていますか。特定のUDPポートを継続的にリッスンするには、このスクリプトが必要です。したがって、すべてのmitを実行するcronjonとして設定されます。

set_time_limit(60);
class pingtype
{
function rotate()
{

    $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    socket_bind($socket, '50.50.50.50', 9091);
    $from = '';
    $port = 0;
    $bytes_received = socket_recvfrom($socket, $buf, 150, MSG_PEEK, $from, $port);
    if ($bytes_received == -1)
    {
            die('An error occured while receiving from the socket');
            echo "Received $buf from $from\n";
    }

    echo "Received $buf from remote address $from and remote port $port";

    $hex_string_buf = "HEX: ".$this->strToHex($buf)."  String: ".$buf;

    $link = mysql_connect("localhost", "user_database", "123") or die ("Errror in connection ".mysql_error());
    mysql_select_db("database") or die ("Error in select ".mysql_error());

    $sql = "INSERT INTO socket SET contents='".$hex_string_buf."' ";
    mysql_query($sql) or die ("Error in query ".mysql_error());
    mysql_close($link);
    // close socket and delete own .sock file
    socket_close($socket);      
    usleep(1000);       
}
function strToHex($string)
{
    $hex='';
    for ($i=0; $i < strlen($string); $i++)
    {
        $hex .= str_pad(dechex(ord($string[$i])), 3);
    }
    return $hex;
}

function hexToStr($hex)
{
    $string='';
    for ($i=0; $i < strlen($hex)-1; $i+=2)
    {
        $string .= chr(hexdec($hex[$i].$hex[$i+1]));
    }
    return $string;
}
}



for($i=1;$i<=6000;$i++)
{
    $object_pingtype = new pingtype();  
    $object_pingtype->rotate();
}
4

1 に答える 1

0

サーバーが過負荷になっています。スクリプトが毎分実行される場合、次のコードが実行されます。

for($i=1;$i<=6000;$i++)
{
    $object_pingtype = new pingtype();  
    $object_pingtype->rotate();
}

これは、1秒あたり6000 / 60〜100リクエストに要約されます。サーバーに十分な容量がない場合、このスクリプトは60秒で終了しません。そして、新しいスクリプトが開始されます。

結局のところ、サーバーはすべてのタスクを分類します。

また:

  • ループ内の回転数を減らします
  • 1時間あたりのスクリプト実行回数を減らします。
于 2012-09-14T13:06:58.243 に答える