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



Hi,

Tuesday, December 11, 2007, 6:42:18 AM, you wrote:
RF> Hello,

RF> I have a command-line PHP script--called Listener--that is designed
RF> to run indefinitely with a predictable CPU usage and memory
RF> footprint. In a nutshell, it's a multi-client socket server that
RF> waits for incoming connections, processes incoming data, stores
RF> results in a MySQL database, and basically gets on with its life. And
RF> it works. No errors or serious problems to speak of. And I've been
RF> running it for a couple years on an Xserve dual-G5 2GHz w/ OS X
RF> Server 10.4.11). Six months ago, the program would run for days, even
RF> a couple weeks, without a hitch. The only reason I would stop the
RF> script is for some other purpose, like a software update.

RF> However, the number of socket clients connecting in the past 3-4
RF> months has steadily increased, and this seems to have exposed (if not
RF> created) a strange performance "issue" with PHP 5.2.4, MySQL 5.0.45
RF> and/or Mac OS X Server 10.4.11. (I say "and/or" because I am unsure
RF> where the problem's cause really lies.) Basically, after the script
RF> has been running for a day or so (processing essentially the amount
RF> data that used to take two weeks), the CPU usage of the machine goes
RF> from 30% (normal) to 80-90%. This appears to be irrespective of the
RF> number of clients connected to the server at the time, but rather the
RF> amount of time the script has been running (and therefore cumulative
RF> cycles it's operated, data processed, MySQL queries executed, etc.).
RF> And the CPU usage stays high, even when the actual load (number of
RF> clients) decreases. At this time, if I run top, I get the following
RF> info:

RF> 22512 mysqld 91.6% 8:22:12 31 106 125 305M+ 3.20M
RF> 260M 475M
RF> 17104 php 7.2% 81:14.01 1 15 145 5.08M 7.80M
RF> 10.9M- 87.5M
RF> 22537 Terminal 6.6% 2:59:59 22 176 240 12.3M 21.2M
RF> 18.3M- 236M
RF> [...]

RF> At first I thought, okay, it's MySQL's fault. Maybe a lot of slow-
RF> running queries. But the slow query log is pretty clean. So maybe
RF> it's a combination of Mac OS X and MySQL and PHP? I Googled for a
RF> similar problem, and finally ran across this article:

RF> http://www.shawnhogan.com/2005/10/mysql-problems-on-mac-os-x-server.html

RF> ...where the author describes a very similar CPU usage pattern. I
RF> tried his suggested fixes and they seemed to have helped a little (or
RF> maybe it's my wishful thinking--hard to tell), since the high CPU
RF> load issue doesn't appear to happen as soon... But it still happens.

RF> Anyway, I'm really stumped as to what to do next, where to look, etc.
RF> If I stop the script, and restart it (but not the MySQL itself), CPU
RF> usage goes back to normal--for about a day or two.

RF> The only thing I thought might be connected is how many short-lived
RF> PHP child processes Listener creates--around 20-30,000 per day.
RF> Sounds higher, but on average it's just one every 2-3 seconds.
RF> Anyway, although the number of child processes isn't concurrent,
RF> would there be a problem with the number of historical child
RF> processes in view of ulimits or kern.maxfilesperproc?

RF> Anyway suggestions, tips, or links are much appreciated. Thanks.

RF> ...Rene


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

--
regards,
Tom
.



Relevant Pages

  • Re: control CPU usage
    ... The script monitors global input using PyHook, ... My first question is whether the pyHook event is calling the SendKeys ... responsiveness may not be caused by high CPU usage, as the OS, be it ... But theoretically, as soon as you return to the event loop, your main thread is going to block, so it'll schedule the other thread. ...
    (comp.lang.python)
  • Re: a possible bug in expect/tcl: a hypothesis
    ... | monitors the CPU usage of all processes. ... | what is happening to my script. ... See ulimit -t. ... Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org ...
    (comp.lang.tcl)
  • Re: CPU limits
    ... I'd much prefer to be able to set my script's CPU usage at - say - 75% ... you can use BSD::Resource on linux. ... will use your script. ... sub CPU_used { ...
    (comp.lang.perl.misc)
  • BUG? IE6 Windows XP SP2: iexplore.exe ram is growing and growing...
    ... I have Windows XP SP2 installed and I am wondering using a short javascript ... the ram used by iexplore.exe is growing and growing. ... will have about 100% cpu usage. ... Another script error occured on a different script: ...
    (microsoft.public.windows.inetexplorer.ie6.browser)
  • RE: How to get CPU Usage using C# .Net
    ... I have an C# application in which I am using WMI to obtain CPU ... Process and subtract it from 100 to obtain CPU Usage. ... This script is giving me valid Values. ... ManagementObject processor = new ManagementObject( ...
    (microsoft.public.win32.programmer.wmi)