我正在使用Java中的代码执行器。问题是如何控制执行的执行时间和内存使用情况。
我正在做这样的事情:
public ExecutionResult execute(List<String> args, String inputFile) throws CommandLineExecutorException {
try {
ProcessBuilder builder = new ProcessBuilder(args);
if (inputFile != null) {
builder.redirectInput(new File(inputFile));
}
final long startTime = System.currentTimeMillis();
Process process = builder.start();
process.waitFor();
final long endTime = System.currentTimeMillis();
int exitValue = process.exitValue();
InputStream inputStream = exitValue == 0 ? process.getInputStream() : process.getErrorStream();
String consoleOutput = readStream(inputStream);
return new ExecutionResult(exitValue, consoleOutput, (endTime - startTime));
} catch (IOException | InterruptedException ex) {
throw new CommandLineExecutorException(ex.getMessage());
}
}
我不确定这是否是控制子流程执行时间的最佳方法。对于记忆,我仍然在寻找最好的选择。
当我使用php时,我曾经使用脚本来控制linux命令的内存和时间,但我想知道是否有更好的方法在java中实现这一点。
答案 0 :(得分:1)
为了监视子Java进程,您可以使用Java JMX来查询JVM进程的各种参数。有关如何连接到远程JVM和this answer以检索内存信息的示例,请参阅this one。
为了监控非Java进程,您可以使用SIGAR多平台API。