{"id":69,"date":"2018-03-31T17:52:04","date_gmt":"2018-03-31T17:52:04","guid":{"rendered":"http:\/\/www.sanchofock.de\/?p=69"},"modified":"2018-10-16T17:37:50","modified_gmt":"2018-10-16T17:37:50","slug":"performance-test-eines-phpbb-internet-forums","status":"publish","type":"post","link":"https:\/\/www.sanchofock.de\/?p=69","title":{"rendered":"Performance Test eines phpBB Internet Forums"},"content":{"rendered":"<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Ich habe dies anl\u00e4sslich eines Performanceproblems eines nicht kommerziellen aber rege genutzten Internetforums getan und will hier kurz zeigen, was n\u00f6tig war bzw.\u00a0 wie ich die wichtigsten Informationen gewonnen habe.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">In dem zu untersuchenden Fall kam es beim Speichern von Beitr\u00e4gen teilweise zu erheblich langsamen Antwortzeiten. Verwendet wird die phpBB Board Software, welche eine mySQL Datenbank nutzt.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Ich m\u00f6chte hier das Vorgehen von der Analyse bis zur L\u00f6sung darstellen. Daf\u00fcr habe ich das Thema in mehrere Artikel aufgeteilt um den Teilbereichen etwas mehr Details darstellen zu k\u00f6nnen.<\/span><\/span><\/p>\n<p><span style=\"font-family: Calibri;\"><span style=\"color: #000000;\"><span lang=\"DE\"><span style=\"font-size: medium;\">Da das Problem (teilweise sehr lange <\/span><\/span><span lang=\"DE\">Antwortzeiten) nur sporadisch auftrat war der<\/span><span lang=\"DE\"><span style=\"font-size: medium;\"> erste Schritt das Problem messbar und reproduzierbar zu machen.<\/span><\/span><\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Hierf\u00fcr habe ich ein Loadrunner Script mit der Comunity Version des Loadrunners erstellt \u00a0und einen kleinen Lasttest ausgef\u00fchrt.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">In dem betroffenen Board habe ich also einen Performancetest User angelegt und einen nicht \u00f6ffentlichen Thread erstellt, in dem dieser Beitr\u00e4ge erstellen konnte ohne andere Benutzer zu st\u00f6ren.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Das Scripting mit Loadrunner war nicht besonders schwierig, enthielt jedoch einen interessanten Fallstrick, dem ich einen eigenen kleinen Artikel (<\/span><\/span><a href=\"http:\/\/www.sanchofock.de\/?p=65\"><span lang=\"DE\" style=\"margin: 0px; color: #0073aa; line-height: 115%; font-family: '&amp;quot','serif'; font-size: 10pt;\">http:\/\/www.sanchofock.de\/?p=65<\/span><\/a><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">) widme.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Als Szenario habe ich mich f\u00fcr einen einfachen Performancetest mit einem virtuellen User entschieden, der f\u00fcr 15 Minuten jeweils einen Artikel nach dem anderen postet.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Das Ergebnis best\u00e4tigte zuerst mal, dass die langsamen Antwortzeiten keine Einbildung und auch kein Zufall waren. Besonders auff\u00e4llig war jedoch, dass die Antwortzeiten zum einen sehr unterschiedlich waren, die schnellsten waren kleiner als eine Sekunde, die Langsamsten ca. 12 Sekunden manchmal sogar 15 Sekunden. Allerdings war die Verteilung nicht gleichm\u00e4ssig, sondern es gab Gruppen mit ca 0,x 3,x 6,x 9,x 12,x und 15,x Sekunden jedoch nichts dazwischen. Die Percentile Darstellung zeigt das recht deutlich:<\/span><\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.sanchofock.de\/wp-content\/uploads\/2018\/03\/bbp1.png\" data-recalc-dims=\"1\" \/><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Dieses seltsame Bild deutete darauf hin, dass es irgendwo in dem Prozess -hin und wieder- zu Timeouts kommt, aber wo?<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Als erstes habe ich mir die Datenbank angesehen. Dies beschreibe ich ausf\u00fchrlich in dem Artikel <\/span><\/span><a href=\"http:\/\/www.sanchofock.de\/?p=56\"><span lang=\"DE\" style=\"margin: 0px; color: #0073aa; line-height: 115%; font-family: '&amp;quot','serif'; font-size: 10pt;\">http:\/\/www.sanchofock.de\/?p=56<\/span><\/a><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Das Ergebnis war jedoch, dass die Ursache nicht in der Datenbank selbst lag.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Deshalb habe ich die Gelegenheit genutzt mit Hilfe einer DynaTrace Teststellung dieses Tool in Verbindung mit PHP zu testen. Auch hierzu habe ich einen ausf\u00fchrlichen Artikel geschrieben (<\/span><\/span><a href=\"http:\/\/www.sanchofock.de\/?p=39\"><span lang=\"DE\" style=\"margin: 0px; color: #00a0d2; line-height: 115%; font-family: '&amp;quot','serif'; font-size: 10pt;\">http:\/\/www.sanchofock.de\/?p=39<\/span><\/a><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">)<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Und siehe da mit Hilfe von Dyna Trace habe ich den entscheidenden Hinweis bekommen. Keiner der Service Aufrufe selbst war langsam, aber die h\u00e4ufig verwendete Methode getHostByName verbrauchte insgesamt viel Zeit. Diese Methode ist daf\u00fcr Zust\u00e4ndig die IP Adresse f\u00fcr einen HostNamen zu ermitteln bzw. eine DNS Abfrage zu machen.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Ein manueller Check an der Konsole des Servers best\u00e4tigte den Verdacht: Ich f\u00fchrte mehrere nslookup Anfragen auf den eigen Host Namen aus und die meisten waren blitzschnell beantwortet, so wie es sein sollte, aber einige dauerten mehre Sekunden.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Ein Blick in die resolv.c Datei verriet, dass das Timeout f\u00fcr DNS anfragen auf genau 3 Sekunden eingestellt war. Treffer!<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Ich verringerte nun das Timeout und wiederholte den Test und siehe da die Gruppen, die zuvor je 3 Sekunden auseinander lagen lagen nun nur noch 1 Sekunde auseinander. Die maximalen Antwortzeiten waren nun auch entsprechend geringer.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Als n\u00e4chstes habe ich die bisher verwendeten DNS Server des eigenen Providers durch eine Liste frei verf\u00fcgbarer DNS Server ersetzt und die Anzahl der langsamen Antworten verringerten sich im folgenden Test signifikant. Es blieben aber noch immer einige langsame Antworten \u00fcbrig. Wo genau in der DNS Infrastruktur das eigentliche Problem lag konnte ich zwar nicht ermitteln, aber mit der Einrichtung eines lokalen DNS Servers, welcher die verwendeten Namen chached konnte das Problem endg\u00fcltig beseitigt werden.<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">\u00a0<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">Fall gel\u00f6st<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">\u00a0<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">\u00a0<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">\u00a0<\/span><\/span><\/p>\n<p><span lang=\"DE\"><span style=\"color: #000000; font-family: Calibri; font-size: medium;\">\u00a0<\/span><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich habe dies anl\u00e4sslich eines Performanceproblems eines nicht kommerziellen aber rege genutzten Internetforums getan und will hier kurz zeigen, was n\u00f6tig war bzw.\u00a0 wie ich die wichtigsten Informationen gewonnen habe. In dem zu untersuchenden Fall kam es beim Speichern von Beitr\u00e4gen teilweise zu erheblich langsamen Antwortzeiten. Verwendet wird die phpBB Board Software, welche eine mySQL [&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\/69"}],"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=69"}],"version-history":[{"count":1,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/posts\/69\/revisions"}],"predecessor-version":[{"id":71,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=\/wp\/v2\/posts\/69\/revisions\/71"}],"wp:attachment":[{"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=69"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=69"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sanchofock.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=69"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}