Rustypredator: Probleme mit Nginx, PHP-fpm und Memcached

Hi,
Ich hoffe, dass sich hier jemand damit auskennt :)

Ich habe eine Website, die in letzter zeit ein recht hohes Nutzeraufkommen hat.
Mit dieser Website möchte ich OHNE die Hardware zu tauschen, mehr Nutzer abfertigen in der gleichen Zeit, da eben mehr Nutzer kommen.
Zur zeit benutze ich auf dieser Website Apache2 mit Wordpress und Memcached.
Nun wollte ich feststellen, ob ich die Performance dieser Seite mit Nginx anheben kann.
Wenn ich jetzt auf meinem Webserver Nginx mit WP laufen habe, dann bekomme ich aus einem Test mit 10000 Clients
Über einen Zeitraum von 60 Sekunden nur 600 Erfolgreiche antworten. Der rest sind Errors. Bild
Wenn ich jetzt Memcached dazu schalte, bekomme ich über den gesamten Zeitraum 9969 Erfolgreiche Antworten zurück, jedoch gehen die Maximalen User/s nicht über 451. Bild
auf meiner Seite habe ich jedoch teilweise über 1000 User/s.
Weiß irgendjemand warum ich nur so niedrige connection raten bekomme?

System:
AWS EC2 Cloud Server 2GHz, 650MB RAM
Ubuntu 13.10
Nginx 1.4.7
Memcached 1.4.14
Php-fpm for php 5.5.3

Config Dateien:
Nginx
Memcached
php-fpm

  1. Du hast

    https://codex.wordpress.org/High_Traffic_Tips_For_WordPress

    http://wordpress.org/plugins/wp-super-cache/

    schon gesehen?

    Blogs sind "quasistatisch".

    Deshalb wäre vor allem zu überlegen, ob Du statt eines Cache-Plugins einen Webcache wie Squid vorschaltest, also den Proxy auf Port 80 (+443) laufen lässt und die Zugriffe auf den Webserver (welcher auf lokalhost + einem alternativen Port, z.B. 8080 läuft) weiterreichst.

    Jörg Reinholz

    1. Ach so: Noch eine Alternative:

      http://www.fastix.org/PHP-+Einfaches+Caching+fuer+Webprojekte.htm

      Packe die index.php von Wordpress an diese Stelle:

      /*  
             ########################################################################################  
             #                                                                                      #  
             #        Ihr bisheriges PHP-Skript bleibt (bis auf das eventuelle Vorziehen des        #  
             #        Startes der Session unangetastet!                                             #  
             #        Es sollte an dieser Stelle stehen und diesen Kommentar ersetzen.              #  
             #                                                                                      #  
          */ ########################################################################################
      
      1. Ach so: Noch eine Alternative:

        http://www.fastix.org/PHP-+Einfaches+Caching+fuer+Webprojekte.htm

        Packe die index.php von Wordpress an diese Stelle:

        /*

        ########################################################################################
               #                                                                                      #
               #        Ihr bisheriges PHP-Skript bleibt (bis auf das eventuelle Vorziehen des        #
               #        Startes der Session unangetastet!                                             #
               #        Es sollte an dieser Stelle stehen und diesen Kommentar ersetzen.              #
               #                                                                                      #
            */ ########################################################################################

          
        Danke für deine schnelle antwort, jedoch suche ich nicht nach einem Plugin für Wordpress sondern es interessiert mich mehr, wie ich apache dazu bringen kann mehr und mehr benutzer zu versorgen.  
        wie man ja sehen kann unterscheiden sich die graphen von Nginx und apache in den beiden ähnlichen Konfigurationen sehr.  
        Apache dropt diese Nutzer nicht sondern es werden immer mehr und es kommen kaum errors dabei raus. Bei nginx wiederum bleiben die benutzer auf einem level (ca. 400) und es gibt keinen einzigen error, was ja sehr schön ist. Wenn die seite allerdings nicht mehr als 400 user GLEICHZEITIG unterstützen kann, so wie apache dann ist das sinnlos für mich.  
        Hier nochmal ein [Bild ](http://rusty.info/images/ap-ng/Apache+WP+Memcached.png)zum jetzigen stand auf der website mit apache, wp und memcached.  
        Nun will ich ähnliche und nach möglichkeit bessere ergebnisse mit nginx erzielen.
        
        1. Nun will ich ähnliche und nach möglichkeit bessere ergebnisse mit nginx erzielen.

          Zum nginx kann ich Dir weniger erzählen.

          Aber der Apache ist je nach Konfiguration sehr Unterscheidlich leistungsfähig.

          Je nach dem wie Du den Apache betreibst (prefork / worker) können folgende Einstellungen relevant sein, weil diese beeinflussen, wie viele Requests gleichzeitig abgearbeitet werden können.

          * MaxClients
          * MaxRequestsPerChild
          * MaxSpareThreads
          * MinSpareThreads
          * ServerLimit
          * StartServers
          * StartThreads
          * ThreadLimit
          * ThreadsPerChild

          Jörg Reinholz

          1. Nun will ich ähnliche und nach möglichkeit bessere ergebnisse mit nginx erzielen.

            Zum nginx kann ich Dir weniger erzählen.

            Aber der Apache ist je nach Konfiguration sehr Unterscheidlich leistungsfähig.

            Je nach dem wie Du den Apache betreibst (prefork / worker) können folgende Einstellungen relevant sein, weil diese beeinflussen, wie viele Requests gleichzeitig abgearbeitet werden können.

            Danke für deine Hilfe.
            Ich kann leider die config des aktuellen apache nicht einsehen, da es ein managed server ist auf den ich kein Zugriff habe.

            Wie es aussieht verwende ich auf dem "testserver" prefork, ich würde jedoch lieber worker benutzen, da ich ja wie bereits erwähnt, einen server mit teilweise sehr hohem Nutzeraufkommen habe.
            Kannst du mir sagen wie ich das Modul ändere ohne den apache neu zu installieren? oder geht das überhaupt nicht?

            Grüße,
            Rusty

            1. Kannst du mir sagen wie ich das Modul ändere ohne den apache neu zu installieren? oder geht das überhaupt nicht?

              Da es ein Managed Server ist geht da sehr einfach: Manager mit Formblatt 0815 beauftragen und den gleich fragen, was denen eigentlich einfällt.

              Wie es aussieht verwende ich auf dem "testserver" prefork, ich würde jedoch lieber worker benutzen, da ich ja wie bereits erwähnt, einen server mit teilweise sehr hohem Nutzeraufkommen habe.

              Hm. da kann es aber an der eigenen Beschreibung mit "Testserver" liegen.

              Jörg Reinholz

              1. Hm. da kann es aber an der eigenen Beschreibung mit "Testserver" liegen.

                Jörg Reinholz

                Danke für deine Hilfe Jörg,
                Ich werde mich jedoch erstmal auf das problem mit apache beschränken.
                Wir haben bei unserem VPS die möglichkeit ubuntu minimal und mit plesk auszuwählen.
                Die version mit minimal macht wieder das Problem mit den 200 User/s, bei der Plesk version jedoch
                Kommen wir deutlich drüber.
                Beide haben nur eine 10KB datei im htdocs ordner liegen wo müll drin steht.
                Bei der vorkonfigurierten plesk version sind natürlich noch mysql und php mit dabei aber ansonsten sind beide exakt gleich.

                Graph der Plesk version: LINK
                Graph der Minimal Version: LINK

                Config dateien:
                Plesk Version: LINK
                Minimal Version: LINK

                Kannst du mir erklären warum die beiden systeme so unterschiedlich laufen?
                Wenn nicht, kennst du jemanden der mir das erklären könnte?

                Danke,

                Rustypredator

                1. Wir haben bei unserem VPS die möglichkeit ubuntu minimal und mit plesk auszuwählen.
                  Die version mit minimal macht wieder das Problem mit den 200 User/s, bei der Plesk version jedoch Kommen wir deutlich drüber.

                  Oh. Da gibt es viele Unterschiede.
                  1.) Installiere nach Möglichkeit den Ubuntu-Server.

                  2.) Es kann was bringen, den linux-virtual-Kernel zu installieren. Paket linux-virtual. Aber um darüber eine Aussage zu machen müsste ich mehr über die Host wissen, konkret darüber, wie virtualisiert wird.

                  3.) Falls nicht geschehen, dann kann das folgende die Installation (von ubuntu-minimal ausgehend) erleichtern:

                  • installiere und nutze tasksel und installiere damit lamp: sudo tasksel install lamp-server

                  4.) Achte in jedem Fall darauf, dass apache2-mpm-worker installiert wird. (sudo apt-get install apache-mpm-worker)

                  5.) Ich halte nichts Plesk. Wenn Du nicht auch noch Webspace für Dritte bereit stellen ist willst ist Plesk sogar meines Ermessens nach sogar extrem kontraproduktiv, weil die gewohnten Wege der Konfiguration dann nicht mehr offen stehen und man deshalb ewig rumsucht, wenn man etwas nicht so will wie die Macher von Plesk sich das dachten. Auch erzeugt es in dem Fall, dass Du nicht webspace vermieten oder etliche Domains verwalten willst einen Overhead, den Du dann gewiss auch nicht haben willst.

                  Jörg Reinholz

                  1. Hallo Jörg,

                    Entschuldige meine späte antwort, Wir haben die graphen von dem Tester komplett falsch interpretiert.
                    Diese 200 user "Grenze" ist nicht vorhanden. in wirklichkeit arbeitet der Server mit dem Gleichbleibenden Useraufkommen einfach nur schnell genug um alle User abzufertigen.

                    Mit Plesk hast du auf jeden fall recht, das wollen wir auch nicht benutzen, jedoch haben wir uns einfach gefragt wie es sein kann, dass der mit einer anderen Konfiguration so unterschiedliche Leistungen erzielt (nach unseren Neuesten erkenntnissen ja schlechtere).

                    Wir Konzentrieren uns jetzt nur auf die AWS instanzen, da wir mit denen die besten ergebnisse erzielt haben.
                    Daher ist die eigentliche Frage nun geklärt.

                    Die nächste Frage wäre jetzt zu allgemeinen Apache / Nginx Tuning. Sollte ich dafür lieber einen neuen Thread aufmachen??

                    1. Die nächste Frage wäre jetzt zu allgemeinen Apache / Nginx Tuning. Sollte ich dafür lieber einen neuen Thread aufmachen??

                      Wenn es konkret andere Fragen sind: ja.

                      Am besten teilst Du Die Frage gleich zwischen Nginx und Apache auf, in dem Du Dir selbst antwortest und dabei auch ein neues Thema/Betreff vergibst.

                      Jörg Reinholz