DevelopmentProfiling: Unterschied zwischen den Versionen
Zeile 37: | Zeile 37: | ||
# Fhem beenden. Entweder in fhem mittels "shutdown" in der Commandzeile, oder mittels Console: <code>sudo /etc/init.d/fhem stop</code> | # Fhem beenden. Entweder in fhem mittels "shutdown" in der Commandzeile, oder mittels Console: <code>sudo /etc/init.d/fhem stop</code> | ||
# In den Ordner fhem wechseln <code>cd /opt/fhem</code> | # In den Ordner fhem wechseln <code>cd /opt/fhem</code> | ||
# fhem wie folgt starten: <code>perl -d:NYTProf /opt/fhem/fhem.pl /opt/fhem/fhem.conf</code> | # fhem wie folgt starten: <code>sudo perl -d:NYTProf /opt/fhem/fhem.pl /opt/fhem/fhem.conf</code> | ||
Nun kann fhem solange laufen, wie wir es benötigen, oder der Prozess, welchen wir beobachten wollen, eingetreten ist. | Nun kann fhem solange laufen, wie wir es benötigen, oder der Prozess, welchen wir beobachten wollen, eingetreten ist. | ||
Es kann vorkommen, dass während dieser Zeit auf der Console ständig angezeigt was fhem aktuell macht. Um den Prozess nun zu beenden muss fhem herunter gefahren werden. Dafür sollte im Idealfall eine zweite Console geöffnet werden. Dort gehen wir wie folgt vor: | |||
# Wir verbinden uns mittels Telnet mit unserem laufenden FHEM <code> telnet <DeinFHEMServer> 7072</code> | # Wir verbinden uns mittels Telnet mit unserem laufenden FHEM <code> telnet <DeinFHEMServer> 7072</code> | ||
# Ein <code>shutdown</code> absetzen | # Ein <code>shutdown</code> absetzen | ||
Zeile 47: | Zeile 48: | ||
Jetzt haben wir im Ordner /opt/fhem mindestens die Datei nytprof.out, manchmal auf noch nytprof.out.PIDNUMMER. | Jetzt haben wir im Ordner /opt/fhem mindestens die Datei nytprof.out, manchmal auf noch nytprof.out.PIDNUMMER. | ||
Um zu testen, ob die Datei in Ordnung ist, kann folgender Befehl im Ordner /opt/fhem abgesetzt werden: <code>nytprofhtml</code> Dies sollte ohne Fehlermeldung durchlaufen und ein Unterordner namens <tt>nytprof.</tt> mit HTML Inhalt erstellt worden sein. Über die <tt>index.html</tt> könnt ihr nun erkennen was euer fhem so die ganze Zeit macht. | Um zu testen, ob die Datei in Ordnung ist, kann folgender Befehl im Ordner /opt/fhem abgesetzt werden: <code>sudo nytprofhtml</code> Dies sollte ohne Fehlermeldung durchlaufen und ein Unterordner namens <tt>nytprof.</tt> mit HTML Inhalt erstellt worden sein. Über die <tt>index.html</tt> könnt ihr nun erkennen was euer fhem so die ganze Zeit macht. | ||
Solltet ihr während des Prozesses über das WebUI von FHEM arbeiten wollen und ein <tt>save</tt> ausführen wollen, dann müsst ihr vorher die fhem.conf Datei noch wie folgt bearbeiten: | |||
<code>sudo chown fhem:dialout fhem.conf</code> | |||
=Links= | =Links= |
Aktuelle Version vom 14. Mai 2017, 13:32 Uhr
Profiling FHEM
What is profiling?
In software engineering, profiling ("program profiling", "software profiling") is a form of dynamic program analysis that measures, for example, the space (memory) or time complexity of a program, the usage of particular instructions, or frequency and duration of function calls. The most common use of profiling information is to aid program optimization. (from Wikipedia)
Profiling step-by-step
You need Devel::NYTProf from CPAN.
On Debian based systems install package "libdevel-nytprof-perl":
sudo apt-get install libdevel-nytprof-perl
Start fhem.pl as follows:
perl -d:NYTProf /opt/fhem/fhem.pl /opt/fhem/conf/fhem.conf
Let it run for a while and then shut down FHEM.
You will find a bunch of nytprof.out files in /opt/fhem. nytprof.out contains the profile for the parent process and each nytprof.out.<pid> file contains the profile for a child process forked by the parent process. Not nytprof.out but the largest nytprof.out.<pid> file contains the profile of the master process since FHEM does an initial fork when it is ready.
You transfer the profile of the master process into something human-readable by issueing the command
nytprofhtml -f nytprof.out.<pid>
This produces a subfolder names nytprof. Direct your browser to file index.html therein. You will get a bunch of information how FHEM spends its time.
FHEM Profilieren
Was ist profilieren
Kurz gesagt, mittels profilieren kann man ein Programm in seinem Ablauf untersuchen und so schauen, wo z.B. die Performance verbessert werden kann.
Profilieren Schritt für Schritt
Benötigt wird das Paket Devel::NYTProf dies kann auf Debian Systemen mittels sudo apt-get install libdevel-nytprof-perl
installiert werden.
Weiterhin benötigt wird eine .conf Datei. Soll unsere aktuelle komplette Instanz profiliert werden, können wir einfach wie folgt vorgehen. Voraussetzung ist, das unsere fhem.cfg Datei im Hauptordner fhem abgelegt ist. Typischerweise wäre das unter /opt/fhem. Dann können wir wie folgt vorgehen auf der Console:
sudo cp /opt/fhem/fhem.cfg /opt/fhem/fhem.conf
Nun haben wir im Ordner /opt/fhem die Datei fhem.conf erstellt. Als nächstes müssen wir fhem so starten, dass es profiliert wird:
- Fhem beenden. Entweder in fhem mittels "shutdown" in der Commandzeile, oder mittels Console:
sudo /etc/init.d/fhem stop
- In den Ordner fhem wechseln
cd /opt/fhem
- fhem wie folgt starten:
sudo perl -d:NYTProf /opt/fhem/fhem.pl /opt/fhem/fhem.conf
Nun kann fhem solange laufen, wie wir es benötigen, oder der Prozess, welchen wir beobachten wollen, eingetreten ist. Es kann vorkommen, dass während dieser Zeit auf der Console ständig angezeigt was fhem aktuell macht. Um den Prozess nun zu beenden muss fhem herunter gefahren werden. Dafür sollte im Idealfall eine zweite Console geöffnet werden. Dort gehen wir wie folgt vor:
- Wir verbinden uns mittels Telnet mit unserem laufenden FHEM
telnet <DeinFHEMServer> 7072
- Ein
shutdown
absetzen - Fhem wird nun beendet.
Anmerkung: Sollte ein Fehler erscheinen, dass Telnet ein unbekannter Befehl ist, dann müsst ihr noch Telnet mittels sudo apt-get install telnet
installieren.
Jetzt haben wir im Ordner /opt/fhem mindestens die Datei nytprof.out, manchmal auf noch nytprof.out.PIDNUMMER.
Um zu testen, ob die Datei in Ordnung ist, kann folgender Befehl im Ordner /opt/fhem abgesetzt werden: sudo nytprofhtml
Dies sollte ohne Fehlermeldung durchlaufen und ein Unterordner namens nytprof. mit HTML Inhalt erstellt worden sein. Über die index.html könnt ihr nun erkennen was euer fhem so die ganze Zeit macht.
Solltet ihr während des Prozesses über das WebUI von FHEM arbeiten wollen und ein save ausführen wollen, dann müsst ihr vorher die fhem.conf Datei noch wie folgt bearbeiten:
sudo chown fhem:dialout fhem.conf
Links
official perlfaq: How do I profile my Perl programs?