Script Performance Vergleich - Speicherverbrauch & Co
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfang
belastung
code
differenz
ende
ermitteln
fehlermeldung
funktion
http
laufzeit
manual
memory
performance
ressource
server
speichern
test
testen
url
vergleich
-
Hallo
ich würde gern für verschiedene Versionen eines PHP-Script den Speicherverbrauch ermitteln,
um einen Vergleich zu haben, welce Version wirklich "besser" ist
Script-Laufzeit habe ich hinbekommen, aber Speicher (RAM) noch nicht ...
bin ich auf memory_get_usage() gestoßen,
aus der PHP.net Doku memory-get-usage
Set this to TRUE to get the real size of memory allocated from system. If not set or FALSE only the memory used by emalloc() is reported.
aber wie "richtig" berechnen ?
wenn ich true mit Übergebe,
dann ist der Wert am Anfang und am Ende des Scripts gleich und Differenz = 0
<?php $mem1 = memory_get_usage(true) ; // --- hier das Script zum testen $mem2 = memory_get_usage(true) ; echo "<br />Memory1: ".$mem1."\n"; echo "<br />Memory2: ".$mem2."\n"; echo "<br />Differenz: ". ($mem2 - $mem1) ."\n"; ?>
... warum ist memory_get_usage(true) ; am Anfang und am Ende des Scripts gleich ?
am Ende sollte doch "mehr" Speicher genutzt worden sein ? ... also ohne true
wenn ich die Funktion ohne ture aufrufe,
bekomme ich unterschiedliche Werte und Differenz hat einen Wert
<?php $mem1 = memory_get_usage(); // --- hier das Script zum testen $mem2 = memory_get_usage(); $mem3 = memory_get_usage(true); echo "<br />Memory1: ". $mem1 ."\n"; echo "<br />Memory2: ". $mem2 ."\n"; echo "<br />Differenz: ". ($mem2 - $mem1) ."\n"; echo "<br />Gesamt: ". $mem3 ."\n"; ?>
aber
... ist dann die Differenz ($mem2 - $mem1) der verbrauchte Speicher ?
... oder doch der Wert (Gesamt) aus memory_get_usage(true); ?
... oder der letzte Wert (Memory2) von memory_get_usage(); ?
... oder wie kann ich ermitteln, wieviel Speicher ein Script "belegt" hat ?
etwa auch ganz anders + plus weitere Performance Tests ?
Also (zusammengefasst) ist meine Frage::
-> Wie vergleiche ich zwei Scripte, welches weniger Ressourcen verbraucht
bzw. -> Wie ermittle ich relevante Performance Daten zu einem Script (für Vergleiche)
+ Script-Laufzeit = (mit microtime/true) am Anfang und Ende)
+ Memory Nutzung = (mit memory_get_usage() .. aber wie genau?)
+ ? Andere Daten = ( weitere vergleichbare Werte ... welche? wie?)
Beitrag zuletzt geändert: 9.9.2012 12:18:26 von webguide -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
memory_get_usage liefert immer den aktuellen Speicherverbrauch. Nachdem der Speicher wenn er nicht mehr gebraucht wird freigegeben wird nützt dir das hier kaum... stattdessen solltest du memory_get_peak_usage verwenden, was den maximal verbrauchten Speicher zurückliefert.
Einsetzen kannst du das so:// hier ist dein Script $memory = memory_get_peak_usage(); echo("Speicherverbrauch vom Script: $memory Bytes\n");
-
Ich würde dir empfehlen das ganze ein wenig anders anzugehen:
Es gibt ein Profiler für PHP, der nennt sich xDebug. In der Xampp Full Installation ist der eigentlich dabei. Damit kannst du lokal von dem Skript ein Profil erstellen, das bedeutet welche Funktionen wann aufgerufen werden, und wieviel Speicher das Skript wann gebraucht hat (auch wie lange usw). Damit kannst du schnell Stellen finden, die du noch anpacken kannst.
Google gibt dir da sicherlich viele Infos zu, ich habs schon lange nichtmehr benutzt (weil ich hauptsächlich im Moment NodeJS Server schreibe für ganz andere Anwendungen), aber das sollte dir die besten Ergebnisse und Details bieten.
Liebe Grüße -
Hallo
@hackyourlife
leider bekomme ich auf dem Lima-City Webspace die Fehlermeldung:
Warning: memory_get_peak_usage() has been disabled for security reasons
wobei ich mich Frage, warum ... wo sollte dabei denn ein Sicherheits-Problem sein,
wenn man die Speicher-Belastung im Script auslesen kann ?
... wäre doch eher "gut" um Scripte zu optimieren und dadurch Server weniger belasen ?!
@ggamee
xDebug ist bestimmt gut
aber XAMPP habe ich nicht installiert (und will es eigentlich auch nicht installieren)
auch will ich Performance-Test / Vergleich direkt am Server / Webspace machen,
da es ja auch von Server zu Server (PHP-Version, etc) Unterschiede geben kann
gibt es denn keine andere Möglichkeit die Speicher-Belastung zu ermitteln ?
(ohne: memory_get_peak_usage() weil das auf manchen WebSpaces deaktiviert ist)
... auch um das gleiche Script auf verschiedenen WebSpaces zu testen
PS:
Wenn ich in Google suche, finde ich zu 99% nur was zu Script-Laufzeit,
und das habe ich ja hinbekommen, aber interessant wäre ja auch mehr
wie Speicher (RAM), CPU (Nutzung in % bzw. CPU-Time) etc...
Welche anderen Werte könnte ich noch ermitteln (außer Laufzeit und RAM-Speicher)
um die "Leistung" (Performance / Ressourcen-Verbrauch) eines Scrips zu messen ?
(was direkt im Script am WebSpace funktioniert, ohne "spezielle" Software wie xDebug)
EDIT: ..... vielleicht würde mir getrusage() ja paar "Werte" liefern
aber auch da ... Fehlermeldung auf Lima-City
getrusage() has been disabled for security reasons
:(
Beitrag zuletzt geändert: 9.9.2012 16:41:19 von webguide -
im grunde willst du quasi den für dein script am besten geeigneten webserver finden?
ich muss da allerdings dem vorposter rechtgeben, am besten geeignet ist wohl eine fertige debuggerlösung die du am besten auch lokal testest, da der webserver einfach auch nicht direkt zum entwickeln da ist (mmn)
was lange laufzeiten braucht un aufwendig ist, ist lokal genauso aufwendig wie auf einem server!
es geht ja nicht darum genau zu wissen wie lange braucht dies, wie viel speicher und cpu frist das andere sondern: was ist die bestmögliche, schnellste möglichkeit die auch noch am wenigsten speicher verbraucht.
wo kann man das script optimieren und verbessern! dies ist nicht serverabhängig, ein optimiertes script läuft wohl auf den meisten halbwegs aktuellen servern optimal ob es nun auf dem einen oder anderen langsamer oder schneller ist liegt einfach an der hardware bzw der die verfügbaren recourcen auf dem server.
der einzige grund dies auf einem server laufen zu lassen wäre (mmn) eine site, in der man codeschnippsel hochläd um diese dann auf die von dir gewollten eigenschaften bzw recourcen beanspruchung testen zu lassen.
was aber nicht sehr produktiv wäre, da das script im ganzen viel einfacher und besser zu analysieren ist.
eben zB mit xDebug
Beitrag zuletzt geändert: 9.9.2012 22:56:13 von dishonored -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage