Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17


PHP Script Performance Monitoring

Posted on 2009-05-04
Medium Priority
Last Modified: 2013-12-12
I am looking for a way to compile a performance log of *all* php scripts on my site.  It is easy to compile informaiton like execution time with some scripting, but I'd like to gather additional info like average CPU for a particular script.

I am looking on my server at top and see particular scripts being executed and this shows CPU/Memory usage.

If I could have something log what I see in top just prior to the process ending (or so that it tracks the max value for memory and average for CPU?) I thinK I would be happy.

I am trying to find under-performing scripts in my site to enhance perfomance and have no really good tools for helping me find unexpected problem spots.

I don't own the server (sadly) so anything requiring root, etc. may not work for me.  I was hoping there was something in the PHP engine itself that I could leverage that tracks and provides this data.  
Question by:trippy1976
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 2
  • 2
  • +1
LVL 111

Accepted Solution

Ray Paseur earned 2000 total points
ID: 24305970
trippy1976: This is not all that recent, but it may be useful as a starting point:

And God Bless Google...

Whenever there are performance issues, the problem is almost always in the I/O subsystem and in web hosting that usually means the data base.  A good place to start is to look at all the DB queries.  Some good questions to consider:

Are you doing a SELECT with WHERE or ORDER BY clauses that refer to unindexed fields?
Are you doing a SELECT * when you do not really need all the fields?
Do you have a BLOB (or similar) stored in the DB when it would really work better in the file system?
Do you have a LIMIT clause on SELECT statements?
Can you combine queries and make fewer calls to mysql_query()?
You can (and should) use EXPLAIN on all your queries to see what MySQL is doing.

Anyway, that's just a few thoughts.  Best regards, ~Ray

Author Comment

ID: 24314860
I googled all day.  The information you posted is good, but the trouble is with my host I don't have root access and most of these things aren't available.

I'm going to look into doing something "rough" like top logging and try to get a view of the trouble spots with that, but we will see...

Good info and good tips on the sql queries.  The only one jumps out at me is the limit by clause comment.  I have a table with 3600+ records.  The user view is a paginated 30-per-page gallery view of that data.  I currently use a query to "flip through" the pages with a limit statement.

Is there a better way?  At least query-wise?

If I can impose on you for a few thoughts on this I would appreciate it.  I think your info is what I expected for the Q and I appreciate hte time.  Points will be credited soon.
LVL 111

Expert Comment

by:Ray Paseur
ID: 24315822
Regarding this: "... use a query to "flip through" the pages..." - Yes, I think that is the right approach.   Quite likely that the MySQL server will cache this stuff after its initial selection and subsequent selects will be faster (even if the actual rows were not in the initial recordset.

I'll be glad to let you pick my brain.  

Best, ~Ray
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!


Expert Comment

ID: 24323820
you can add some monitoring code into you page, logging the $time to database or file
$time / 1 * 100% = One CPU %
$time_start = microtime(true);
// main program start
usleep(10000);// Sleep for a while
// main program end
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Did nothing in $time seconds\n";

Open in new window

LVL 111

Expert Comment

by:Ray Paseur
ID: 24564047
I'm sure I answered at least part of the Q.  Never did hear back about the other parts, obviously.
LVL 111

Expert Comment

by:Ray Paseur
ID: 24728862
@angelIII: I think this should not be a deletion.

To quote the poster at #24314860, "I think your info is what I expected for the Q and I appreciate hte [sic] time.  Points will be credited soon."

Thanks for your consideration,
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 24728888

  yes, that was considered.
  however, my decision was rather based on:
  >The information you posted is good, but the trouble is with my host I don't have root access and most of these things aren't available.

  and I think the only real suggestion would have been to change each script individually to store the execution time in a database ...
  your suggestions were either too general, or steps for the the actual troubleshooting of a concrete problem, rather than to identify the scripts/pages that actually have most problems.

LVL 111

Expert Comment

by:Ray Paseur
ID: 24728894
OK, not a big issue for me.  Our OP said both of those things in the same post, so I can see it either way.  But I can't see what your logic is until after I post an objection.  Sorry if it was an unnecessary exercise. ~Ray
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 24728933
>Sorry if it was an unnecessary exercise. ~Ray
not unnecessary. I have the trouble in the CV tool that I cannot give additional comments, unless I open the question and post a additional comment.
which is usually not needed.
I understand that these questions are frustrating for us experts.
LVL 111

Expert Comment

by:Ray Paseur
ID: 24728939
10-4.  Best regards, ~Ray

Author Closing Comment

ID: 31577655
Thank you for the input, it is a daunting topic and the response did little to whittle down where I should spend my time.  As a part-time developer, I have yet to find the time to delve as deeply into the topic as I need in order to even decide if this is a solution.  I apologize for the delay, but some people in the EE community are not full timers and need time to digest complicated subjects.

I have no idea if this is a solution, but rather than be labeled as an "irresponsible EE member" I'll just post the points.  Sheesh.

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Things That Drive Us Nuts Have you noticed the use of the reCaptcha feature at EE and other web sites?  It wants you to read and retype something that looks like this. Insanity!  It's not EE's fault - that's just the way reCaptcha works.  But it i…
Introduction This article is intended for those who are new to PHP error handling (  It addresses one of the most common problems that plague beginning PHP develop…
The viewer will learn how to count occurrences of each item in an array.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

715 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question