有没有办法检测 Java 进程是否内存不足(例如 PermGen 空间)并使用 SMF 契约重新启动它?
答案1
取决于您的 Java VM。如果您使用热点 VM,则可以执行以下操作。
使用 -XX:OnOutOfMemoryError= java cli 选项向进程发送 SIGKILL 信号,这将导致 SMF 重新启动它,SIGKILL 是必需的,因为 OutOfMemory java 进程不会响应任何信号。您可以添加 -XX:-HeapDumpOnOutOfMemoryError 选项来获取堆的转储以供分析,但这会占用大量空间。
文档:http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html