Java作业不一致地给出OOM错误

时间:2017-07-12 00:31:44

标签: java linux hadoop memory

我在Linux机器上安排了(cron)一个jar文件。 jar通过JDBC与Hive服务器连接并运行select查询,之后我在csv文件中写入所选数据。每日数据量约为1.5亿条记录,csv文件约为1亿条。大小30GB。

现在,每次调用此作业时都不会完成,从而导致写入部分数据。我用dmesg | grep -E 31866检查了PID的错误,我可以看到:

[1208443.268977] Out of memory: Kill process 31866 (java) score 178 or sacrifice child
[1208443.270552] Killed process 31866 (java) total-vm:25522888kB, anon-rss:11498464kB, file-rss:104kB, shmem-rss:0kB

我正在使用内存选项调用我的jar: java -Xms5g -Xmx20g -XX:+UseG1GC -cp jarFile

我想知道错误文本的确切含义,是否有任何解决方案我可以申请确保我的工作不会运行OOM。有线的事情是每次行为不一致时工作都不会失败。

1 个答案:

答案 0 :(得分:1)

该消息实际上来自linux内核,而不是你的工作。这意味着你的系统内存不足而内核已经杀死你的工作以解决问题(否则你可能会遇到内核恐慌)。

您可以尝试修改您的应用以降低内存要求(例如,以递增方式加载数据或编写可在群集上完成所需转换的分布式作业,而不仅仅是一台计算机)。