2016-11-16 1 views
1

Wir haben eine Anwendung auf Kubernetes bereitgestellt. Einer der Dienste ist eine App, die in der JVM ausgeführt wird.Sollte Kubernetes meine JVM-App neu starten, wenn nicht genügend Speicher verfügbar ist?

Unsere Anwendung ist fehlerhaft, es verbraucht zu viel Speicher. Wir erreichen das Limit, das im Replikations-Controller festgelegt wurde, wodurch der Pod neu gestartet wird.

Ist es eine gute Idee, den Replikationscontroller dafür zu verwenden? Oder ist es eine bessere Idee, den Speicher auf der JVM zu begrenzen (auf etwas unter dem Replikations-Controller-Limit einzustellen) und etwas anderes im Pod zu verwenden, um unsere Anwendung neu zu starten?

Wenn die JVM mit einer Out-of-Memory-Ausnahme stoppt, könnte ich Speicherabzüge verwenden, die von der JVM geschrieben wurden. Jetzt bin ich blind, was die Erinnerung beschäftigt.

Vielen Dank für Ihre Antwort!

Antwort

1

In der Tat ist dies keine Verantwortung von Deployment/ReplicationController. Die Neustarts werden in Pod it self gehandhabt. Was die Handhabung von Speicher anbelangt, ist dies kein triviales Problem und Sie sollten es auf beiden Ebenen steuern (Dinge wie Heap-Größen usw.), damit Ihre App das Limit nicht überschreitet, aber wenn es etwas geht, werden Limits für Pods damit umgehen, und das ist vollkommen in Ordnung (besonders, wenn Sie mehr als einen Pod laufen, so dass Sie HA haben).

Die Sache hier ist, dass es ein wenig schwierig ist, Speichergrenzen gut einzustellen, und wahrscheinlich am besten mit Versuch und Irrtum + Überwachung Pod/Container-Metriken (Prometheus/Grafana zur Rettung :)) getan werden kann).

Verwandte Themen