genutzten Arbeitsspeicher analysieren

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

genutzten Arbeitsspeicher analysieren

Beitrag 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?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag 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?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag 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ß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Antworten

Zurück zu „Coding & Technik“