Ich arbeite an einem System, das Speicher für den E / A-Cache zuweist, um die Leistung zu steigern. Beim Erkennen von OOM wird ein Teil davon zurückgenommen, sodass die Geschäftslogik fortgesetzt werden kann, selbst wenn dies weniger E / A-Cache und eine etwas geringere Schreibleistung bedeutet.
Ich habe auch mit eingebetteten Java-Anwendungen gearbeitet, die versuchten, OOM zu verwalten, indem sie die Speicherbereinigung erzwangen und optional einige unkritische Objekte wie vorab abgerufene oder zwischengespeicherte Daten freigaben.
Die Hauptprobleme bei der OOM-Handhabung sind:
1) an dem Ort, an dem es passiert ist, erneut versuchen zu können oder von einem höheren Punkt aus zurückrollen und erneut versuchen können. Die meisten zeitgenössischen Programme verlassen sich zu sehr auf die Sprache, um sie zu werfen, und schaffen es nicht wirklich, wo sie landen und wie sie die Operation erneut versuchen können. Normalerweise geht der Kontext der Operation verloren, wenn er nicht beibehalten werden soll
2) in der Lage sein, tatsächlich etwas Speicher freizugeben. Dies bedeutet eine Art Ressourcenmanager, der weiß, welche Objekte kritisch sind und welche nicht, und das System kann die freigegebenen Objekte erneut anfordern, wenn und wenn sie später kritisch werden
Ein weiteres wichtiges Problem ist das Zurücksetzen, ohne eine weitere OOM-Situation auszulösen. Dies ist in höheren Sprachen schwer zu kontrollieren.
Außerdem muss sich das zugrunde liegende Betriebssystem in Bezug auf OOM vorhersehbar verhalten. Linux zum Beispiel wird dies nicht tun, wenn Speicher-Overcommit aktiviert ist. Viele Swap-fähige Systeme sterben früher ab, als das OOM an die betreffende Anwendung zu melden.
Und es gibt den Fall, dass nicht Ihr Prozess die Situation verursacht hat. Das Freigeben von Speicher hilft also nicht, wenn der fehlerhafte Prozess weiterhin ausläuft.
Aus diesem Grund sind es oft die großen und eingebetteten Systeme, die diese Techniken anwenden, da sie die Kontrolle über Betriebssystem und Speicher haben, um sie zu ermöglichen, und die Disziplin / Motivation, sie zu implementieren.