RAM-Bedarf von Drupal
am 12.01.2010 - 08:30 Uhr in
Hallo,
ich habe ein memory_limit von 128 MB eingestellt und insg. 1024 MB zur Verfügung. Mein Webhost meint, mein Virtual Server hätte manchmal nur noch 20-40 MB frei. Mir ist bekannt, dass jeder PHP-Prozess 128 MB zur Verfügung hat. Rein rechnerisch müssten also 8 Prozesse laufen können, wenn nicht noch Prozesse der Dienste Apache, MySQL, Exim, SSH, Proftpd, Imap/POP3-Login, NTP-Client wären... Was löst eigentlich alles einen PHP-Prozess aus? Ist damit jeder einzelne Anfrage eines Besuchers gemeint? Bedeutet das also, dass ich für größere Besucherströme auch mehr Speicher benötige? Oder benötige ich mehr Speicher, wenn ich mehr Module laufen lasse?
Wie kann ich den Speicherbedarf abschätzen? Ist die Angabe meines Providers realistisch?
- Anmelden oder Registrieren um Kommentare zu schreiben
Aufgrund der Aussagen kann
am 12.01.2010 - 11:12 Uhr
Aufgrund der Aussagen kann man nur spekulieren, denn was genau ist gemeint mit "20-40 MB frei"? Es ist für einen Server ziemlich normal wenig RAM frei zu haben, weil alles was nicht von Anwendungen benutzt wird früher oder später für den Dateisystem-Cache genutzt wird. Kommen dann noch weitere RAM-Anfragen von Anwendungen werden die Buffer und Caches automatisch soweit möglich verringert. Erst wenn nichts mehr geht wird auf die Festplatte ausgelagert.
Das PHP Memory Limit ist lediglich eine Obergrenze und sagt nichts darüber aus, wieviel Speicher der Prozess wirklich beansprucht. Abschätzen oder gar berechnen kann man den RAM Bedarf einer komplexen PHP Anwendung nicht. Man kann ihn bestenfalls für die eigene individuelle Kombination aus Anwendung (mit Theming, div. Modulen und Einstellungen) und Serverumgebung für einen bestimmten Aufruf messen.
PHP wird naheliegenderweise nur ausgeführt, wenn ein PHP-Skript aufgerufen wird. Die Anfrage eines Stylesheets oder eines Bildes ist da also außen vor. Lediglich entsteht ein gewisser Overhead in der Form, dass bei ganz gewöhnlichen und üblichen Serverkonfigurationen der Webserver natürlich dennoch das PHP-Modul mitläd. Dieses braucht aber bezogen auf das PHP Memory Limit dann keinen Speicher.
--
mortendk: everytime you use contemplate... Thor is striking down from above with his mighty hammer - crushing and killing a kitten!
webseiter.de
hi macjack Zitat: Was löst
am 13.01.2010 - 00:03 Uhr
hi macjack
Was löst eigentlich alles einen PHP-Prozess aus?
Ist damit jeder einzelne Anfrage eines Besuchers gemeint?
ja, und noch viel mehr:
->alle includes
->bildberechung /thumbs
->callbacks (also die ganzen hooks bei drupal)
->bilder upload
->offene dateien logs schreiben
->sessions
und und und
Bedeutet das also, dass ich für größere Besucherströme auch mehr Speicher benötige?
yep und prozessorleistung
aber es ist auch nicht nur PHP das Resourcen frisst.
Auch der Apache selbst, insbesonder das mod_rewrite ist hungrig
(für clean URL), bzw auch das parsen der .htaccess, das ja auch bei jeden request
abgearbeitet werden muss.
Dann der MySQL Server:
->wieviele konkurierende Querys werden ausgeführt
->wieviel Resourcen hat der MySQL Abfragen Cache bzw wie ist der konfiguriert
>lock table
etc
besten gruss
Stefan
Vielen Dank für Eure beiden
am 13.01.2010 - 00:44 Uhr
Vielen Dank für Eure beiden Antworten. Sie bringen schon mal ein wenig Licht in das Dunkel. Ich habe im Vorfeld meiner Frage hier im Forum schon mind. eine Stunde recherchiert und zu diesem Thema nicht viel gefunden. Es scheint so, als ob diese Bereich noch ein wenig "Geheimwissenschaft" ist und die wenigsten Webmaster so tief in die Materie einsteigen. Ich suche eigentlich nach einer Möglichkeit, die Anforderungen an einen Server auszurechnen für bestimmte Besucherströme (50T, 100T oder 500T Besucher am Tag). Oder kann ich das messen? Leider konnte ich dazu nichts finden.
Ich gehe davon aus, dass das möglich ist. Firmen wie eBay oder amazon werden ihre Server sicher nicht auf Verdacht ausstatten. Wie könnte man vorgehen oder wo finde ich mehr Informationen darüber?
Statistik Modul
am 13.01.2010 - 02:10 Uhr
Du könntest einfach mal das Statistik Modul anschalten. Das sammelt, wenn ich mich recht entsinne Speicherbedarf pro URL. Aber wenn du das wirklich wissen willst, dann brauchst du schon so etwas wie den Zend Server oder ein XDebug Profil.
Das ist aber alles relativ, da das Caching noch dazwischen liegt und das wird es ermöglichen mit viel weniger RAM aus zu kommen.
Vielleicht mal den Apache mit deinem System unter Last setzen mit dem ab Script.
Das ist kein Geheimwissen, aber meist nicht so genau zu erfassen und schlecht zu berechnen. Und Ebay oder Amazon skalieren auch ganz anders, als das du da wirklich mit Leistung / User Rechnen würdest. Das sind Farmen von Rechnern, auf die sich das verteilt.
---
Viele Grüße,
Kars-T
| comm-press
Nun, Firmen wie eBay und
am 13.01.2010 - 03:49 Uhr
Nun, Firmen wie eBay und Amazon sind zum einen nicht plötzlich vom Himmel gefallen und sind zum anderen ganz anders ausgestattet. D.h. zum einen, dass sie lange Zeit viel Erfahrung mit ihren eigenen Anwendungen und der eigenen Infrastruktur sammeln konnten, zum anderen haben sie ganze Teams, die ihre Anwendungen / Änderungen an diesen vor dem Rollout auch in Bezug auf Sicherheit und Performance / Skalierbarkeit durchtesten.
Was es nicht gibt ist eine Rechenformel, die dir sagt unter welchen Umständen du welches Setup brauchst. Dafür enthält die Gleichung viel zu viele Variablen. Wenn wir von Drupal sprechen, handelt es sich am Ende immer um eine kundenspezifische Anwendung. Zwei unterschiedliche Drupal-Anwendungen können selbst bei Verwendung derselben Module recht unterschiedlich agieren, weil aus dem Basissystem und den Modulen allein nicht hervorgeht, wie das System intern aufgebaut ist und wer wie auf diese Inhalte zugreift.
Wenn man eine bestehende Anwendung (Drupal oder nicht) erweitert oder umstellt, hat man schonmal eine Datenbasis über Besucherströme und deren Verhalten. Diese kann man nutzen, um gezielter zu testen und zu optimieren. Hier gehen Variablen mit ein wie die Anzahl abgerufener Seiten in Spitzenzeiten und das Verhältnis von anonymen Zugriffen zu jenen, die durch eingeloggte User ausgelöst werden.
Für neue Anwendungen ist es schwieriger, weil man keine solchen Erfahrungswerte hat. Man muss sich dann schlichtweg hinsetzen und schätzen und das komplette Paket auf diese Schätzung hin ausrichten. Dabei braucht es auch immer ein paar Zusatzpläne, wie vorzugehen ist, wenn sich die Verhältnisse auf bestimmte Art und Weise ändern. Diese Pläne gilt es dann auch schon mit zu berücksichtigen, um im Fall der Fälle mit möglichst wenig Aufwand und Ausfallzeit die notwendigen Erweiterungen unterzubringen.
Zusätzlich kann und sollte man während der Entwicklung und in der Beta-Phase in Ruhe Daten sammeln (Profiling) und diese adäquat verwerten.
In der Regel geht man ja nicht heute online und einen Tag später plagt man sich mit Millionen von Usern und deren Zugriffen herum. In den wenigen Ausnahmen wo man vor solch einem Szenario steht, hat man aber auch die Ressourcen (Geld, Know-How) im Team, sich darüber Gedanken zu machen.
Grundsätzlich gibt es eine Reihe Vielzahl von Schrauben an denen man drehen kann und oft steht man vor der Qual der Wahl. Nehme ich ein bestimmtes Modul oder ein anderes, nehme ich diesen Service oder jenen, nehme ich diesen Server oder jenen, usw. usf. Um diese Entscheidungen nicht durch ein Horoskop entscheiden zu lassen, braucht es eine adäquate Datenbasis. Diese erhält man im Betrieb wie auch beim Benchmarken über ein gutes Monitoring. Ohne gutes Monitoring schaut man immer nur von draußen aufs Gesamtbild, weiß aber nicht was in den einzelnen Diensten des Servers / der Server geschieht und kann diese nicht gezielt tunen.
Dann braucht es wie gesagt ein paar Hintergrundinfos / Schätzungen über das Zugriffsverhalten der User und so schafft man sich, mit einem weiteren Auge auf das verfügbare Budget schauend, eine ganz gute Basis auf der man technische Entscheidungen treffen kann. Das kann Module betreffen, Modul- / Drupal-Einstellungen, Services auf dem System, Konfigurationsparameter der Services, die richtige Serverwahl und ggf. die Aufteilung der Dienste auf diese Server, usw. usf.
Fragen, die du dir stellen musst und die direkt Einfluss haben, sind z.B.:
- Welches Budget habe ich zur Verfügung? (Domains, Server, Bandbreite, Speicher, Dienstleister)
- Wieviele Seitenaufrufe wird es anfangs max. pro Stunde (besser: Minute) geben?
- Wieviele Seitenaufrufe soll das System später max. pro Stunde (besser: Minute) verarbeiten können?
- Wie ist das Verhältnis zwischen anonymen und authentifizierten Zugriffen?
- Wieviel Ausfallzeit kann ich pro Jahr verkraften?
- Wieviel Ausfallzeit kann ich am Stück verkraften?
- In welcher Zeit sollen die Schlüsselseiten (Startseite, ÜBersichten, Landing Pages) erzeugt / geladen sein?
- Wieviel Speicherplatz benötige ich?
- Wie wird sich der Speicherplatzbedarf entwickeln?
- Wieviel Bandbreite benötige ich?
- Wie wird sich der Bandbreitenbedarf entwickeln?
- Wie verteilen sich meine User / habe ich Zugriffe aus verschiedenen Ländern / Kontinenten und wenn ja, wie teilen sie sich auf?
Das alles zusammen kann man dann nutzen und ein technisches Konzept erstellen. Dazu brauchst du am besten jemanden der "Drupal Performance" im Ganzen kennt. Das geht vom Browser, übers Theming, Modulauswahl und Einstellungen in Drupal über die Auswahl des richtigen Services und deren ganz spezifischen Konfigurationen, Systemparamter, etc. bis hin in den Hardware-/Networking-Bereich.
Stichworte:
Boost, Cacherouter, Pressflow, Varnish, Munin, Developer Modul, APC, Memcache, Apache, Nginx, ....
Ein guter Anlaufpunkt ist sicher die High Performance Group auf g.d.o (groups.drupal.org):
http://groups.drupal.org/high-performance
Das Korrekturlesen spare ich mir mal. Ist schon spät.. ;)
--
mortendk: everytime you use contemplate... Thor is striking down from above with his mighty hammer - crushing and killing a kitten!
webseiter.de
Hallo Kars-T und
am 13.01.2010 - 06:16 Uhr
Hallo Kars-T und Alexander,
noch einmal Danke für Eure Beiträge. Gerade der Beitrag von Alexander wird mir sehr weiterhelfen und bietet eine ganze Reihe von Pfaden, auf denen ich weiter gehen kann.
Die High Performance Group ist nach einem ersten Klick auf den Link sehr spannend für mich...
Alexander, Du hast wirklich spät noch einen tollen Artikel verfasst. Jetzt ist es früh und ich muss mich kurz fassen. Aber sei sicher, Eure Artikel werde ich noch einmal gründlich lesen.
Was du mal machen könntest,
am 13.01.2010 - 10:11 Uhr
Was du mal machen könntest, als Tipp: Du könntest mal wegen Leistungswerten bei der Seite tentonhammer.com anfragen. Die Seite läuft auf Drupal, hat mittlerweile knappe 80.000 Nodes und einiges an Modules. Die Seite gehört zu unserem Netzverband, wenn du also keine direkte Antwort bekommst dann melde dich noch mal, dann kann ich auch fragen.
Visitis haben wir dort monatlich knappe 15 Millionen und Page Impressions gute 250 Millionen (Stand Dezember). Laufen tut das Ganze auf 6 Servern. Ich selbst baue gerade eine weitere Seite in dieser Form für den deutschsprachigen Raum auf und dort laufen zur Zeit gute 40-50 Module, allerdings auf einem Server mit 4GB RAM und 2 Quadcore Xeons. Das Ganze startet Ende Januar, Mitte Februar, dann kann ich dort auch gern mal unsere Serveradmins ansprechen wie die generelle Belastung aussieht.
Ich habe auch gute Kontakte zu BioWare, deren Seite für swtor.com ja im Backend auf Drupalbasis läuft und im Frontend grundsätzlich auf Flash basiert. Dort kann ich auch mal nach Werten fragen.
Nur falls es dich interessiert.
Hallo, dass sind ja sehr
am 01.03.2010 - 14:08 Uhr
Hallo,
dass sind ja sehr interessante Beiträge. Vielen Dank an alle.
@Genesis: Mich interessieren die Zahlen SEHR. Denn leider findet man im Internet so gut wie keine Referenzwerte/ungefähre Zahlen.
Würd mich freuen wenn du die postest.
Viele Grüße Phil
Spannendes Thema! Mal eine
am 01.03.2010 - 22:02 Uhr
Spannendes Thema!
Mal eine Frage als Server-Laie!
Wenn ein Projekt so trafficstark wird, dass man mehrere Server einsetzen muss - wie läuft so etwas ab?
Wenn die Last z.B. auf 4 Server aufgeteilt werden muss, läuft dann auf jedem Server die selbe Drupal-Installation mit allen benötigten Modulen - ist die Datenbank dann auch 4 mal vorhanden und wird laufend abgeglichen? Oder ist die Datenbank nur auf einem Server vorhanden?
Wie wird der Traffic dann aufgeteilt? Mit Load-Balance oder wie funktioniert so etwas?
Wie ist das mit den Kosten? Muss man dann den Serverpreis einfach mal 4 nehmen oder benötigt man zum Betrieb von mehreren Server spezielle Software die noch extra Kosten verursacht?
Vielen Dank schonmal!
Gruß Matthias
Noob-Anfänger schrieb Wenn
am 02.03.2010 - 11:40 Uhr
Wenn ein Projekt so trafficstark wird, dass man mehrere Server einsetzen muss - wie läuft so etwas ab?
Wenn die Last z.B. auf 4 Server aufgeteilt werden muss, läuft dann auf jedem Server die selbe Drupal-Installation mit allen benötigten Modulen - ist die Datenbank dann auch 4 mal vorhanden und wird laufend abgeglichen? Oder ist die Datenbank nur auf einem Server vorhanden?
Wie wird der Traffic dann aufgeteilt? Mit Load-Balance oder wie funktioniert so etwas?
Der erste Schritt ist dann die Datenbank auf einen eigenen Server zu packen. Durch die Trennung der Systeme für Datenbank und Webserver kann man beide gezielter auf die durch die Anwendungn und die User verursachte individuelle Last optimieren.
Über Caching-Mechanismen (APC, Memcache) in Verbindung mit den passenden Modulen kann man dann Last auf den DB-Server herunterfahren und somit Skalierbarkeit und Performance verbessern.
Im Frontend-Bereich kann man die Last des Webservers (i.d.R. ein Apache) über den Einsatz eines Reverse Proxys wie Squid oder Varnish minimieren und damit ebenso Skalierbarkeit und Performance verbessern. Dazu braucht es dann aber ein gepatchtes Drupal, oder man benutzt gleich Pressflow.
Als nächstes würden zusätzliche Web-Server kommen. Zwischen denen muss das File-System synchronisiert werden, etwa durch rsync, spezielle verteilte Dateisysteme, oder oder oder.. Angesteuert würden diese über einen Load-Balancer. Als solcher kann ein Server funktionieren, es kann aber auch eine Extra-Hardware sein.
Wird es noch anspruchsvoller werden den Proxys und Webserver auf eigene Maschinen gesetzt, werden die Load-Balancer redundant ausgelegt, gibt es wenigstens einen Datenbank-Slave, ggf. zusätzlich Master-Master-Replikation und DB-Load-Balancing, Auslagerung von Inhalten auf ein Content Delivery Network, usw. usf.
Wie ist das mit den Kosten? Muss man dann den Serverpreis einfach mal 4 nehmen oder benötigt man zum Betrieb von mehreren Server spezielle Software die noch extra Kosten verursacht?
Man kann komplett mit Open Source Software, also ohne Lizenzkosten auskommen. Die Server bekommt man natürlich nicht geschenkt. Es reicht dann häufig aber auch nicht bei Grabbeltischhoster ABC vier Server zu bestellen, die womöglich an unterschiedlichen Ecken eines Rechenzentrums oder gar in unterschiedlichen Rechenzentren stecken. Es braucht zusätzlich auch eine Backup-Strategie, Ausfall-Sicherheit, usw. Du hast erhöhte Personalkoten für Planung und Wartung ud vergleichst Anbieter natürlich sehr viel gezielter, weil es nicht mehr nur um Preisunterschiede im Bereich von wenigen zehn Euro im Monat geht...
Hallo Alexander, vielen Dank
am 02.03.2010 - 12:33 Uhr
Hallo Alexander,
vielen Dank für die ausführliche Erklärung ;-)
Ich hoffe, dass mein Projekt eines Tages so trafficstark wird, dass ich mehrere Server einsetzen muss - dann kann ich meinem Serveranbieter schon halbwegs erklären was ich genau brauche !
Besten Dank und schönen Tag noch!
Gruß Matthias
Das wird dir in der Regel
am 02.03.2010 - 17:18 Uhr
Das wird dir in der Regel nicht viel helfen. Die Leute stellen lediglich Server bereit, keine Beratung oder tatkräftige Umsetzung von Konzepten, in die auch noch Kundenanwendungen zu integrieren sind. Dazu brauchst du entsprechende Berater / Admins, die idealerweise von Drupal Peilung haben.
andere methode: die
am 04.03.2010 - 18:58 Uhr
andere methode: die wolke:
auf einen fetten db server die drupal db legen, dann ein lastverteiler vor sich nach usage hochfahrende amazon ec2 instanzen zu stellen, dort memcache einsetzen, suche mit solr machen, und mit ein paar patches noch ein bisschen mehr in den ram auslagern. man kann drupal installationen auch ohne größere probleme auf quasi unlimited servernd betreiben.
würde mich auch mal auf ein dvc zum thema drupal skalierbar machen.