Ich habe einen Java-Prozess, der eine native Bibliothek verwendet. Diese native Bibliothek ist ziemlich ressourcenintensiv und wird eine Menge RAM ausgeben. Darüber hinaus wird es für einige Eckfälle meinen gesamten Speicher vollständig beanspruchen und mein System vollständig einfrieren.Einstellung JNI und Unterprozessspeicher Grenze
Es wäre gut, wenn die Anwendung gerade in diesen komischen Ecken Fällen abgestürzt wäre. Aber wenn eine Ausnahme ausgelöst werden kann, wäre das noch besser. Gibt es eine Möglichkeit, ein Speicherlimit für Aufrufe an diese JNI-Bibliothek und für die Ausführung von Teilprozessen festzulegen?
Ich habe versucht, ulimit -v unter Linux, aber es hat nicht funktioniert. Idealerweise hätte ich gerne eine portablere Lösung, da das Programm auch auf anderen Plattformen laufen muss.
Es gibt keine wirklichen Lösungen, die mir bekannt sind. Im besten Fall, wenn Sie genug darüber wussten, wie diese Bibliothek funktioniert, können Sie die Speicherauslastung in irgendeiner Weise beeinflussen und Fehler an ihren 'malloc()' -Aufrufen zurückgeben, aber von Ihrer Beschreibung des Verhaltens wird diese Bibliothek wahrscheinlich nicht betroffen sein Ein solcher Fehler kommt gut zurück, was sowieso zu Abstürzen oder beschädigten Daten führt. Eine portable plattformübergreifende Lösung wäre noch schwieriger. IMO spielt eine JVM mit LD_PRELOAD oder DLL-Injektion und spielt gleichzeitig mit Feuer und Benzin. Eine sich schlecht benehmende 3rd-Party-Bibliothek fügt Antimaterie hinzu. –