GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie erhält man eine grobe Schätzung der LAMP-Anwendungskapazität?

ab ist etwas lästig, wenn Ihre Website Cookies usw. benötigt, ab ist zu einfach.

Im Grunde geht es nach meiner Erfahrung beim Reparieren mehrerer implodierender PHP-Websites normalerweise so:

1) Leute benutzen MySQL

Sie können ganz MySQL, Facebook und Flickr verwenden (Mysql-Fanboys lieben diese), WENN SIE DIE FEHLER KENNEN, die sind:

  • Wenn Sie eine nicht schreibgeschützte MyISAM-Tabelle und eine Abfrage haben, die länger als 100 us ist (sogar auswählt), sind Sie tot

Auf einer Seite, die ich repariert habe, hatte der Typ einen Doppel-Quad-Core-Server gemietet, weil "seine Seite die Leistung braucht". Ich schaue mir seine Seite an, ich schaue mir meine vorherige Seite mit> 100.000 Mitgliedern und einem Torrent-Tracker an, der auf einem Via C7 Micro-Half-Pizzabox-Server lief, und ich sage ihm, Ihre Seite läuft gut auf dem Celeron 300, der in meinem Keller steht , und das ist sogar übertrieben, ich kann es dir für die Hälfte des Preises deines Xeon vermieten, lol.

Es stellte sich heraus, dass der Typ ein guter Entwickler und ein wirklich netter Kerl war, aber er war ein schlechter MySQL, also hatte seine Website die typische Suchanfrage aus der Hölle, die jede Website töten kann:

  • 10 höllische Suchanfragen pro Sekunde (er hatte etwa 300.000 Mitglieder auf seiner illegalen Warez-Seite)
  • Suchanfrage aus der Hölle dauert ca. 0,1 - 0,2 Sekunden
  • ein kleiner Strom gleichzeitiger Aktualisierungen derselben MyISAM-Tabelle, um die Dinge aufzupeppen

=> vollständige Serialisierung (MyISAM-Schreibsperren) aller Abfragen. 1 Kern 100 %, 7 Kerne im Leerlauf, Loadavg> 1000 (ja, er benutzte Apache), Seitenzeiten> 30 Sekunden, das funktioniert.

Fix war einfach:Optimieren Sie die Suchanfrage aus der Hölle, Fixpunkt 2) unten, wechseln Sie zu InnoDB, wechseln Sie zu lighttpd. loadavg sank auf 0,02

2) AKTUALISIERUNGEN

Niemand interessiert sich für Seitenzähler. Geben Sie 1 UPDATE für jeden Seitenaufruf aus und Sie sind tot. Fügen Sie etwas MyISAM für mehr Effekte hinzu. Auch ein Killer auf InnoDB, nicht um Sperren, sondern um Sync-Disk-IO-Wartezeiten.

3) VOLLTEXT

  • MyISAM wegen Sperrung nicht für Read-Write-Tabellen verwendbar.
  • MyISAM ist so zuverlässig wie eine Ramdisk (tatsächlich weniger:Sie brauchen einen Betriebssystemabsturz, um eine Ramdisk zu beschädigen, das Beschädigen von MyISAM-Tabellen erfordert nur einen MySQL-Absturz oder wenn Sie es einfach zu oft gleichzeitig treffen, erhalten Sie eine "unbekannte Tabellen-Engine Fehler", habe ich oft gesehen)
  • FULLTEXT nicht verfügbar auf InnoDB
  • Jedes Einfügen in einen FULLTEXT-Index löst fast einen vollständigen Indexneuaufbau aus (als ich einen Forumsbeitrag eingefügt habe, wurden 400 MB Index neu aufgebaut)

==> Wenn Sie Volltextindizierung, Leistung und Zuverlässigkeit benötigen, verwenden Sie Sphinx oder Xapian.

Ich habe Sphinx nicht ausprobiert (die Leute sagen Gutes darüber), aber Xapian durchsucht 4 GB Text im Handumdrehen.

4) Leute benutzen Apache.

Dies lässt sich gut mit den obigen Punkten kombinieren.

Im Gegensatz zu einem richtigen Server wie lighttpd, dessen CPU-Auslastung nicht nachweisbar ist (der miese Via C7 lieferte 100 HTTP-Hits/s und lighttpd verbrauchte weniger als 1 % CPU), wird Apache Ihre Box töten.

Wenn MySQL zu sterben beginnt (es stirbt leicht), beginnen Clients, F5 hart zu drücken, und bald haben Sie etwa 1000 Apache-Prozesse, von denen jeder einen PHP-Interpreter enthält, und jeder PHP-Interpreter hält eine MySQL-Verbindung im Leerlauf und wartet auf eine MyISAM-Sperre. außer einem, der ein triviales UPDATE Ihres Seitenaufrufzählers durchführt, aber das dauert einige Zeit, weil der Server wegen der 1000 Apache- und 1000 PHP- und 1000 Mysql-Prozesse zum Mittagstisch wechseln muss.

Lighttpd verwendet keine CPU für statische Seiten. Die einzige Möglichkeit für lighttpd, Ihre CPU zu sättigen, besteht darin, apachebench mit etwa 20.000 Anfragen/s hart zu treffen. Dann spricht Lighttpd mit ein paar, wie 10 php-fcgi-Backends (2-4 pro Kern ist gut), die mit ein paar MySQL-Verbindungen kommunizieren. Infolgedessen ist alles viel schneller, und wenn es überlastet ist, wird es elegant abgebaut, nicht explosionsartig.

Um zur ursprünglichen Frage zu gelangen, möchten Sie auf jeden Fall Ihre SQL-Abfragen profilieren. Fügen Sie Ihrer PHP-Anwendung ein Abfrageprotokoll hinzu, das (nur für Sie) die Liste der Abfragen und die Zeit, die sie benötigen, sowie die Zeit vom Start des PHP-Skripts bis zu seinem Ende anzeigt (Header-/Footer-Includes sind ein guter Ort für dies).

Für eine komplexe Seite (ohne Suche) würden Sie ungefähr 3 ms MySQL und 3 ms PHP erwarten, das ist ein gutes Ziel. Sie brauchen natürlich einen Cache für kompilierten PHP-Code.


Für die aktuelle Last gibt es ein paar Dinge, die Sie tun können. Die teuersten, aber detailliertesten Antworten liefert eine Unternehmensanwendung wie „Gomez“.

Wenn Sie dies jedoch selbst tun möchten, sehen Sie sich meine vorherigen Antworten unten an oder verwenden Sie Shell-Dienstprogramme wie:htop, top, w und use Apache server-status

Vorherige Antworten vor der Überarbeitung der Frage:

Was Sie verlangen, wird manchmal als Anwendungsprofilerstellung bezeichnet.

Sie müssen eine grobe Speicherformel erstellen wie:

HTTPD-RAM + PHP-Speichernutzung + MySQL-Prozessnutzung =Gesamtanforderungsspeicherbedarf

Sie benötigen auch eine CPU-Formel, aber Sie können auch während eines Lasttests nach oben schauen.

Apache hat den Befehl 'ab'.

"ab ist ein Tool zum Benchmarking Ihres Apache Hypertext Transfer Protocol (HTTP)-Servers. Es soll Ihnen einen Eindruck davon vermitteln, wie Ihre aktuelle Apache-Installation funktioniert. Dies zeigt Ihnen insbesondere, wie viele Anfragen pro Sekunde Ihre Apache-Installation bedienen kann. " http://httpd.apache.org/docs/2.0/programs/ab.html

Hier ist eine generische 'ab'-Benchmark-Befehlszeile:

ab -n 10 -c 1 http://www.yoursite.com/
# qty 10 total requests, 1 request at a time

Die Strategie besteht darin, die Auslastung Ihrer Anwendung pro Prozess (Benutzer) von der Webseitenanforderung bis zum Abschluss zu testen. Wenn Sie feststellen können, wie viel RAM Apache, PHP und MySQL für jede Anfrage verwenden, können Sie Ihre Systemkapazität schnell ermitteln.

Sie müssen wahrscheinlich eine Mischung aus Diagnosetools wie vmstat oder top oder iostat oder ps usw. verwenden, um einen Schnappschuss davon zu machen, was eine Reihe von Anfragen von Ihrem System verlangen werden.

Schließlich möchten Sie Xdebug installieren. Dieses Tool hilft Ihnen, die PHP-Seite der Anwendung zu profilieren.http://xdebug.org/

Hier ist das Tutorial von IBM zur Installation von Xdebug:

http://www.ibm.com/developerworks/opensource/library/os-php-fastapps2/


Linux
  1. So installieren Sie LAMP Stack auf Ubuntu 22.04 LTS

  2. So installieren Sie Apache, MySQL, PHP (LAMP) unter CentOS/RHEL 7

  3. So installieren Sie Apache, MySQL, PHP (LAMP) unter Ubuntu 16.04 LTS

  4. So installieren Sie LAMP (Apache, MySQL, PHP) unter Debian 11

  5. So erhalten Sie MySQL/Apache/PHP-Versionen

So installieren Sie Apache, MySQL, PHP (LAMP) auf Fedora 21

So installieren Sie LAMP auf einem Ubuntu 15.04-Server

So installieren Sie LAMP unter Ubuntu 15.10 (Linux, Apache, MySQL und PHP)

So installieren Sie Apache, MySQL, PHP (LAMP) unter Arch Linux

So installieren Sie den Stapel Apache, MySQL, PHP (LAMP) unter Ubuntu 16.04

Wie man mit PHP eine Verbindung zu MySQL herstellt