我在Java上有MR2工作。 是否有可能在容器内检测和处理容器杀死? 我试过使用像
这样的代码Runtime.getRuntime().addShutdownHook(new Hooker(this));
但是没有找到Hooker类实例的日志。 也许有可能为这个容器获取java堆转储?
杀死理由
Container [pid=35696,containerID=container_1509737408754_96482_01_000384] is running beyond physical memory limits.
Current usage: 2.0 GB of 2 GB physical memory used; 3.6 GB of 4.2 GB virtual memory used. Killing container. Dump of the process-tree for container_1509737408754_96482_01_000384 : |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE |- 35696 35694 35696 35696 (bash)
由于
答案 0 :(得分:0)
您可以使用子进程,使用以下代码并添加过滤器以检测纱线杀死。
public class YarnLog {
//
public static void getYarnLog(String appid) throws IOException {
BufferedReader br = null;
try {
Process p = Runtime.getRuntime().exec(String.format("yarn logs -applicationId %s", appid));
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(br != null) {
br.close();
}
}
}
}