Re: Command-line PHP script CPU usage goes sky-high, stays there--why?
| From: | Jim Lucas | Date: | Tue, 11 Dec 2007 00:20:19 +0000 |
| Subject: | Re: Command-line PHP script CPU usage goes sky-high, stays there--why? | ||
| References: | 1 2 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-265644@lists.php.net to get a copy of this message | ||
Tom Rogers wrote:
> Hi,
>
> Tuesday, December 11, 2007, 6:42:18 AM, you wrote:
> RF> Hello,
>
> Put a usleep(1000) in the listen while() loop and give the cpu a
> break.
>
This makes me think about asking if you have to short of a timeout on your receiving connection?
What are you using to setup your connection? fsockopen() or stream_socket_server() ?
here is a snippet of what I have
<?php
$conn = mysql_connect(...);
if ( $socket = @stream_socket_server('udp://'.LISTEN_IP.':'.LISTEN_PORT,
$errno, $errstr, STREAM_SERVER_BIND) ) {
while ( true ) {
/* Get the exact same packet again, but remove it from the buffer this time. */
$buff = stream_socket_recvfrom($socket, 1024, 0, $remote_ip);
# do stuff with your incoming data and mysql connection
}
fclose($socket);
}
mysql_close($conn);
?>
I don't have a timeout set on the *_recvfrom() call. I just wait until the next connection
comes in.
You don't need to use mysql_pconnect(), especially if you are using, what in essence is, a
daemon.
Just don't open and close the connection constantly, leave it open.
Also, make sure you are not using an array that you are not re-initializing through each iteration
of the loop. If the array keeps getting bigger, PHP might $*%& on itself. Always re-initialize
arrays to clean them up.
Hope some of this helps!
--
Jim Lucas
"Some men are born to greatness, some achieve greatness,
and some have greatness thrust upon them."
Twelfth Night, Act II, Scene V
by William Shakespeare