English 中文(简体)
How do I know if my PHP application is using too much memory?
原标题:

I m working on a PHP web application that let s users network with each other, book events, and message eachother. There s only about 100 users.

I set up the application on a VPS with Ubuntu 9.10, apache2, mysql 5 and php 5. I had 360 Mb of RAM, but upgraded to 720 MB.

Lately, my web application has been experiencing outages due to excessive memory usage. From what I can tell in error logs, it seems the server automatically kills apache processes that consume too much memory. As a result, I upgraded memory from 360 MB to 720 MB as a stop-gap measure.

So my question is, how do I go about resolving these outage issues? How do I know if my website s need for more memory is due to poor code or if it s part of the website s natural growth? What s the most efficient way to determine which PHP scripts consume the most memory?

最佳回答

There s no simple answer to this, although I would suspect that it may a problem in your code.

What is the memory_limit setting in your php.ini file? Typically I d recommend at least 4Mb, and usually 16. How many concurrent hits are you fielding? Is the site doing a lot of heavy reporting of stats? Or rendering of images via PHP? Do you use file_get_contents() anywhere?

You really need to set up some custom logging to report for each URL, the size of the log file at exit. e.g. you could auto-prepend:

<?php
register_shutdown_function( log_mem );

function log_mem()
{
   fputs(STDERR,  [  . date( c ) .  ]   . memory_get_usage() .     
     . $_SERVER["REQUEST_URI"] . "
");
}

(Note - no closing tag) This will write out the memory used by each PHP page to the error_log so you can isolate the problem more easily.

HTH

C.

问题回答

Another thing you can do if your process size is small is turn down your httpd settings to have min spare servers of 1, and max spare servers of 3. If you only have 100 users, this should be fine, as you won t care about the overhead of starting processes for only a few users.

Here is a tool that supports profiling PHP: http://xdebug.org/docs/profiler

Depending on your version of httpd & php, httpd could be holding on to segments of memory that it doesn t need, and growing the running process size unnecessarily. I have a box that does this, and I ve solved the issue by doing an httpd restart on a nightly basis like so:

30 00 * * *     /httpd/sbin/apachectl restart
31 00 * * *     /httpd/sbin/apachectl start
35 00 * * *     /httpd/sbin/apachectl start
40 00 * * *     /httpd/sbin/apachectl start

As you can see, I follow up my restart with 3 trailing starts, just in case apache fails to come back to life after the restart. 3 is probably overkill, but on the other hand, it doesn t hurt anything, so why not.





相关问题
Using SimplePie with CodeIgniter and XAMPP

I am using CodeIgniter 1.7.2 with XAMPP 1.7.2 on a Windows computer. I am trying to make use of SimplePie. I followed all the instructions I could find: a copy of simplepie.inc is in my applications/...

Multiple Sites with common files

I have developed over 50 sites that all use the exact same files other than CSS and IMAGES, I currently duplicate the files each time I create a new site and upload different css and images. What ...

http server validation

I finish a litle http server, writing from scratch. I would like to be sure that my imlementation is conforme to the HTTP specifications. W3C give us tools for HTML/XML conformance, but i see nothing ...

热门标签