外部进程使Java消耗大量CPU
当我试图调试我的多线程Java应用程序为什么会消耗大量CPU时,我发现每个线程都执行一个外部命令,该命令根本不是CPU密集型的,但当Java运行它时,我发现Java运行时占用了我100%的CPU 为了进一步调试,我用简单的Linux“ls”命令替换了这个外部进程。以下是我如何运行它-外部进程使Java消耗大量CPU,java,multithreading,performance,exec,cpu-usage,Java,Multithreading,Performance,Exec,Cpu Usage,当我试图调试我的多线程Java应用程序为什么会消耗大量CPU时,我发现每个线程都执行一个外部命令,该命令根本不是CPU密集型的,但当Java运行它时,我发现Java运行时占用了我100%的CPU 为了进一步调试,我用简单的Linux“ls”命令替换了这个外部进程。以下是我如何运行它- String[] commands = new String[]{"/bin/sh", "-c", "ls"}; try { Process p = Runt
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了看起来像是一个已知问题,我想我需要使用这个- 更新: 使用java_posix_spawn后,问题消失了