在尝试调试为什么我的多线程 Java 应用程序消耗大量 CPU 时,我发现每个线程都执行一个外部命令,这根本不是 CPU 密集型的,但是当 Java 运行它时,我发现 Java 运行时占用了我 100% 的 CPU。
为了进一步调试,我用简单的 Linux“ls”命令替换了该外部进程。这是我的运行方式-
String[] commands = new String[]{"/bin/sh", "-c", "ls"};
try {
Process p = Runtime.getRuntime().exec(commands);
} catch (IOException ex) {
//
}
尽管如此,我还是看到 Java 使用了所有的 CPU。
我什至没有从进程中读取任何输出,也没有打开任何类型的流。
有什么问题?从 Java 外部运行时,为什么一个简单的ls
命令会导致 Java 运行时消耗大量 CPU?
我没有运行外部命令来模拟线程处理,而是尝试放置 Thread.Sleep() 并且它工作正常 - 不再占用 CPU