How do I know if my PHP application is using too much memory?
apache, memory-management, optimization, php, ram
Solution
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"] . "\n");
}
(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.
Problem
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?