Seite 1 von 1

genutzten Arbeitsspeicher analysieren

Verfasst: 25.10.2006 01:20
von mgutt
Hi,

ich versuche mich gerade ein wenig an Serveroptimierungen und da hatte ich die Idee am Ende der page_tail.php das einzubauen vor "exit;":

Code: Alles auswählen

function bytesUmrechnen($bytes = 0, $mode='')
{
	global $board_config;
	$size = '';
	if( $bytes >= pow(2,10) )
	{
		if( $bytes >= pow(2,20) )
		{
			$size = number_format(($bytes / pow( 2,20)), 2);
			if ( $size > 8 )
			{
				$mem_body = "Der Arbeitsspeicher von 8 MB wurde überschritten!!!\r\n";
				$mem_body .= "Ausgelöst wurde dies am $mode mit $size MB.\r\n";
				$mem_body .= "Verfügbare globale Variablen zu diesem Zeitpunkt waren:\r\n";
				foreach ($GLOBALS as $key => $value)
				{
					if ( is_array($value) )
					{
						$mem_body .= $key . " enthält ein Array mit den folgenden Werten:\r\n";
						foreach ($value as $sub_key => $sub_value)
						{
							$mem_body .= $sub_key . "['" . $sub_value . "']\r\n";
						}
					}
					$mem_body .= $key . "['" . $value . "']\r\n";
				}
				mail($board_config['board_email'],'Memory Overrun', $mem_body);
			}
			$size .= ' MB';
		}
		else
		{
			$size = number_format( ($bytes / pow( 2,10)), 2);
			$size .= ' KB';
		}
	}
	else
	{
		$size = $bytes . ' Bytes';
	}
	return $size;
}

define('MEMORY_END', memory_get_usage());
bytesUmrechnen(MEMORY_START, 'Anfang von common.php');
bytesUmrechnen(MEMORY_SQL, 'SQL-Query Datensatz vor unset($dbg) in includes/class_db.php');
bytesUmrechnen(MEMORY_COMMON, 'Ende von common.php');
bytesUmrechnen(MEMORY_END, 'Ende von page_tail.php');
Also, wenn ein Script mehr als 8 MB Arbeitsspeicher frisst, dann gibts ne Mail an den Admin.

Mal sehen was ich damit noch herausfinde kann.

Gruß

P.S.: Das ist aber mit Vorsicht zu genießen. Wenn ihr beispielsweise mit einem Aufruf der Seite schon über die 8MB kommt, dann erhaltet ihr für jeden Seitenaufruf eine Statusmail. Überlegt Euch also gut welchen Wert ihr einsetzt.

EDIT:
Weiß jemand wann man die Funktion memory_get_peak_usage() zur Verfügung hat?

Verfasst: 26.10.2006 12:49
von mgutt
So ich habe jetzt meine erste Meldung erhalten. Ausgelöst durch Hochladen eines Bildes und wahrscheinlich das Resizen des selbigen:
Der Arbeitsspeicher von 8 MB wurde überschritten!!!
Ausgelöst wurde dies am Ende von page_tail.php mit 14.83 MB.
Verfügbare globale Variablen zu diesem Zeitpunkt waren:
HTTP_POST_VARS enthält ein Array mit den folgenden Werten:
...
...
...
Schön fände ich jetzt zu wissen wieviel KB/MB übergroße Arrays hatten. Damit ich direkt sehe wer die Übeltäter sind.

Weiterhin stelle ich mir jetzt die Frage was ich machen muss um an dieser Stelle zu verbessern. Ich denke mal Arrays nach Ihrer Nutzung per unset() killen oder?

Verfasst: 29.10.2006 15:49
von mgutt
In jedem Fall ist mir jetzt eines klar. Der Photoalbum Mod von Smartor belastet den Server viel zu stark. Die einzigen Meldungen, die ich erhalten kommen von dort. Da sind Arrays dabei, die explodieren förmlich.

Da muss also was geändert werden.

Gruß