使用CRON但不使用SHELL的OOM

当我通过shell启动一个java程序时,一切正常。 但是,如果我用同一个命令和同一个用户通过CRON启动相同的程序,我会在几秒钟后得到一个java.lang.OutOfMemoryError。

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

java程序创build了许multithreading(启动时为1500,之后更多),而且当由crontab启动时,它始终在创build475个线程后开始挂起。 所以也许它更像“OutOfThreads”甚至OutOfMemorylogging。

为了testing的目的,我把初始线程的数目减less到了450,并且这个设置在一些分钟内工作正常(直到更多的线程被创build)。 然而,我真的需要这些1500+线程,我不知道为什么这是不可能的,当java程序已经由crontab启动。 如前所述,只要我通过shell启动程序,而不是通过crontab启动程序,一切正常。

这个问题只发生在Ubuntu 16.04上,所有旧版本都运行得很好。 这是一个错误还是一个新的安全function? 我没有find任何有关这个问题的信息,所以我希望任何人都可以帮忙。