- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
" not working in Windows?-6ren"> " not working in Windows?-我的目标是在抛出 java.lang.OutOfMemoryError 时执行脚本(Windows 批处理文件),按照 Hotspot VM Options 中描述的选项 -XX:OnOutOfMem-6ren">
我的目标是在抛出 java.lang.OutOfMemoryError 时执行脚本(Windows 批处理文件),按照 Hotspot VM Options 中描述的选项
-XX:OnOutOfMemoryError="<cmd args>; <cmd args>"
当抛出 OutOfMemoryError 时,我无法让脚本或任何其他进程执行。首先,我尝试启动 cmd.exe 并指定脚本的路径,我修改了双引号所在的位置,使用前斜杠而不是反斜杠,使用双反斜杠。我完全放弃了斜杠和引号,并尝试在工作目录或 PATH 中运行简单的 .exes。什么都没用。
我什至无法让任何可执行文件尝试运行。通过使用 ProcMon我确定 JVM 甚至没有在寻找具有我指定名称的可执行文件,更不用说尝试启动它了。
我知道我在 JVM 参数中正确指定了选项,因为如果我故意插入拼写错误,它会提示。我正在尝试以下操作:
java -XX:OnOutOfMemoryError=myprocess.exe com.mycompany.SimulateOome
java -XX:OnOutOfMemoryError="myprocess.exe" com.mycompany.SimulateOome
java "-XX:OnOutOfMemoryError=myprocess.exe" com.mycompany.SimulateOome
这会生成到 stdout/err 的预期堆栈跟踪。
这可能是我的测试课。我当前的版本只是抛出 java.lang.OutOfMemoryError。我还通过分配一个大数组模拟了一个更有机的 OOME。两者都不起作用。
我在 Windows 2003/2008 上使用 JDK 1.6.0_38,但也尝试过 JDK 1.7。
编辑:
测试类有问题。无论是简单地抛出异常,还是简单的巨大数组分配,都不会导致 OOME 处理程序触发,尽管以其他方式成功抛出 OOME。请参阅下文,了解触发 OOME 处理程序的 Perception 的 OutOfMem 类。整理好之后,语法就很简单了,引号可以包含整个选项,也可以只包含等号之后的部分。对于 Windows shell 脚本,可以使用:
java "-XX:OnOutOfMemoryError=c:\windows\system32\cmd.exe /c c:\scripts\my_oome_handler.bat" com.mycompany.MyClass
或
java -XX:OnOutOfMemoryError="c:\windows\system32\cmd.exe /c c:\scripts\my_oome_handler.bat" com.mycompany.MyClass
最佳答案
It could be my test class. My current version simply throws java.lang.OutOfMemoryError. I've also simulated a more organic OOME but allocating a large array. Neither works.
我测试了一下,确实如此。仍在寻找可靠的解释,但使用 Java 7:
public class OutOfMem {
public static void main(final String[] args) {
final List<byte[]> segments = new ArrayList<byte[]>(64000);
final int size = 6400000;
for (int i = 0; i < 1000000000; i++) {
segments.add(new byte[size * i]);
}
for (final byte[] data : segments) {
final int dataSize = data.length;
System.out.printf("Segment [size=%s]\n", dataSize);
}
}
}
在上面运行 java "-XX:OnOutOfMemoryError=ls"OutOfMem
运行正常(执行 ls 命令)。然而,对于这个类:
public class OutOfMem2 {
public static void main(final String[] args) throws Throwable {
throw new OutOfMemoryError("Fake OOME");
}
}
运行 java "-XX:OnOutOfMemoryError=ls"OutOfMem2
吐出异常堆栈跟踪,但实际上并没有触发 OOME 处理程序。
关于java - -XX :OnOutOfMemoryError ="<cmd args>" not working in Windows?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14571414/
我在一个不是很大的数据帧上使用 pyspark 中的广播连接,但出现了 oom 错误。代码非常简单,如下所示: from pyspark.sql.functions import broadcast
我正在使用 JDK 1.8.0_u66,-XX:+CrashOnOutOfMemoryError 选项尚不可用。所以我最终设置了 -XX:OnOutOfMemoryError="kill -9 %p"
我正在尝试监视上次在一台生产计算机上的进程(由于内存不足而崩溃)。该进程正在使用 -XX:OnOutOfMemoryError=jmap 选项运行。这是什么意思?这是否意味着它会在 OutOfMemo
我在尝试将 -XX:OnOutOfMemoryError="kill -9 %p" 命令传递到我的 jvm 参数时遇到问题。 我正在使用 Jetty7,并将其包含在 start.ini 文件中。启动时
我正在尝试设置一种方法来处理我的应用程序中的内存不足错误。到目前为止,我已将以下选项添加到我的 Gradle 构建文件中: task appStartScripts(type: CreateStart
我的目标是在抛出 java.lang.OutOfMemoryError 时执行脚本(Windows 批处理文件),按照 Hotspot VM Options 中描述的选项 -XX:OnOutOfMem
我在尝试将 -XX:OnOutOfMemoryError="kill -9 %p" 命令传递到我的 jvm 参数时遇到问题。 我正在使用 Jetty7,并且在 start.ini 文件中有这个。在启动
我有一个 Java 应用程序,我想在遇到 OutOfMemoryException 时运行脚本 这很好用: $ java -server -XX:OnOutOfMemoryError="./oom_s
我使用 -XX:OnOutOfMemoryError=\"kill -9 %p\"。它适用于大多数内存不足的情况,但不会终止 java.lang.OutOfMemoryError:无法创建新的 nat
我对 Windows 批处理编程完全陌生。我想要实现的是为 Java 应用程序编写启动脚本。然而,它并没有启动 Java 应用程序,而是打印出来 Usage: java [-options] clas
Java HotSpot VM Options中有以下两个选项: -XX:OnError=";" Run user-defined commands on fatal error. (Introduc
我正在尝试在 OOME 发生时重新启动进程。 Java 二进制文件使用两个 shell 脚本启动,其中一个导入另一个。我无法控制第一个,但可以根据需要修改第二个。这是我正在尝试做的原型(prototy
我是一名优秀的程序员,十分优秀!