两台服务器,其中一台正常,另外一台,总是进程卡死!实在找不到原因,求助!!!
服务器配置分别是:
异常的服务器:Linux vultr.guest 4.4.0-87-generic #110-Ubuntu SMP x86_64 GNU/Linux
java version "1.8.0_144" , tomcat8.5.23,Python 3.5.2
正常的服务器:Linux 2.6.32-042stab123.9 #1 SMP x86_64 GNU/Linux
tomcat8.5.15,Python 3.5.2
最关键的是:代码一模一样,java与tomcat版本几乎都一样(大版本号一致,小版本号不同),但是一个会经常进程假死,另外一个完全没有任何异常。可以从哪些方面分析呢?
代码片段如下:
以下代码片段,包含于一个循环语句中,根据DB中的某一个字段值来判断是否执行以下代码
//for循环里面
String[] args = {...};//args[0]是python3,args[1]是python文件名
ProcessBuilder processBuilder = new ProcessBuilder(args);
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
StringBuilder result = new StringBuilder();
final BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
try {
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
logger.info(line);
}
} catch (IOException e) {
logger.warn("failed to read output from process", e);
} finally {
IOUtils.closeQuietly(reader);
}
process.waitFor();
process.destroy();//这里,process起的进程,并没有关闭
int exit = process.exitValue();
//后面其他逻辑
......
Thread.sleep(3000)
process.destroy();
这里,好像没起作用!!!
用java 调用 python 命令,通过python产生的文件来判断python是否正在运行。经常性的,python进程还在,但是就是没有文件产生。kill此python进程之后,才恢复运行。
OS是ubuntu16,java版本是
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
昨天没看清楚你贴的代码,真是抱歉。
其实并不需要process.destroy()的,除非真的waitFor超时了。
另外,看下是否Python重新起了别的进程,你杀掉了它的父进程,子进程是无法控制的。
我也是瞎猜,如果没有帮助请见谅。