我知道这绝对是黑暗中的一击,但我们绝对感到困惑。
Java(1.5)运行的perl(5.8.6)脚本需要一个多小时才能完成。从命令行手动运行相同的脚本需要12分钟才能完成。这是在Linux主机上。
两种情况下的日志记录都相同,并且两种情况下的脚本都使用相同的参数运行。
该脚本执行一些复杂的工作,例如Oracle DB访问,某些scp等,但是同样,在两种情况下,它执行的操作完全相同。
我们很沮丧。有没有人遇到过类似情况?如果不是这样,并且遇到相同的情况,您将如何考虑对其进行调试?
最佳答案
如果未刷新其stdout / stderror流,则产生控制台输出的子过程可能会阻塞(并导致死锁)。 @gustafc,当它尝试写入stdout / stderror时,所构成的代码最终将阻止子进程,并且流中没有空间(并且Java也未为该流提供服务)。
Process p = startProcess();
final InputStream stdout = p.getInputStream();
final InputStream sterr = p.getErrorStream();
new Thread() {
public void run() {
int c;
while ((c = sterr.read()) != -1) {
System.out.print((char)c);
}
}
}.start();
new Thread() {
public void run() {
int c;
while ((c = sterr.read()) != -1) {
System.out.print((char)c);
}
}
}.start();
关于java - 从Java启动的Perl永远存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2950546/