首页 > 解决方案 > 是否可以在不杀死 jvm 的情况下模拟 java 应用程序的突然重启?

问题描述

我想对应用程序的弹性进行压力测试,并在频繁断电的情况下验证数据是否一致。

由于目标是测试持久状态,只有应用程序本身在技术上不需要立即停止,例如,如果有办法以某种方式分离文件系统,或者冻结写入并复制可以执行的状态副本,无论如何都不需要诉诸从内部作为System.exitsigkill从外部杀死进程。

标签: javatestingfilesystemsstress-testing

解决方案


System.exit(1);在功能上与 JVM 从操作系统接收到 KILL 信号时发生的情况相同。但是,ShutdownHooks仍将执行。

Runtime.getRuntime().halt(1)将立即停止 JVM,就好像操作系统在没有警告的情况下终止了该进程。

但是,两者都不完全等同于突然断电,这也会杀死操作系统,可能导致操作系统缓冲的磁盘写入丢失。


推荐阅读