Go Premium for a chance to win a PS4. Enter to Win


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
  • 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
Industry Leaders: 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

Important Lessons on Recovering from Petya

In their most recent webinar, Skyport Systems explores ways to isolate and protect critical databases to keep the core of your company safe from harm.

Question has a verified solution.

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

Build an array called $myWeek which will hold the array elements Today, Yesterday and then builds up the rest of the week by the name of the day going back 1 week.   (CODE) (CODE) Then you just need to pass your date to the function. If i…
Originally, this post was published on Monitis Blog, you can check it here . In business circles, we sometimes hear that today is the “age of the customer.” And so it is. Thanks to the enormous advances over the past few years in consumer techno…
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
The viewer will learn how to dynamically set the form action using jQuery.
Suggested Courses

916 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