PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : KVM vServer: Wie viel CPU darf ich verbrauchen?



yakyak
27.11.15, 18:01
Hallo Forum,

Ich habe momentan folgenden vServer

http://www2.pic-upload.de/img/28969618/vserver.png

Auf dem Server läuft meine SQL-Datenbank mit ein paar permanent laufenden PHP-Jobs, die ich parallel laufen lasse und so justiert habe, dass der CPU-Idle-Wert in top permanent zwischen 0.10 und 0.20 verbleibt, falls zusätzliche Aufgaben wie cron oder apache dazwischenkommen. MySQL hat CPU-Werte zwischen 50 % und 350 %, was auf einem Vierkernprozessor und durchschnittlich 4 parallel laufenden Jobs für mich Sinn ergibt.

Nach zwei Tagen Test- und Entwicklungsbetrieb erreichte mich folgende Nachricht von meinem Hoster:


Sehr geehrte/r (...),

wir haben festgestellt, das ihr VPS mit der IP-Adresse xxx.xxx.xxx.xxx seit einigen Tagen eine permanent Hohe CPU Auslastung
von 300 - 400% aufweist d.h. es werden permanent 3 - 4 CPU-Kerne zu 100% ausgelastet.

Wir möchten Sie bitten, die Prozesse auf ihrem vServer zu kontrollieren und die CPU Auslastung zu reduzieren.


Daraufhin habe ich ihm geantwortet:


Hallo (Herr/Frau...),

dafür habe ich auch einen VPS mit 4 vCores eingerichtet. Die Auslastung ist exakt austariert auf 75-80 % CPU und eine Load von 4. Sind die Werte, die ich in im System sehe nicht die meines virtuellen Servers? Der Hypervisor sollte die Last doch eigentlich automatisch fair auf alle Systeme aufteilen bzw. meine maximalen CPU-Zyklen limitieren. Ich verstehe das Problem nicht.

Falls ich einen Denkfehler gemacht habe informieren Sie mich bitte, dann bin ich gerne bereit, die Last zu reduzieren.


Die Antwort meines Hosters darauf ist zwar außerordentlich ausführlich (Lob dafür), aber inhaltlich für mich weder schlüssig noch zufriedenstellend:


Sie liegen hier leider nicht ganz richtig. Jeder vServer Tarif hat andere Werte, auch in der Verteilung der möglichen CPU-Nutzung. Der Hypervisor verteilt die CPU Leistung auf alle VPS nach der eingestellten Priorität.

Dazu ein einfaches Beispiel: Angenommen es gibt 4 vServer Tarife:
- VPS 1
- VPS 2
- VPS 3
- VPS 4

die Tarife erhalten dann unterschiedliche Prioritäten für CPU usw. als Beispiel:
- VPS 1 = CPU PRIO 1
- VPS 2 = CPU PRIO 2
- VPS 3 = CPU PRIO 3
- VPS 4 = CPU PRIO 4

Angenommen der Hostserver hat nur 4 CPU Kerne und Sie haben nun den Tarif "VPS 4" mit CPU PRIO 4 und belegen volle 3 - 4 Kerne zu 100% und das 24/7, so steigt die Load des gesamten Host durch die volle CPU Auslastung in extreme Höhen an.

Da Sie die CPU Priorität 4 haben, erhalten Sie bevorzugt die CPU Leistung gegenüber den anderen vServern auf dem Host. Kunden die im Tarif VPS 1, VPS 2 und VPS 3 sind haben die niedrigere CPU Priorität und haben so keine Chance etwas von der Leistung ab zu bekommen. Eine gleiche Verteilung würde hier nur stattfinden, wenn ein weitere Kunde im Tarife VPS 4 ist, so würde die Leistung zwischen diesen beiden aufgeteilt werden.

Eine Auslastung der CPU zu 100% bzw. von mehreren Kernen zu 100% ist generell soweit bei keinen Anbieter 24/7 Dauerhaft erlaubt, da es alle anderen Kunden auf dem selben Server einschränken würde.
Wenn Sie einen der Kerne ihres vServers zu 100% Auslasten, so nutzen Sie in diesem Moment auch einen ganzen Kern des Hostservers für sich alleine. Wenn eine CPU Auslastung zu 100% für einen gewisse Zeit Periode
Anhält, so stellt dies kein Problem da und durch die CPU Priorität soll ihr VPS diese Leistung dann auch bevorzugt in diesem Moment erhalten können. Jedoch eben nicht dauerhaft 24/7. Da in ihrem Fall entsprechend
ganze 3 - 4 Kerne zu 100% belegt werden, sind wir hier auf Sie zukommen mit der Bitte die CPU Last zu reduzieren. Wenn es z. B. nur 1 Kern gewesen wäre, der zwischen 50 - 100% ausgelastet wird, hätten wir uns
entsprechend noch nicht direkt gemeldet.


Jetzt zu meiner Frage:

Wer hat Recht?

Aus meiner Sicht ist es nur logisch, dass der Host (Hypervisor) auf 100 % CPU-Last geht, denn dafür ist die CPU gebaut und dafür wird sie vermietet, nicht zum idlen. Sobald ein anderer vServer ebenfalls Leistung benötigt sollte die von mir beanspruchte CPU-Leistung doch einfach auf das mir zustehende Minimum reduziert werden, sprich: Mein vServer sollte einfach langsamer werden.

Folge ich der Sicht meines Hosters, könnte ich ja niemals meinen vServer zufriedenstellend betreiben, da ich niemals wissen kann, wann eine Lastspitze den Hypervisor voll auslastet und andere Kunden darunter leiden. Genau das zu verhindern sollte doch Aufgabe des Hypervisors sein, nicht die des Hosters und schon gar nicht die des Kunden.

Ich habe zu diesem Thema heute viel gegoogled und bin auf diese Aussage eines anderen Hosters (https://forum.netcup.de/administration-eines-server-vserver/vserver-server-kvm-server/1614-cpu-auslastung/) gestoßen, die den Sachverhalt so ausdrückt, wie ich ihn bislang kannte und für schlüssig empfinde:


Die CPU-Ressourcen werden von allen geteilt.
Dabi hat jeder aber eine Mindestzuweisung, die er aber natürlich nur dann bekommt, wenn er sie braucht. Und diese Mindestzuweisung tritt auch nur dann in Kraft, wenn jeder das System voll ausreizt.

Da aber kaum jemand seine ihm zugewiesenen CPU-Ressourcen ausschöpft, wird geteilt. D.h., dass du zum jetzigen Zeitpunkt wahrscheinlich eine Leistung von ca. "14GHz" in Anspruch nehmen kannst, deutlich mehr als dir zugewiesen.
Und wenn du kaum CPU-Ressourcen brauchst, kriegt jemand anders deine bei Bedarf.
Nur, wenn jeder Bedarf hat, kriegt jeder seine ihm zugewiesenen Ressourcen. D.h., dass für dich bis zu deinem dir zugewiesenen Limit CPU-Ressourcen im Ernstfall freigemacht werden, du kannst aber mehr in Anspruch nehmen, wenn die keiner braucht.

-> Bingo. So kenne ich das.

Dazu würden mich Eure Meinungen interessieren.
Was soll ich meinem Hoster jetzt antworten?

fork
27.11.15, 18:19
Du kannst natürlich weiter so viel verbrauchen wie Du willst. Im Endeffekt kannst Du auch ggf. darauf beharren, dass Du Recht hast, was Du ggf. vor Gericht ausfechten müsstest. Du könntest Dir für den Anfang schon mal genau die AGBs Deines Hosters durchlesen.

Im Endeffekt läuft das Geschäft für Deinen Hoster nur, wenn es keine Leute gibt, die die Kapazitäten maximal ausreizen. Das wird dazu führen, dass sich Dein Hoster irgend etwas ausdenkt, damit es trotzdem noch funktioniert. Vielleicht schubst er Deine VM auf einen Host, auf dem eh nur die schlechtesten Kunden sind. Vielleicht schraubt er Dir die CPU-Priorität gnadenlos runter oder vielleicht kündigt er Dich. Wenn Du diese Schiene wählst, wäre ein regelmässiges Off-Site Backup empfehlenswert, sonst ist der Server irgendwann mal abgeschaltet und alles ist weg.

Das oben dargestellte Layout sagt mir jetzt nichts. Mit Sicherheit wird es wohl einer der grösseren - sehr durchoptimierten - Hoster sein. Falls dem so ist, wird er da mit Sicherheit wirksame Massnahmen für solche Fälle haben.


...permanent laufenden PHP-Jobs...

Ich als Admin und eher nicht so guter Programmierer habe mir auch schon mal vorhalten lassen müssen, wie schlecht lang laufende PHP-Scripte von mir performt haben und eine ganze VM in die Knie gezwungen haben. D. h. es kann durchaus auch in PHP begründet sein, da PHP jetzt eher die Fire-and-Forget Umgebung für kurze Requests ist und vielleicht nicht unbedingt das Mittel der Wahl für Daemons.

Im übrigen schreibst Du, dass der MySQL die Hauptlast verursachst. Da scheintst Du ja sehr exzessive DB-Operationen zu machen. Vielleicht sind Deine SQL-Abfragen auch sehr ineffizient und es gibt viele Optimierungsmöglichkeiten. Faktor 100 ist evtl. nicht unwahrscheinlich.

----

Beim V-Server ist die Wahrscheinlichkeit sehr hoch Unmut bei Deinem Provider zu erzeugen. Wenn Du einen dedizierten Server hast, dann ist es Deinem Provider egal. Den kannst Du so stark belasten wie Du willst - es betrifft keine anderen Kunden.

yakyak
27.11.15, 18:29
Ja ich betreibe eine ressourcenintensive Datenbank und habe mir auch dafür einen Server mit 4 vHosts und 200 GB Plattenplatz zugelegt, da darauf iterative Analysen durchgeführt werden. MySQL habe ich schon optimiert, z. B. den Indexspeicher auf 512 MB hochgeschraubt (es geht um die Größenordnung 1-10 Mio. Rows per Table). Insgesamt ist mir also eine gleichbleibende brauchbare Performance wichtiger als Höchstleistung, da das Arbeitspensum niemals weniger werden wird. Weiteroptimiert werden kann natürlich immer, z. B. sollte PHP7 nächste Woche einen Geschwindigkeitsboost von 100-200 % bringen (laut Announcement).

Kernfrage zum Topic:
(Warum) kann mir der Hoster keine feste Rechenleistung garantieren und den Server ggf. auf diese limitieren? (Beispielsweise 4x800 Mhz)?

yakyak
27.11.15, 18:31
Vielleicht schubst er Deine VM auf einen Host, auf dem eh nur die schlechtesten Kunden sind. Vielleicht schraubt er Dir die CPU-Priorität gnadenlos runter oder vielleicht kündigt er Dich.

Das Gegenteil will ich erreichen: Ich will nur eine vertraglich zugesicherte CPU-Leistung, die ich dann auch guten Gewissens nutzen kann, wie es bei anderen vServer-Anbietern (siehe oben verlinkt) auch möglich und üblich ist. Und keinen Stress mit meinem Hoster :)

fork
27.11.15, 18:36
Frage Doch Deinen Provider, ob er das für Dich limitieren kann(Dann ist die Performance aber weg und Du kannst Sie auch nicht mehr nutzen, wenn Du Sie mal gerne hättest).
Versuche den MySQL-Dienst oder andere Performancefresser runter zu regeln(Nur 1 Core, Weiss auch nicht, wie das geht), dass Du Deinem Hoster nicht zu sehr auf den Sack gehst.


----

Die Abschottung der VMs gegeneinander und die feste Zuweisung von CPU-Resourcen funktioniert in der Wirklichkeit nicht so 100%, wie man sich als Admin gerne wünscht.

marce
28.11.15, 19:22
In dem Bereich gilt: You get what you pay for.

Wenn Du zugesicherte Leistung willst - es gibt jede Menge Hoster, bei denen Du das bekommen kannst. Technisch gesehen kann das auch jeder Hoster, wenn er will. Normalerweise sind aber die Kalkulationen der Hoster darauf niicht ausgelegt. Meist ist das auch kein Problem.

Frag also den Hoster nach einem konkreten Angebot an - oder lies Dir die AGB / Vertrag nochmals genau durch. Im einfachsten Fall steht da drin, daß Dir die Leistung nicht auf Dauer zusteht - dann musst Du entweder den Vertrag oder den Hoster wechseln - oder es ergibt sich daraus, daß Du ein Anrrecht auf die Leistung hast. Dann muss der Hoster entweder liefern oder eben versuchen, Dich loszuwerden.

yakyak
29.11.15, 18:27
Konnte das per Mail mit meinem Hoster klären, alles wieder in Ordnung :)
Hab meinen Code noch optimiert, jetzt reichen 4 statt 10 Instanzen für den selben Durchsatz.