Zusammenfassung: Moodle Performance-Probleme zum Semesterstart

Daniel Baumann daniel.baumann at bfh.ch
Thu Sep 29 17:00:22 CEST 2016


Hallo zusammen

hier eine Zusammenfassung zur Moodle Performance und unserem etwas
holprigen Start ins Herbstsemester 2016..

Management Summary:

  * Moodle in der aktuellen Version macht im Gegensatz zur 2.5 Jahre
    alten Version die wir bis und mit vorheriges Semester benutzt
    haben, signifikant mehr Datenbankzugriffe.

  * Ab Herstsemester benutzen signifikant mehr User die Moodle
    Plattform, was zu Load-Spitzen bei z.B. Unterrichtsbeginn fuehrt.

    Als Vergleich.. innerhalb des Zeitraum seitdem wir Web-Statistik
    mit Piwik machen (2.5 Jahre):

    - intranet.bfh.ch hatte am 19.9.16 ein neuen Tagesrekord mit 20'000
      Pageviews von 5'000 Usern, ein durchschnittlicher Wochentag ist
      1'000 Pageviews von 500 Usern.

    - www.bfh.ch hatte am 14.9.16 ein neuen Tagesrekord mit 12'000
      Pageviews und 4'500 Usern ein durchschnittlicher Wochentag ist
      7'500 Pageviews von 2'000 Usern.

    - moodle.bfh.ch hat fuer die gleichen Tage jeweils 100'000
      Pageviews und 10'000 User. Die einzigen "ruhigen" Tage waren
      letzten Samstag/Sonntag mit jeweils ueber 3'500 Usern und 25'000
      Pageviews.

    Moodle ist, mit riesigem Abstand, die meist besuchte Webseite
    der BFH.

  * Unser Webstack (Apache/PHP-FPM/PostgreSQL) benoetigt jetzt etwa
    Faktor 3 mehr Rechner-Ressourcen (RAM/CPU) verglichen zum
    Herbstsemester 2015.

  * Mit unseren Hardware- (23.9.) und Software-Anpassungen (21.9. und
    26.9.) ist ein fluessiger Moodle-Betrieb nun gewaehrleistet.

  * Mittel/Langfristige Massnahmen zum kontinuerlichen Ausbau von
    Moodle (PostgreSQL Cluster, Web-Cluster) haetten geholfen, koennen
    aber nicht kurzfristig umgesetzt werden und sind nach wie vor fuer
    2017 auf dem Plan.

Wir bedanken uns fuer alle Rueckmeldungen. Insbesondere Meldungen ueber
schlechte Performance haben uns sehr geholfen, die Load-Spitzen zu
einzugrenzen und zu beurteilen.

Wir entschuldigen uns fuer die Unannehmlichkeiten und wuenschen allen
ein gutes Semester.

---

Lange Version fuer die Interessierten..

Ausgangslage:

  * Moodle laeuft als Linux Container innerhalb einer Linux VM auf
    unserer VMware ESX Umgebung (Bern).
    Die Container (rootfs und Daten) werden per NFS von unserem NetApp
    Server (Bern) in die Linux VM eingebunden.

Ursache:

  * Grundproblem ist I/O wait bedingt durch den VMware Hypervisor mit
    NFS
  * Zusaetzliche temporaere Verschlimmbesserung durch zu zeitlich weit
    auseinanderliegenden checkpoints in PostgreSQL
  * Zu wenige apache Verbindungen fuer hohe Spitzen

Wirkung:

  * Moodle konnte am 20.9. kaum und teilweise am 21.9. nur sehr
    eingeschraenkt benutzt werden
  * User haben entweder DB-Connection Fehlerseite (PostgreSQL
    Connection Limit), DB-Connection Timeout (I/O wait), oder gar keine
    Webseite (apache Connection Limit) bekommen.

Nebenbemerkung:

  * Moodle war vom Ausfall der OCSP Server von QuoVadis weil
    entsprechende Linux Konfiguration nicht betroffen.

Massnahmen:

  * kurzfristig:
    - keine notwendig

  * mittelfristig:
    - Hardware-kaufen-oder-wieder-zurueck-VMware-ESX fuer Moodle
      entscheiden, da Moodle nicht auf dem OpenStack Node verbleiben
      kann (brauchen wir fuer OpenStack).
    - JMeter als regelmaessiges Performance-Test Tool fuer Test-Instanz
      einfuehren

  * langfristig (ab Januar 2017 bis Ende 2017):
    - Arbeiten wie geplant aufnehmen fuer PostgreSQL- und
      Web-Cluster.

  * ...und last-but-not-least: es empfiehlt sich, keine Hermes-Kurse
    bei Ferienabwesenheiten des Kollegen zu Semesterbeginn zu machen :)

Zeitlicher Ablauf:

  * 1+2.9: Moodle Migration (Version 2.7->3.1)
    - wir haben Moodle Anfang September von Version 2.7 auf 3.1
      aktualisiert resp. die alte 2.7 Instanz durch eine komplett neue
      Instanz mit 3.1 ersetzt.

    - gleichzeitig haben wir die Datenbank von MySQL auf PostgreSQL
      gewechselt.

    - ausserdem haben wir seit Moodle 3.1, nun ein vollstaendig
      automatisiertes und reproduzierbares Setup: wir koennen ein
      leeres oder befuelltes Moodle "per Knopfdruck" from Scratch
      (preseeding und Git) und komplett non-interaktiv als Linux
      Container neu installieren. Das ist die technische Voraussetzung
      damit wir bzgl. Infrastruktur in Zukunft ueberhaupt weiter
      ausbauen koennen (PostgreSQL- und Web-Cluster).

  * 13.9.: PostgreSQL
    - wir haben als Vorbereitung auf den Studienbeginn die Connect
      Limits erhoeht fuer PostgreSQL

  * 15.9.: PostgreSQL
    - wir haben als Vorbereitung auf den Studienbeginn die RAM
      Zuweisung fuer PostgreSQL erhoeht

  * 15.9.: PHP-FPM
    - wir haben als Vorbereitung auf den Studienbeginn die Connection
      Limits und RAM Zuweisung fuer PHP-FPM erhoeht

  * 16.9.: VMware ESX
    - waehrend des Tages (Einfuehrungstag 1. Semester) hatten wir keine
      Performance Probleme.

    - als Vorbereitung auf den Studienbeginn haben wir am Abend die
      Ressourcen der Linux VM (auf welcher nur der Moodle Container
      laeuft, sonst nichts) sicherheitshalber "verdoppelt", d.h. von
      4 auf 8 CPUs und von 24GB auf 48GB RAM.

      Vorherige Werte:
      + Fruehlingssemester 2014: 2 CPUs, 8 GB RAM
      + Herbstsemester 2015:     2 CPUs, 12 GB RAM
      + Fruehlingssemester 2016: 4 CPUs, 24 GB RAM

  * 17/18.9: alles auf Gruen
    - es ist Wochenende vor Studienbeginn: viele Professoren bearbeiten
      ihre Kurse im Moodle, alles im gruenen Bereich.

  * 19.9.: alles auf Gruen
    - es ist Studienbeginn, geringfuegig erhoehter Load zu den Tagen
      davor, immer noch alles im gruenen Bereich.

  * 20.9.: 1. Knall
    - System ist ueberlastet, zu Spitzenzeiten kaum zu gebrauchen
    - Phillip hat ab jetzt zwei Wochen Ferien, ich bin den ganzen Tag
      abwesend weil Hermes-Kurs
    - Luca nimmt zusammen mit einem IT-Mitarbeiter der ETHZ am
      Abend/Nacht einige PostgreSQL Anpassungen vor, rettet uns fuer
      den Moment.

  * 21.9.: 2. Knall
    - System ist weiterhin ueberlastet, zu Spitzenzeiten kaum zu
      gebrauchen
    - Luca hat ueber Nacht gearbeitet und jetzt Ausschlafs-/Papatag,
      ich schwaenze den 2. Tag des Hermes-Kurs und kuemmere mich um
      Moodle
    - Problem: PostgreSQL waere soweit in Ordnung, aber apache konnte
      nicht mehr genuegend Verbindungen annehmen (wegen mpm_event ist
      das "normale" Limit zwar, fuer BFH-Verhaeltnisse, sehr hoch und
      haette fuer jede andere Seite der BFH bei weitem ausgereicht,
      fuer moodle.bfh.ch aber brauchts noch mehr)
    - es hat dann immerhin doch noch zur erfolgreichen Hermes-
      Zertifizierungspruefung am Abend gereicht

  * 22.9.: I/O wait?
    - Moodle ist normal benutzbar
    - wir stehen kurz vor Abschluss unseres Monitoring-Projekts fuer
      LFE (Infrastructure und Application Monitoring, per Ende Oktober),
      koennen aber Moodle als Applikation noch nicht ueberwachen und
      tappen daher etwas im Dunkeln.
    - nehme Moodle als "einzelnen“ Monitoring-Punkt auf, so dass wir
      wenigstens die wichtigsten Eckdaten sehen.
    - es zeigt sich dass wir einen sehr hohen I/O wait Anteil haben
      (ca. 10%, normal maximal zwischen 0 und 1%).

  * 23.9.: I/O wait..
    - I/O wait bestaetigt sich und bleibt auch ueber Nacht erhalten.
    - Hypothese: es ist allgemein bekannt, dass NFS ueber VMware ESX in
      eine Linux VM wegen des VMware-Netzwerk-Layers einiges an
      Performance einbuesst (gibt Berichte mit Einzelfaellen von ueber
      30% weniger Bandbreite).
    - Um diese Vermutung zu bestaetigen, stoppe ich den Moodle-
      Container und starte ihn auf einer temporaer noch-nicht
      benutzten OpenStack Admin Node (das ist die kleine OpenStack
      Admin Node, im Gegensatz zu den grossen Compute Nodes), mache
      aber sonst bewusst keine Aenderungen am Stack
      (apache/php-fpm/postgresql).
    - Dank NFS resp. shared Storage ist eine solche "Verschiebe-Aktion"
      nur ein "container stop" auf host A, und ein "container start"
      auf host B, die Downtime ist lediglich 2min in der Mittagspause.

  * 26.9.: I/O wait!
    - Uebers Wochenende hat sich gezeigt, dass I/O wait durch die
      Verschiebung von VMware auf Hardware von einem 10-15% Grundpegel
      (bei wenig Load, sonst bis zu Spitzen von 25%) auf unter 1%
      gelegt hat. Die Hypothese bzgl. VMware ESX und NFS scheint sich
      also zu bestaetigen.
    - Zusammen mit der, im Falle von NFS besonders nachteiligen,
      PostgreSQL Konfiguration vom 20.9. (checkpoints auf 0.7
      Empfehlung des ETHZ IT-Mitarbeiters ist zwar fuer HDD/SSD Systeme
      sehr vorteilhaft, ergibt aber bei NFS und einem I/O
      wait-Grundrauschen bei etwas Load sofort I/O Starvation,
      damit sind dann Dienste entsprechend nicht mehr sinnvoll
      benutzbar).

  * 27.9.: PostgreSQL
    - Seit der VMware-nach-Hardware-Verschiebung des Containers hab ich
      bewusst keine der Komponenten des Stacks angepasst um das Problem
      zu isolieren.

      Da das Problem jetzt isoliert ist, hab ich PostgreSQL am fruehen
      Morgen noch optimal auf die Hardware eingestellt.

  * 28.9.: Alles gut
    - Dienstag und Mittwoch war wieder hoher Load welcher ohne Probleme
      vom Server verarbeitet werden konnten.
    - Normalitaet ist wieder hergestellt

Gruesse,
Daniel

-- 
Berner Fachhochschule / Bern University of Applied Sciences
IT-Services / Team Infrastructure Services
Daniel Baumann
IT System Engineer Linux
___________________________________________________________
Dammweg 3, CH-3013 Bern
Phone direct +41 31 848 48 22
Phone Servicedesk +41 31 848 48 48
daniel.baumann at bfh.ch
https://servicedesk.bfh.ch
https://www.bfh.ch
https://linux.bfh.ch


More information about the bfh-moodle-announce mailing list