我需要知道某个进程(java.exe)在java webapp中使用了多少内存。
我尝试了以下内容:
Process proc = Runtime.getRuntime().exec("tasklist /v | find \"java.exe\"");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedReader errInput = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
但是这会返回以下内容:
错误:参数/选项无效 - “|” 输入“TASKLIST /?”用法。
我知道这是因为管道是一个shell特性,在传递给shell之前由Java解析。
我也尝试过:
String[] procString = {
"cmd",
"/c",
"tasklist /v | find \"java.exe\""
};
Process proc = Runtime.getRuntime().exec(procString);
但是这不会给BufferedReader返回任何内容。
有没有办法将正确的输出输入到webapp中?
答案 0 :(得分:0)
在exec()函数返回之前,必须定期使用stdInput和errInput流。只要缓冲区已满,exec()函数就会阻塞。也就是说,当没有空间写入缓冲区时,通过exec()函数的命令不会继续。要解决此问题,请在另一个线程中的每个缓冲区已满后读取缓冲区。
对于进入Java程序的人来说,这是一个错误。如果已定义流,则必须使用它(通过读取功能)