OOM использует CRON, но не использует SHELL
Когда я запускаю Java-программу из оболочки, все работает хорошо. Однако, если я запускаю ту же программу с той же командой и тем же пользователем с помощью CRON, я получаю java.lang.OutOfMemoryError через несколько секунд.
Кроме того, CRON не может ничего делать, пока я не убиваю заблокированную Java-программу. Независимо от того, какой cronjob должен быть запущен, он всегда заканчивается "(CRON) error (not fork)" в системном журнале. После убийства Java-программы все новые cronjobs снова работают нормально.
Java-программа создает много потоков (1500 при запуске, больше после) и - при запуске crontab - она всегда начинает зависать сразу после создания 475 потоков. Так что, может быть, это что-то вроде "OutOfThreads", даже если OutOfMemory зарегистрирован.
В целях тестирования я уменьшил количество начальных потоков до 450, и с этим параметром все работает отлично в течение нескольких минут (пока не будет создано больше потоков). Однако мне действительно нужны эти 1500+ потоков, и я понятия не имею, почему это невозможно, когда программа java была запущена crontab. Как уже упоминалось, все работает отлично, пока я запускаю программу из оболочки, а не crontab.
Проблема возникает только с Ubuntu 16.04, все старые версии работали очень хорошо. Это ошибка или новая функция безопасности? Я не нашел никакой информации по этой проблеме, поэтому я надеюсь, что кто-нибудь может помочь.