Hohe Serverlast

- perl
Hi,
ich hab ein umfangreiches Skript, dass über Jahre gewachsen ist. Nun erzeugt das, laut Hoster, eine zu grosse Server Last. Beim testen habe ich auch festgestellt, dass das im Vergleich zu anderen Skripten, wesentlich schneller die CPU,auf meiner Windos Kiste, auf 100% bringt.
Soweit, so schlecht.
Nun suche eine Möglichkeit rauszufinden woran es liegt.
Ich versuche grad mit Devel::DProf ein bisschen Licht in's Dunkel zu bringen. Nur kann ich die Ausgabe nicht deuten.
Was für Möglichkeiten gibt es noch um ein extrem Modulares Skript auf Geschwindigkeitsbremesen hin zu untersuchen?
Struppi.
Hell-O!
Was für Möglichkeiten gibt es noch um ein extrem Modulares Skript auf Geschwindigkeitsbremesen hin zu untersuchen?
Aus meinen Bookmarks: When perl is not quite fast enough. Vielleicht findest du da ein paar Anregungen, jedenfalls gibt der Autor eine Menge Tipps zu Perl-Modulen (AutoSplit, AutoLoader, Devel::DProf, Memoize usw.).
Siechfred
Was für Möglichkeiten gibt es noch um ein extrem Modulares Skript auf Geschwindigkeitsbremesen hin zu untersuchen?
Aus meinen Bookmarks: When perl is not quite fast enough. Vielleicht findest du da ein paar Anregungen, jedenfalls gibt der Autor eine Menge Tipps zu Perl-Modulen (AutoSplit, AutoLoader, Devel::DProf, Memoize usw.).
Danke, arbeite ich grade durch.
Da schiebe ich aber grad noch 'ne Frage hinterher.
DProf und dprofpp werfen mir das als erste Zeile aus:
%Time ExclSec CumulS #Calls sec/call Csec/c Name
17.8 0.079 0.386 30 0.0026 0.0129 main::BEGIN
Warum wird main::BEGIN 30 Mal aufegrufen?
Struppi.
Hell-O!
%Time ExclSec CumulS #Calls sec/call Csec/c Name
17.8 0.079 0.386 30 0.0026 0.0129 main::BEGIN
Warum wird main::BEGIN 30 Mal aufegrufen?
Vermutlich weil folgendes:
use ExampleModule;
das Gleiche ist wie:
BEGIN {
require "ExampleModule.pm";
import ExampleModule;
}
Wäre jedenfalls eine mögliche Erklärung. Wieviele use-Anweisungen hast du denn?
Siechfred
%Time ExclSec CumulS #Calls sec/call Csec/c Name
17.8 0.079 0.386 30 0.0026 0.0129 main::BEGIN
Warum wird main::BEGIN 30 Mal aufegrufen?Vermutlich weil folgendes:
use ExampleModule;
das Gleiche ist wie:
BEGIN {
require "ExampleModule.pm";
import ExampleModule;
}
>
> Wäre jedenfalls eine mögliche Erklärung. Wieviele use-Anweisungen hast du denn?
Eigentlich Logisch.
30 kann hinkommen.
Struppi.
--
[Javascript ist toll](http://javascript.jstruebig.de/) (Perl auch!)
Hallo struppi,
eine freier Perl-Profiler ist mir aus der Hüfte heraus nicht bekannt
aber mit dem Perl-debugger ptkdb könntest Du zumindest mal reinschauen
ob bei Deiner Programmierlogik alles sauber läuft.
ciao Andreas
ich hab ein umfangreiches Skript, dass über Jahre gewachsen ist. Nun erzeugt das, laut Hoster, eine zu grosse Server Last. Beim testen habe ich auch festgestellt, dass das im Vergleich zu anderen Skripten, wesentlich schneller die CPU,auf meiner Windos Kiste, auf 100% bringt.
So wirklich weiter bin ich noch nicht.
Ich habe ein Verhalten, dass ich nicht wirklich deuten kann, bzw. bin ich nicht sicher ob das am Skript oder am Browser liegt.
Ich habe mal zwei Anwendungen von mir verglichen, beide sind änhlich vom Konzept und vom Aufwand. Während das Problemskript beim Aufruf über Firefox oft bis zu 100% CPU Last geht, ist das Andere eher so bei 60% (das sind natürlich Beobachtungen, ohne dass ich dass genau verfizieren kann)
Allerdings besteht insofern ein grosser Unterschied, dass das Problemskript mehr CSS, JS und Grafikdateien lädt. Könnte das für die erhöhte Last verantwortlich sein?
Ich habe nämlich festgestellt, dass der Aufruf des selfhtml Forums, ebenfalls mit 100% CPU Last einhergeht, folglich kann dies auch vom Browser kommen.
Das seltsame ist, dass das Problemskript kürzere Laufzeiten (gemessen mit Time::HiRes gestartet im BEGIN Block) hat. Daher ist eine andere Vermutung von mir (ich stochere im dunkeln), dass ich irgendwelche blöden Dinge tue, die evtl. den Speicher übermäßig belasten. Nur wie könnte ich das feststellen?
Struppi.
Hell-O!
Ich habe ein Verhalten, dass ich nicht wirklich deuten kann, bzw. bin ich nicht sicher ob das am Skript oder am Browser liegt.
Hast du Online oder unter einer lokalen Testumgebung getestet? Es wäre interessant zu wissen, welche CPU da in die Knie geht - Server oder Client oder beide.
Allerdings besteht insofern ein grosser Unterschied, dass das Problemskript mehr CSS, JS und Grafikdateien lädt. Könnte das für die erhöhte Last verantwortlich sein?
Falls ja, eigentlich nur auf Clientseite, dein Perlscript liefert doch sicher nur den HTML-Code, der den Browser veranlässt, die Ressourcen zu laden, oder?
Das seltsame ist, dass das Problemskript kürzere Laufzeiten (gemessen mit Time::HiRes gestartet im BEGIN Block) hat. Daher ist eine andere Vermutung von mir (ich stochere im dunkeln), dass ich irgendwelche blöden Dinge tue, die evtl. den Speicher übermäßig belasten. Nur wie könnte ich das feststellen?
CPAN bietet etliche Developer-Module an, z.B. Devel::Size::Report klingt gut. Auf das dem zugrundeliegende Modul Devel::Size weist übrigens auch perldebguts: Debugging Perl memory usage hin.
Siechfred
Ich habe ein Verhalten, dass ich nicht wirklich deuten kann, bzw. bin ich nicht sicher ob das am Skript oder am Browser liegt.
Hast du Online oder unter einer lokalen Testumgebung getestet? Es wäre interessant zu wissen, welche CPU da in die Knie geht - Server oder Client oder beide.
Lokal, der Server ist nur ein Webpacket ohne irgendwelche Admintools.
Allerdings besteht insofern ein grosser Unterschied, dass das Problemskript mehr CSS, JS und Grafikdateien lädt. Könnte das für die erhöhte Last verantwortlich sein?
Falls ja, eigentlich nur auf Clientseite, dein Perlscript liefert doch sicher nur den HTML-Code, der den Browser veranlässt, die Ressourcen zu laden, oder?
Ich hab ja lokal alles auf einem Rechner laufen (hätte ich verlleicht erwähnen sollen), also Apache, Perl und Browser.
Das seltsame ist, dass das Problemskript kürzere Laufzeiten (gemessen mit Time::HiRes gestartet im BEGIN Block) hat. Daher ist eine andere Vermutung von mir (ich stochere im dunkeln), dass ich irgendwelche blöden Dinge tue, die evtl. den Speicher übermäßig belasten. Nur wie könnte ich das feststellen?
CPAN bietet etliche Developer-Module an, z.B. Devel::Size::Report klingt gut. Auf das dem zugrundeliegende Modul Devel::Size weist übrigens auch perldebguts: Debugging Perl memory usage hin.
Jaja, wenn man zu faul ist zum suchen ;-)
Allerdings werd ich heute nicht mehr zu ausprobieren kommen. Auf jeden Fall schon mal danke soweit. Momentan läuft das Skript wieder beim Hoster, mal schauen wie lange. Trotzdem will ich natürlich Wissen woran es lag oder liegen könnte.
Struppi.