Ankündigung

Einklappen
Keine Ankündigung bisher.

Server-Konfiguration

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Server-Konfiguration

    Hallo,

    Folgendes Problem:

    Wir haben einen physikalischen Server mit folgender Hardware:
    • 2 x Intel Xeon E5-2620 v2 @2,1GHz (also 6 Prozessorkerne)
    • 64GB RAM
    • 2 x 256GB SSD (RAID 1)
    • 6 x 1TB HDD (RAID 5)


    Auf diesem Server liegen 2 mit Hyper-V virtualisierte Server
    • Server 1 ist AD DS und Dateiserver und liegt auf der HDD.
      Er hat 16GB RAM zugewiesen
    • Server 2 ist Printserver und auf ihm liegt der Webserver (Apache) und die Datenbanken (MySQL und SQL-Server).
      Er liegt komplett auf der SSD-Platte und hat 32GB RAM zugeordnet.

    Alle Server laufen unter Windows Server 2012.
    Versionen:
    • Apache 2.4.17 (Win32)
    • PHP 5.6.19
    • MySQL 5.6.14


    Auf dem Apache (Server 2) liegt ein "CRM/Projektverwaltungs"-Programm, welches mit Apache/MySQL läuft. Der Quellcode des Programms ist (größtenteils) mit ionCube geschützt.
    In diesem Programm sind (aus Lizenzgründen) max. 70 Leute gleichzeitig angemeldet.
    Unter anderem legt dieses Programm Dateien (Word, Excel, ...) auf Server 1 ab.

    Ausserdem habe ich noch 2 selbst programmierte Anwendungen (PHP/AJAX/MySQL) auf dem Server, in denen prinzipiell alle (ca. 100) gleichzeitig arbeiten können.

    Jetzt haben wir immer wieder Probleme mit der gekauften Anwendung.

    Zuerst hatten wir immer wieder Fehlermeldungen, dass der Arbeitsspeicher nicht ausreicht...
    Da meinte der Support zuerst, das würde an einem Bug im Apache liegen... Nach langem hin und her haben die aber ein paar Einstellungen gemacht, und seit dem kommt dieser Fehler nicht mehr.
    Jetzt kommt (oder kam) aber ein anderer Fehler:
    Code:
    Maximum execution time of 300 seconds exceeded in C:\\xampp\\htdocs\\...
    Die selbst programmierten Anwendungen laufen dabei problemlos. Auch die Darstellung mehrerer Tausend Datensätze mit aufwändigen Verknüpfungen usw. dauert zwar etwas, funktioniert aber hier problemlos.

    Zuerst habe die Einstellungen max_execution_time und max_input_time auf 600 gesetzt und trotzdem kommt die selbe Meldung mit "300 seconds".

    Dann habe ich mir die Dateien und Zeilen, die in der Fehlermeldung stehen etwas genauer angeschaut.
    Die verweisen eigentlich immer auf die Funktion is_readable(). Teilweise sogar noch in Kombination mit file_exists().
    Da diese Funktion ja nur testet, ob eine Datei lesbar ist, habe ich sie testweise auskommentiert. Und seit dem läuft (erstmal) alles wunderbar.
    Das (Haupt-)Problem ist also anscheinend der Dateizugriff vom Apache (auf Server 2) aus vermutlich auf den Datenserver (Server 1).

    Da ich jetzt nicht genau weiß, wann und wie das Programm diese Unterfunktionen mit is_readable() einsetzt, und weils vermutlich sogar lizenzrechtlich nicht astrein ist, wenn ich den Code ändere, habe ich damit ein ungutes Gefühl...
    Vielleicht ist auch der betroffene Code im nächsten Update geschützt und ich komme an die Funktion gar nicht mehr ran.

    Darum jetzt meine Frage:
    An welchen Einstellungen/Konfigurationen usw. könnte man evtl. schrauben, um das Problem auch ohne Änderungen am Quellcode zu beheben?
    Hat da jemand einen Tipp für mich?

    Vielen Dank

    Gruß
    Stefan







  • #2
    Erst einmal, du hast keinen physikalischen, sondern einen physischen Server.

    Und weiter, hier fängt das Problem an. In dem Source kann irgendwo tief unten mittels ini_set wieder die Konfiguration geändert werden, und du hast kaum Einfluss darauf. Auch wenn du ini_set deaktivierst, dann erhälst du eine Fehlermeldung und die Software funktioniert nicht mehr.

    Eventuell gäbe es einen sinnvolleren Weg, die Dateifreigabe einzubinden. Was verwendest du im Moment, SMB/NFS/...?
    GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

    Kommentar


    • #3
      Hallo Christian,

      Danke für die schnelle Antwort und die Begriffsklärung

      Da wie geschrieben alles unter M$-Windows läuft, verwenden wir SMB.
      Laut Hersteller MÜSSEN die Dateipfade als UNC-Pfade (\\...) angegeben werden. Ich kenne mich mit NFS nicht wirklich aus, aber das spricht auch gegen NFS, oder?

      Vielleicht noch zur weiteren Erläuterung:
      Der genannte Server steht an einem von 4 Standorten, die über synchrtone Datenleitungen mit VPN vernetzt sind.
      Um die Dateien an allen Standorten ohne Verzögerung öffnen zu können, liegen die Dateien in einem DFS-System.
      Das heißt, dass alle Dateien auf 4 Servern identisch zur Verfügung stehen (Änderungen werden sofort synchronisiert) und der Zugriff nicht über \\SERVER\\Freigabe sondern über \\DOMÄNE\Freigabe läuft.
      Technisch funktioniert das einwandfrei, könnte aber evtl. den Dateizugriff auch verlangsamen.

      Gruß
      Stefan

      Kommentar


      • #4
        ...und noch was...

        Der Fehler tritt schon auf, wenn man nur eine Seite aufruft, in der (über Einstellung Datensätze pro Seite) nur 20 Datensätze in einer Tabelle angezeigt werden, die dann mit den entsprechenden Dateien verlinkt sind...
        Nach meinem Verständnis dürfte die Funktion also nur 20mal (meinetwegen, wenn mehrmals pro Datei auch 40 oder 60 mal) aufgerufen werden und das dauert schon über 5 Minuten!

        Wir reden hier also nicht von ein paar (Milli-)Sekunden je Aufruf sondern das ganze ist wirklich sehr langsam.

        Auf dem Dateiserver wird auch ohne dieses Programm, ebenfalls über DFS-Links gearbeitet und da merkt man keinen nennenswerten Unterschied zum Arbeiten auf der lokalen Festplatte.

        Gruß
        Stefan

        Kommentar


        • #5
          So etwas zu debuggen ist extrem komplex. Du könntest mittels xDebug und dem Profiler ein Profil der Source erstellen und herausfinden, ob die Latenz tatsächlich da entsteht. Von mir aus dürfte ein solcher einfacher Dateizugriff nicht allzu lange dauern. Ich kenne mich mit MS-Systemen nicht so gut aus, eventuell gibt es da etwas ähnliches wie iotop, um die Festplattenzugriffe zu überwachen.

          Grundsätzlich sollte meiner Meinung nach der Hersteller der Software dafür bereitstehen, und euch auch bei der Lösung unterstützen.
          GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

          Kommentar


          • #6
            Hallo nochmal,

            Ja, natürlich sollte der Hersteller da Support leisten. Vor allem, da wir auch einen Wartungsvertrag mit ihm haben... Nur ziehen wir dieses Problem inzwischen schon seit Monaten mit uns rum und der Support hat sich entweder auf irgendwelche Bugs im Apache oder Hyper-V berufen (über die ich im Netz nichts finde...) oder irgendwelche Einstellungen in der Konfiguration gemacht, die wenig bis gar nichts brachten oder das Problem nur verschoben haben.

            Und deshalb dachte ich, vielleicht hat ja hier unter den Profis jemand die Blitzidee und kann mir eine Zeile für die Konfiguration geben, mit der alles wieder läuft

            Nachdem ich den Support aber direkt mit der Nase auf is_readable() gestoßen habe, kam gestern Abend doch noch ein Lösungsansatz, den ich aber nur testen kann, wenn hier niemand dran arbeitet.

            Danke für deine Hilfe.

            Gruß
            Stefan

            Kommentar


            • #7
              Hallo,

              nur zur Vollständigkeit...
              Die Zeile:
              Code:
              AcceptFilter http none
              in der httpd.conf scheint das Problem gelöst zu haben... Läuft jetzt seit mehreren Tagen ohne Probleme.

              Danke nochmal für die Tipps.

              Gruß
              Stefan

              Kommentar

              Lädt...
              X