2016-05-17 38 views
0

当我通过shell启动一个具有高内存使用率(“-Xmx52g”)的Java程序时,一切正常。但是,如果我通过CRON使用相同的命令和相同的用户启动相同的程序,几秒钟后我会得到一个java.lang.OutOfMemoryError。使用CRON但不使用SHELL的OOM

此外,只要我不杀死被阻止的java程序,CRON就无法做任何事情。不管哪个cronjob应该启动,它总是以syslog中的“(CRON)错误(无法分叉)”结束。杀死Java程序后,所有新的cronjob都能正常工作。

这个问题只发生在Ubuntu 16.04上,所有旧版本都运行良好。这是一个错误还是一个新的安全功能?我没有找到关于这个问题的任何信息,所以我希望任何人都可以提供帮助。

+0

听起来像cron的具有自身及其衍生孩子之间的共享内存限制......也许cgroup中限制吗? – davmac

+0

我想你可能是对的。但是,这是一个错误还是我可以/必须解决的问题?我使用一个普通的16.04 Ubuntu服务器镜像,没有任何定制。 – DOB

+0

嗯,可能会建立一个限制来防止失控的cron作业取消系统。至于如何配置这个限制,我不确定是否有系统特定的工具或配置文件。可能你应该问服务器错误,因为这不是一个编程问题,并且实际上是堆栈交换的主题。 – davmac

回答

0
+0

服务器有足够的内存(128 GB),一切都很好,只要我使用任何较旧的Ubuntu,但不是16.04(但如果我通过SHELL而不是CRON启动程序,即使在那里它也能正常工作)。它似乎没有任何可以通过任何java配置解决的问题,因为CRON本身在启动java程序后完全被阻塞。例如,如果CRON应该启动一个简单的“hello world”perl脚本,它也会在syslog中以“(CRON)错误(无法分叉)”的方式失败。 CRON本身似乎有某种内存限制。但为什么以及如何调整? – DOB