Re[2]: [PHP] Command-line PHP script CPU usage goes sky-high, stays there--why?

2007-12-10 Thread Tom Rogers
Hi,

Tuesday, December 11, 2007, 10:01:38 AM, you wrote:
RF On 10-Dec-07, at 4:42 PM, Tom Rogers wrote:


 Put a usleep(1000) in the listen while() loop and give the cpu a
 break.

RF Good advice, but I've already been doing that. The thing is, when the
RF script first starts up, the CPU rarely exceeds 30%, even when many  
RF clients (200+) are simultaneously connected and sending data. When a  
RF few clients are connected, CPU is typically below 10%. Again, it's  
RF only after 24-48 hours that, all of a sudden, CPU usage increases by  
RF 40-50%. And it stays high until I stop the script and restart it.

RF One question I have though is, is there actually any benefit to using
RF mysql_pconnect(), since the script simply loops? My understanding is  
RF that pconnect only benefits if a script would otherwise be using  
RF mysql_connect repeatedly--and this script doesn't, since it calls  
RF mysql_[p]connect() just once, in the start tof execution.

RF ...Rene

I have found pconnect to be a problem (several years ago) and have
never tried it since, it may well be ok now. The most likely cause is
memory consumption on long running php scripts, what does top say?

I have a script which runs from cron and was hammering the system when
it ran and i have had to put the usleep() in the while($result = ..)
loop as there are a few thousand rows. Probably bad design but it
works and I'm loath to touch it :)

One way to solve the memory issue is to have the script started by
inetd, slower but more memory friendly.

Also have a look at memcached to reduce the load a bit.

-- 
regards,
Tom

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: Re[2]: [PHP] Command-line PHP script CPU usage goes sky-high, stays there--why?

2007-12-10 Thread M5
Curiously, would you agree with this guy's comments concerning low- 
level PHP socket functions vs stream_socket_server() ?


If you want a high speed socket server, use the low-level sockets  
instead (socket_create/bind/listen). The stream_socket_server version  
appears to have internal fixed 8k buffers that will overflow if you  
don't keep up by reading.


This is a serious problem if you an application that reads the socket  
for messages and then, say, saves the result in a database. The delay  
while it is busy processing means you can't read the data in time  
unless you get involved in muti-threading.


With the the low-level functions, the OS quietly buffers TCP/IP  
packets so there is no problem (tested on Windows XP  
Professional). (http://www.php.net/manual/en/function.stream-socket- 
server.php#67837)



On 10-Dec-07, at 9:46 PM, Tom Rogers wrote:


Hi,

Tuesday, December 11, 2007, 10:01:38 AM, you wrote:
RF On 10-Dec-07, at 4:42 PM, Tom Rogers wrote:



Put a usleep(1000) in the listen while() loop and give the cpu a
break.


RF Good advice, but I've already been doing that. The thing is,  
when the

RF script first starts up, the CPU rarely exceeds 30%, even when many
RF clients (200+) are simultaneously connected and sending data.  
When a

RF few clients are connected, CPU is typically below 10%. Again, it's
RF only after 24-48 hours that, all of a sudden, CPU usage  
increases by

RF 40-50%. And it stays high until I stop the script and restart it.

RF One question I have though is, is there actually any benefit to  
using
RF mysql_pconnect(), since the script simply loops? My  
understanding is

RF that pconnect only benefits if a script would otherwise be using
RF mysql_connect repeatedly--and this script doesn't, since it calls
RF mysql_[p]connect() just once, in the start tof execution.

RF ...Rene

I have found pconnect to be a problem (several years ago) and have
never tried it since, it may well be ok now. The most likely cause is
memory consumption on long running php scripts, what does top say?

I have a script which runs from cron and was hammering the system when
it ran and i have had to put the usleep() in the while($result = ..)
loop as there are a few thousand rows. Probably bad design but it
works and I'm loath to touch it :)

One way to solve the memory issue is to have the script started by
inetd, slower but more memory friendly.

Also have a look at memcached to reduce the load a bit.

--
regards,
Tom

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php