Serverüberlastung vServer

ChrischiK

Member
Hallo,

ich habe in den letzten Tagen öfter mit Überlastungen meines Servers zu kämpfen und bin daher am überlegen, ob sich für mich ein Serverumzug lohnt.

Ich überlege von einem virtuellen Server mit 1GHz und 512MB auf einen virtuellen Server mit 8GHz und 2.560 MB umzusteigen. (Neuer Server: https://www.server4you.de/de/vserver...php?products=3)

Auf meinen Seiten wird vorwiegend mit multi-cURL auf API's zugegriffen. Da die API's realtiv lange Response-Zeiten haben, benötigen meine Scripte auch ziemlich lange.

Ist die Annahme richtig, dass das Problem mit der Überlastung erst einmal vom Tisch ist, wenn ich auf einen Server mit höherer Leistung wechsele?

Ich habe nämlich irgendwie den Hintergedanken, dass ein Rechner (egal wie schnell) ohnehin nur einen Prozess gleichzeitig durchführen kann. Da die Dauer meiner Scripte ja wenig von der Prozessorleistung, sondern eher von den Response-Zeiten der API's abhängt, könnte es ja passieren, dass auch der neue Server weiterhin überlastet wird...

Welche der beiden Annahmen ist richtig?


Anders formuliert könnte man auch folgende Fragen stellen:

Angenommen ein Script habe eine konstante Laufzeit: Kann dann ein Server mit höherer Leistung mehrere Prozesse gleichzeitig durchführen und somit die Performance erhöhen? Oder benötige ich mehrere Prozessoren für eine Leistungsverbesserung?


Grüße,

ChrischiK
 
Zu allererst mal:
Was für ein vServer soll das sein, der 8 GHz taktet und über 2,5 GByte RAM verfügt?

Des weiteren: Was für ein Server soll das sein, der mit 8 GHz rechnet? Du kannst nicht einfach die MHz der einzelnen Kerne aufaddieren.

Nichts desto trotz: Da du von "8 GHz" redest, wird das Gerät wohl mehrere Prozessoren/Kerne haben, ergo können mehrere Prozesse parallel (nicht nur "quasi parallel", sondern RICHTIG parallel) abgearbeitet werden.

Blöde Frage: War der alte Server wirklich überlastet, oder hatte der einfach nur ewig lange Response-Zeiten?
 
Wieviele Kerne der hat dürfte nicht so wichtig sein, eher wieviel Rechenleistung du bekommst ... Die Anzahl der Kerne sagt darüber nämlich garnichts aus.

Stellt Server4You nicht auch Testserver zur Verfügung? Teste doch einmal einen dann weisst du ja ob die Leistung reicht.
 
Für die Parallelbearbeitung dürfte es doch aber eher unwichtig sein, wieviel Rechenpower er bekommt, oder etwa nicht?

Wenn er von jedem Kern 10% bekommt, kann er ja in seiner Ausgangslage (wenn ichs richtig verstanden habe) trotzdem mehr damit anfangen, als mit 50% von einem Kern.
 
loool, da steh wirklich 8.000 MHz im Angebot.
Hätte jetzt auch gedacht dass ChrischiK da addiert hat. Das ist ja mal toll :D
 
Last edited by a moderator:
Ich habe nämlich irgendwie den Hintergedanken, dass ein Rechner (egal wie schnell) ohnehin nur einen Prozess gleichzeitig durchführen kann.
Stimmt so nicht direkt.
Das Betriebssystem kann mehrere Prozesse gleichzeitig ausführen, auch auf einem Unicore-Prozessor. Jeder Prozess wird dabei zu einem Stück abgearbeitet, beiseite gelegt und der nächste wird ein Stück abgearbeitet - nennt sich "Präemptives Multitasking".
Lediglich die Anzahl der gleichzeitigen Prozesse wird begrenzt, aber weniger durch die Rechenleistung als durch das Host-System.
 
Ach je,...

Ok nun noch einmal die finale Frage:

Kann ich durch einen Umzug auf den neuen Server die Performance meiner spürbar Seite verbessern?

Das ist mein aktuelles Hostsystem:
CPU(s):
Intel(R) Xeon(TM) CPU 3.20GHz
Intel(R) Xeon(TM) CPU 3.20GHz
RAM:
11.70 GB



(Sorry ich bin noch ziemlich Newbie und blick bei dem Ganzen gerade nicht so durch):(
 
Last edited by a moderator:
Stimmt so nicht direkt.
Das Betriebssystem kann mehrere Prozesse gleichzeitig ausführen, auch auf einem Unicore-Prozessor. Jeder Prozess wird dabei zu einem Stück abgearbeitet, beiseite gelegt und der nächste wird ein Stück abgearbeitet - nennt sich "Präemptives Multitasking".
Lediglich die Anzahl der gleichzeitigen Prozesse wird begrenzt, aber weniger durch die Rechenleistung als durch das Host-System.

Das was du da erzählst stimmt nicht, du kannst mit einem Kern nicht mehrere Sachen Parallel ausführen.
Ich glaube, da gab es mal was bei Intel, wo die CPU gleichzeitig irgendwie addieren und multiplizieren konnte, weil die 2 getrennte Recheneinheiten für Multiplikation und Addition integriert hatte.

Aber Fakt ist: In einem Taktzyklus kann eine CPU nur einen Befehl abarbeiten. Für alles andere braucht es mehrere Rechenkerne.

@Threadersteller:
Wenn du wissen willst, ob deine Seite schneller läuft, dann schaue, wie deine Systemauslastung ist.
Wenn du kaum mehr Ressourcen frei hast, dann wird logischerweise ein besseres System schneller sein.

Wobei ich das ehrlich gesagt bei dem S4Y-System ein wenig bezweifele, zumal du da nur ein paar Mhz mehr hast, dafür aber knapp 1/5 vom RAM nur zur Verfügung stehen.
Ich weiß leider nicht, wie sich deine API Anfragen und cURL am System auswirken und bemerkbar machen - aber wie gesagt, einfach mal checken wie es um die Systemauslastung bestellt ist.
 
Hi,

ihr seht das ganze etwas zu einfach ;-) Die Parallelarchitekturen haben sich in den vergangen Jahrzehnten deutlich weiterentwickelt. Die Faustregel eine Instruktion pro Zyklus gilt schon lange nicht mehr. Es kamen Techniken wie Pipelining, Superskalarität, etc. All diese Techniken bringen Parallelität in die CPU. Allerdings immer bezogen auf die Instruktionen von einem Prozess!!! Mehrere Prozesse parallel abzuarbeiten, funktioniert nur bei getrennten Registersätzen, d.h. in der Regel nur bei Multicoresystemen oder Technologien wie Hyperthreading.

Ansonsten muss bei jedem Unicore-System ein Kontextwechsel stattfinden, d.h. die Inhalte in den Registern müssen ausgetauscht werden, damit der Core sowohl auf den Daten als auch auf den Instruktionen eines zweiten Prozesses arbeitet. (Kontextwechsel sind in der Regel langsam, weil die Daten aus dem Speicher geholt werden müssen)

Ich glaube, da gab es mal was bei Intel, wo die CPU gleichzeitig irgendwie addieren und multiplizieren konnte, weil die 2 getrennte Recheneinheiten für Multiplikation und Addition integriert hatte.

Das macht mittlerweile jeder moderne Prozessor. Bei Superskalararchitekturen werden Instruktionen in einer Reservation Station(s) abgelegt und abgearbeitet, wenn keine Abhängigkeiten zu vorherigen Instruktionen bestehen und entsprechende Units (Memory, Arithmetic, etc) verfügbar sind. Stichwort: Tomasulo-Algorithmus.

Was du meinst, ist vermutlich Hyperthreading. Dort gibt es nicht nur mehere Recheneinheiten (wie bei Superskalarrechner auch), sondern getrennte Registersätze.

Fazit: Anhand der MHz kann man die Performance nicht wirklich abschätzen. Klar, eine 100 Mhz Gurke ist langsamer als 2 GHz Xeon, aber alleine schon der Vergleich zwischen den GHz-Zahlen von Pentium 4 und AMD Athlon, zeigt, dass man auch bei deutlich geringerer Taktrate eine hohe Performance erreicht. Aus diesem Grund sollte man sich vor dem Kauf einer CPU immer Benchmarks angucken und sich nicht von der Taktrate blenden lassen. Neben der Taktrate spielen Pipelinestufen, L1-/L2-Cache, usw. eine oft viel entscheidendere Rolle.


Wie S4Y ihre 8000 Mhz berechnet, würde mich aber auch mal interessieren :)

Dennis
 
Wenn ich das Pipelining richtig verstanden habe, ist das trotzdem keine Parallelverarbeitung von Daten - die CPU verarbeitet trotzdem nur einen Befehl/Takt. Das einzige, was Pipelining macht ist schlussendlich die Befehle selbst so zu unterteilen, dass mehrere Befehle entsprechend immer in kleinen Stückchen immer und immer wieder nacheinander abgearbeitet werden.

Eine CPU verarbeitet meines Wissens nach trotzdem nur Pro Takt einen Befehl - mehr geht auch gar nicht.

Zur Sache mit der Superskalarität, da steck ich nicht drin, aber wenn ich den entsprechenden Wikipedia-Artikel lese, dann klingt die Definition von Superskalarität trotzdem nur nach einer parallelverarbeitung, wenn die Hardware dafür vorhanden ist.

Unter Superskalarität versteht man die Eigenschaft eines Prozessors, mehrere Befehle aus einem Befehlsstrom gleichzeitig mit mehreren parallel arbeitenden Funktionseinheiten zu verarbeiten.
Parallel arbeitende Funktionseinheiten ... nun mag man erstmal klarstellen müssen, was diese Funktionseinheiten sind - ich tippe hier auf Hardware selbst (Registersätze, Cache usw.).

Tomasulo-Algorithmus
Ist doch ein einfach nur ein Algorithmus zur "Berechnung" des Scheduling, oder etwa nicht?
Dass der natürlich Anforderungen an die Hardware stellt mag unbestritten sein, aber der Algorithmus selbst hat nun nichts mit der Parallelverarbeitungsfähigkeit aktueller CPUs zu tun - das macht einzig und allein die Hardware.
 
Hi,

Wenn ich das Pipelining richtig verstanden habe, ist das trotzdem keine Parallelverarbeitung von Daten - die CPU verarbeitet trotzdem nur einen Befehl/Takt. Das einzige, was Pipelining macht ist schlussendlich die Befehle selbst so zu unterteilen, dass mehrere Befehle entsprechend immer in kleinen Stückchen immer und immer wieder nacheinander abgearbeitet werden.

Das ist eine Glaubensfrage ab wann Parallelität anfängt. De facto werden x Instruktionen parallel ausgeführt. Während die Addition in Instruktion 1 bereits zurück in den Speicher (Cache) geschrieben wird, kann die ALU bereits die Subtraktion in Instruktion 2 vornehmen und die Multiplikation dekodieren. Dass am Ende pro Takt (maximal!) ein Befehl aus der Pipeline kommt, ist nicht unbedingt wahr, da aufgrund unterschiedlicher Bearbeitungsgeschwindigkeiten der einzelnen Einheiten auch mehrere in einem Burst kommen könnten. Das ist dann aber auch Implementierungsabhängig, ob man am Ende einen Bus hat oder eine Direktverdrahtung.

Ausserdem spielt es auch keine Rolle, da es sich - wie bereits gesagt - um Parallelität bei den Instruktionen EINES Prozesses handelt.

Eine CPU verarbeitet meines Wissens nach trotzdem nur Pro Takt einen Befehl - mehr geht auch gar nicht.

Kann man imho so nicht pauschalisieren. Das würde ja bedeuten, dass die Performance linear mit der Taktrate skaliert (Delays zum Speicher aussenvorgelassen). Allein schon die Existenz von Cycles per Instruction (CPI) -Werten, weißt drauf hin, dass es nicht immer so ist ;-)

Zur Sache mit der Superskalarität, da steck ich nicht drin, aber wenn ich den entsprechenden Wikipedia-Artikel lese, dann klingt die Definition von Superskalarität trotzdem nur nach einer parallelverarbeitung, wenn die Hardware dafür vorhanden ist.

Ja, aber alle neuen Prozessoren machen das so. In dem Wikipedia Artikel AMD K8 ? Wikipedia ist z.B. ein ganz gutes Schaltbild, was das prinzip verdeutlich.


Parallel arbeitende Funktionseinheiten ... nun mag man erstmal klarstellen müssen, was diese Funktionseinheiten sind - ich tippe hier auf Hardware selbst (Registersätze, Cache usw.).

Functional Units sind die "Arbeitstiere", d.h. Artihmetische Einheiten zur Berechnung (Integer, Floating Point), Branch-Condition-Auswertungen, Einheiten für Speicherzugriff. Die Register sind damit nicht gemeint.


Ist doch ein einfach nur ein Algorithmus zur "Berechnung" des Scheduling, oder etwa nicht?


Naja. In seinem Paper (oder PhD-Thesis?) hat Tomasulo auch die Hardwarestruktur vorgestellt. Man muss den Algorithmus im Kontext sehen. Ohne Tomasulo-Algorithmus wären mehrere Functionl-Units sinnlos, aber ohne mehrere Functional Units, bringt der Tomasulo auch keinen Vorteil :)



Aber die ganzen Grundlagen haben auch rein gar nichts mit dem Problem hier im Thread zu tun. Die Performance von Systemen kann man nur mit Benchmarks vergleichen. Analytisch kann man kaum herausfinden, was das "schnellere" System ist. Zumal das auch noch abhängig von dem Anwendungszweck ist...
 
Hallo,

danke für eure sehr detaillierten Antworten... Ich muss gestehen, ich bin nicht immer ganz mitgekommen.

Ich habe jetzt mal den Umzug durchgeführt und bisher hat sich kaum etwas verbessert.

Das interessante ist, dass ich trotz zugesicherter 8 GHz noch immer auf einem Mainframe mit 2x3,2GHz sitze. :confused:

Ich glaub ich werd bei S4Y mal anrufen und fragen ob ich auf ein anderes Mainframe umziehen kann.

Ich halte euch auf dem Laufenden.
 
Hi,

rein rechnerisch kämst du schon auf die 8 GHz, weil die Xeons auch mit mehr Kernen ausgestattet sind. Aber ich glaub nicht wirklich, dass dir 8 GHz zur Verfügung stehen.

Falls du anrufst, gib mal Bescheid, wie sich die 8000 MHz berechne. Würde mich auch interessieren..


Dennis


PS: Hast du eigentlich mal versucht zu analysieren, was genau der Engpass ist?
 
Last edited by a moderator:
Hallo,

also ich habe jetzt einmal dort angerufen. Man hat mir gesagt, dass mehrere Kerne hinzugeschalten wurden und dass das Upgrade sehr wohl eine Leistungssteigerung gebracht hat. Das Problem ist, dass die Steigerung offensichtlich noch nicht ausreicht.

Jetzt wollen Sie mir einen RootServer andrehen... Ich bin da noch ein bissl ratlos. Kann doch nicht sein, dass mir bei circa einem Seitenaufruf pro Sekunde schon der Server um die Ohren fliegt.:confused:

Mal eine andere Sache: Es wurde mir auch empfohlen mit Python statt mit PHP zu arbeiten, das Python besser für parallele Prozesse geeignet ist. Was haltet ihr davon?

Grüße,

ChrischiK
 
Ich glaube du hast einfach ein Problem mit deiner MySQL Konfiguration sowie deiner PHP/Apache Konfigurtion. Vielleicht solltest du hier mal suchen anstatt einfach einen riesen Server zu mieten der das wett macht.
 
Ich glaube immer noch das einfach der Response lange dauert und es nicht an deinem System liegt sondern an ein paar deiner Seiten wo du mit cURL zugreifst
 
Gib mal paar Informationen, ob tatsächlich die Ressourcen das Problem sind:

Code:
free -m

cat /proc/user_beancounters

top

Bei top wäre es interessant, was bei load average steht (Ob überhaupt Prozesse dauer belastet sind)


Könntest auch mal beschreiben, bei welcher Aktion, dich die Performance stört :-)


Dennis
 
Ich sage mal so:
Woher weiss der Support, ob da eine Leistungssteigerung da ist, oder nicht? Nur, weil du bessere Hardware hast?

Es muss nicht sein, dass die Hardware zu schwach ist, vlt. ist einfach dein Script auch irgendwo "kacke", deine Einstellungen falsch o.ä. - man weiß es nicht.

Deshalb wurdest du ja schon mehrfach aufgefordert, nachzuchecken wie es um den Ressourcenverbrauch deines Systems bestellt ist!
 
also ich habe jetzt mal das mit "top" gemacht.

average werte sind: 0.14, 0.08, 0.01

Das bedeutet wohl, dass die durchschnittliche CPU-Auslastung relativ gering ist.

Allerdings springt die CPU Auslastung immer auf ca. 25% nach oben, wenn ein User (wwwrun) auf meine Seite zugreift. Der command lautet da "httpd2-prefork".

Manchmal habe ich auch von dem user "vscan" den command "clamd", der 99.9% CPU verbraucht. Was ist das?

Ich werde jetzt mal alle MySQL-Zugriffe deaktivieren. Mal schauen, ob es daran liegt.

P.s. Danke für eure Hilfe.
 
Last edited by a moderator:
Back
Top