{"id":39,"date":"2018-03-30T10:52:07","date_gmt":"2018-03-30T10:52:07","guid":{"rendered":"http:\/\/www.sanchofock.de\/?p=39"},"modified":"2018-03-31T17:53:20","modified_gmt":"2018-03-31T17:53:20","slug":"performanceproblem-in-php-identifizieren-mit-dynatrace","status":"publish","type":"post","link":"https:\/\/www.sanchofock.de\/?p=39","title":{"rendered":"Performanceproblem in PHP identifizieren mit DynaTrace"},"content":{"rendered":"<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Im Rahmen der Untersuchung eines Performanceproblems in einem Internet Forum habe ich getestet, wie hilfreich DynaTrace bei einer PHP Anwendung sein kann um die Ursache des Problems zu finden.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Die Rahmenbedingungen und vorhergegangenen Ma\u00dfnahmen beschreibe ich in diesem Artikel [http:\/\/www.sanchofock.de\/?p=69]<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Hier nur so viel: Das betroffene Internetforum verwendet die freie Software phpBB. Wie der Name schon sagt eine PHP Software, welche eine mySQL Datenbank verwendet.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Es traten teilweise sehr lange Wartezeiten insbesondere beim Absenden von Beitr\u00e4gen auf.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Das Einrichten einer DynaTrace-Teststellung war bemerkenswert einfach. Vorausgesetzt man hat Zugriff auf die Konsole des zu \u00fcberwachenden Systems und entsprechende Rechte.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Das Deployment des Agenten beinhaltete direkt die Einbindung in die WebUI. Das System wurde sofort erkannt auch die verwendeten Technologien.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Es war noch notwendig den Apache Server und den PHP Prozess neu zu starten, danach waren auch die Insights f\u00fcr Apache, PHP und mySQL verf\u00fcgbar<\/span><\/span><\/p>\n<p><span style=\"color: #000000; font-family: Times New Roman; font-size: medium;\"><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.sanchofock.de\/wp-content\/uploads\/2018\/03\/dt1-1.png\" data-recalc-dims=\"1\" \/><\/span><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">\u00a0<\/span><\/span><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Also hinein in die Fehleranalyse:<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Als erstes mal ein Blick unter Transactions &amp; Services dieser Applikation. Tats\u00e4chlich ist ein Aufruf auff\u00e4llig, der Aufruf von \u201eposting.php\u201c Interessant ist es doch genau die Seite, die verwendet wird wenn ein Forumsbeitrag gespeichert wird.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Also hineingeschaut in den \u201ePurePath\u201c wie DynaTrace es nennt. Also die Aufsplitterung der Service Aufrufe innerhalb einer Transaktion<\/span><\/span><\/p>\n<p><span style=\"color: #000000; font-family: Times New Roman; font-size: medium;\"><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.sanchofock.de\/wp-content\/uploads\/2018\/03\/dt2-1.png\" data-recalc-dims=\"1\" \/><\/span><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">\u00a0<\/span><\/span><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Einen langsamen Request rausgesucht:<\/span><\/span><\/p>\n<p><span style=\"color: #000000; font-family: Times New Roman; font-size: medium;\"><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.sanchofock.de\/wp-content\/uploads\/2018\/03\/dt3-1.png\" data-recalc-dims=\"1\" \/><\/span><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Die Darstellung zeigt eine Aufgliederung der Teilprozesse. In diesem Fall handelt es sich um einige Datenbank Aktionen. Keine dieser Aktionen dauert signifikant lange. Doch etwas heruntergescrollt \u2026 was ist das? Das ist Interessant:<\/span><\/span><\/p>\n<p><span style=\"color: #000000; font-family: Times New Roman; font-size: medium;\"><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.sanchofock.de\/wp-content\/uploads\/2018\/03\/dt4-1.png\" data-recalc-dims=\"1\" \/><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Zwischen dem Select auf die Tabelle Smilies und dem folgenden update liegen 3 Sekunden ohne das was passiert. Aber warum?<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Bis hierhin passt das Bild perfekt zusammen. Die Antwortzeiten im Performancetest zeigten seltsame Antwortzeit Gruppen, die jeweils 3 Sekunden auseinander lagen. Die Analyse der Datenbank ergab, dass es keine lang laufenden Queries gab.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Aber wir wissen ja noch immer nicht, was die Ursache f\u00fcr diese Verz\u00f6gerung ist, also m\u00fcssen wir mal ins PHP hineinschauen.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Also hinein in die Antwortzeit Analyse, zun\u00e4chst mal sehen wir auch hier, dass die PHP Ausf\u00fchrungszeit den L\u00f6wenanteil der Antwortzeit ausmacht.<\/span><\/span><\/p>\n<p><span style=\"color: #000000; font-family: Times New Roman; font-size: medium;\"><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.sanchofock.de\/wp-content\/uploads\/2018\/03\/dt5-1.png\" data-recalc-dims=\"1\" \/><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Aber weiter Unten wird es endlich Konkreter:<\/span><\/span><\/p>\n<p><span style=\"color: #000000; font-family: Times New Roman; font-size: medium;\"><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.sanchofock.de\/wp-content\/uploads\/2018\/03\/dt6-1.png\" data-recalc-dims=\"1\" \/><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Fast 91% der Zeit werden in der Methode gethostbyname verbraucht aus dem Modul phpbb_checkdnssrr.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Ohne den Souce Code zu kennen, liegt es also nahe, dass die lange Zeit bei DNS Server Abfragen entstehen.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Dies war der entscheidende Hinweis. Jetzt konnte ich das Problem weiter analysieren und beheben. Siehe dazu den Rahmenartikel XXX. <\/span><\/span><\/p>\n<p><strong><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Fazit:<\/span><\/span><\/strong><\/p>\n<ul>\n<li><span style=\"color: #000000;\"><span lang=\"DE\"><span style=\"font-family: Calibri; font-size: medium;\">Die Installation und das Deployment waren vorbildlich einfach.<\/span><\/span><\/span><\/li>\n<li><span style=\"color: #000000;\"><span lang=\"DE\"><span style=\"font-family: Calibri; font-size: medium;\">Auch ohne Tool-Experten Kenntnisse habe ich mich,\u00a0 mit ein wenig suchen schnell zu recht gefunden und konnte das gesuchte Problem so schnell finden. <\/span><\/span><\/span><\/li>\n<li><span style=\"color: #000000;\"><span lang=\"DE\"><span style=\"font-family: Calibri; font-size: medium;\">Ein wenig Erfahrung mit DynaTrace und \u00e4hnlichen Tools habe ich mitgebracht, aber eine Analyse einer PHP Software hatte ich zuvor noch nie gemacht. <\/span><\/span><\/span><\/li>\n<li><span style=\"color: #000000;\"><span lang=\"DE\"><span style=\"font-family: Calibri; font-size: medium;\">Den Einsatz im professionellen Bereich kann ich nach dieser und vorherigen Erfahrungen durchaus empfehlen. In meinem kleinen Test lieferte DynaTrace den entscheidenden Hinweis.<\/span><\/span><\/span><\/li>\n<\/ul>\n<p><span style=\"color: #000000;\"><span lang=\"DE\"><span style=\"font-family: Calibri; font-size: medium;\">Ich kann hier keine vollst\u00e4ndige Tool Evaluation machen. Ob und wie gut das gleiche mit anderen Konkurrenten am Markt m\u00f6glich ist sollte vor einer Anschaffung ggf. gepr\u00fcft werden. Die folgenden Punkte und \u00dcberlegungen w\u00fcrde ich empfehlen zu ber\u00fccksichtigen:<\/span><\/span><\/span><\/p>\n<ul>\n<li><span style=\"color: #000000;\"><span lang=\"DE\"><span style=\"font-family: Calibri; font-size: medium;\">Bei der von mir getesteten Version mit einem Datacenter muss die Verbindung zum Internet gegeben sein. Dies ist auf den ersten Blick eine technische Implikation, das Security Team muss also involviert werden. Aber es ist auch darauf zu achten, ob es im Unternehmen Security Policies gibt und ob der Einsatz auf diese Art danach zul\u00e4ssig ist.<\/span><\/span><\/span><\/li>\n<li><span style=\"color: #000000;\"><span lang=\"DE\"><span style=\"font-family: Calibri; font-size: medium;\">\u00dcber andere Deployment Modelle, die keine Verbindung ins Internet bedingen habe ich mich an dieser Stelle nicht informiert, das w\u00e4re ggf. mit dem Hersteller des Tools zu kl\u00e4ren<\/span><\/span><\/span><\/li>\n<li><span style=\"color: #000000;\"><span lang=\"DE\"><span style=\"font-family: Calibri; font-size: medium;\">\u00dcber die Kosten habe ich mich an dieser Stelle ebenso nicht informiert, da ich ausschlie\u00dflich an der Funktion interessiert war. Es versteht sich, dass wer den Einsatz von DynaTrace im professionellen Bereich ins Auge fasst hier eine eigene Kosten\/Nutzen Betrachtung anstellt.<\/span><\/span><\/span><\/li>\n<li><span style=\"color: #000000;\"><span lang=\"DE\"><span style=\"font-family: Calibri; font-size: medium;\">Und zu guter letzt noch ein allgemeiner Rat: \u201eA fool with a tool is still a fool\u201c. Das sollte man niemals vergessen. Das Tool f\u00fchrt nicht zum Ziel, der Anwender des Tools tut das. Das Tool kann es ihm aber erheblich einfacher machen, wie in diesem Fall. Performancetests und Performance Analysen sind kein Hexenwerk, aber auch kein Nebenjob.<\/span><\/span><\/span><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Im Rahmen der Untersuchung eines Performanceproblems in einem Internet Forum habe ich getestet, wie hilfreich DynaTrace bei einer PHP Anwendung sein kann um die Ursache des Problems zu finden. Die Rahmenbedingungen und vorhergegangenen Ma\u00dfnahmen beschreibe ich in diesem Artikel [http:\/\/www.sanchofock.de\/?p=69] Hier nur so viel: Das betroffene Internetforum verwendet die freie Software phpBB. Wie der Name [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/posts\/39"}],"collection":[{"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=39"}],"version-history":[{"count":4,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/posts\/39\/revisions"}],"predecessor-version":[{"id":72,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/posts\/39\/revisions\/72"}],"wp:attachment":[{"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=39"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=39"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=39"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}