Use your widget sidebars in the admin Design tab to change this little blurb here. Add the text widget to the Blurb Sidebar!

PHP Performance Hack – Throttling During Load Issues

Posted: June 29th, 2010 | Author: owocki | Filed under: Uncategorized | No Comments »

I”ve had some performance issues lately with the server buckling under the pressure of a high peak user load . Other times, I”ve had issues with process intensive tasks that kept recursively spawning more instances of themelves.

Creating performance intensive scripts require a good amount of design & architecture forethought, and sometimes you can”t always foresee the ways things could go wrong.

I ended up adding a method to my PHP codebase, is_server_overloaded() , to partially alleviate the problem.

Source Below: (note: only works on linux boxes)

/****************************************/// - Input vars: // - Preconditions: // - Postconditions: // - Returns: server load as a percentage// - Comments: // - // - function getServerLoad() {	  if(file_exists("/proc/loadavg")) 	  	{	         $Load = file_get_contents("/proc/loadavg");	         $Load = explode('' '', $Load);	         return $Load[0];	  	}	  elseif(function_exists("shell_exec")) 	  	{	         $Load = explode('' '', `uptime`);	         return $Load[count($Load)-1];	  	}	  else {	         return "";	  }}
/****************************************/// - Input vars: // - Preconditions: // - Postconditions: // - Returns: bool - true if server is overloaded// - Comments: // - // - function is_server_overloaded(){	return getServerLoad() > 10;	}

If your code executes a lot of performance intensive tasks, and you”re starting to hit a lot of scale, you may want to consider using this code to establish an upper limit to the end users experienced load time.

I use this is_server_overloaded() method to establish an upper limit to the level I will push my server, and have a few performance intensive areas of my PHP/MySQL code that are designed to perform differently when a load issue appears (ie. when is_server_overloaded() == true).