Как заставить Java-программу работать круглосуточно и без выходных?

Я сделал программу на Java и сделал ее файлом jar. Я хочу, чтобы он работал 24/7 на моем AWS. Я использую приложение под названием screen, чтобы оно продолжало работать после выхода из системы. Я использую эту команду:

screen java -jar my_app.jar

Но он не может продолжать работать все время. Бывает, останавливается после работы в течение одного или двух дней. Я вел журнал и не нашел исключений для его прекращения. Интересно, убьет ли JVM мое приложение по какой-либо причине, например, из-за большого использования памяти? Ведет ли JVM журнал? Где я могу найти журнал JVM? Должен ли я сделать свое приложение демоном? Если я должен, то как?


person user2452323    schedule 14.10.2013    source источник
comment
Похоже, что в конце концов заканчивается память. Вы можете подключить к нему любой профилировщик, чтобы увидеть, в чем может быть причина.   -  person Makoto    schedule 14.10.2013
comment
Как подключить профайлер?   -  person user2452323    schedule 14.10.2013


Ответы (2)


Нет, нет ничего особенного в том, чтобы приложение Java работало. Просто пусть хотя бы один поток, не являющийся демоном, все еще активен. Например, это полная программа, которая будет работать вечно:

public class Forever {
    public static void main(String[] args) throws InterruptedException {
        while (true) { Thread.sleep(1000); }
    }
}

Если ваше приложение умирает, это происходит из-за какой-то ошибки. Обязательно проверьте, какие журналы записываются, а также стандартный вывод и стандартный вывод процесса, чтобы найти причину.

person Ryan Stewart    schedule 14.10.2013
comment
Может быть. Незначительный момент, но если вы используете Thread.sleep(Integer.MAX_VALUE), вы можете сэкономить больше циклов ЦП в цикле. - person Alex Haslam; 06.10.2016

возможно, вы нашли решение, но в Windows вы можете использовать пакетный «сторожевой таймер» для повторного запуска вашей программы при ее закрытии (а также для регистрации данных).

:launch
java -jar my_app.jar 1>>log.txt 2>>err.txt
goto launch

в linux/unix вы можете сделать bash по этим строкам (мне лень выполнять 2-минутный поиск), также было бы неплохо отслеживать использование памяти вашим приложением и закрывать его, если оно превышает пороговое значение (например, 70%), он будет перезапущен скриптом b*h

person Mana Quri    schedule 17.02.2014