автоматическое завершение работы приложения springboot в ec2

#amazon-web-services #spring-boot #amazon-ec2 #deployment #spring-boot-actuator

#amazon-web-services #весенняя загрузка #amazon-ec2 #развертывание #пружинный загрузочный привод

Вопрос:

Я развернул свое приложение springboot на ec2 (ubuntu как t2.среднего размера, AWS AMI как t3.среднего размера)

На моем локальном компьютере проблем нет .. но на ec2 через несколько часов (во время я не работаю) Оно умерло само по себе

Я просто хотел проверить, что произошло при завершении работы, поэтому я создал класс Java ниже как ContextClosedHandler.. но, похоже, мне это не помогает

 @Component
public class ContextClosedHandler implements ApplicationListener<ContextClosedEvent> {

    @Override
    public void onApplicationEvent(ContextClosedEvent event) {
        LOGGER.info(event.getSource());
        LOGGER.info(event.getApplicationContext().getApplicationName());
        LOGGER.info(event.getApplicationContext().getDisplayName());
        LOGGER.info(event.getApplicationContext().getId());
        LOGGER.info(event.getApplicationContext().getParent());
        LOGGER.info(event.getApplicationContext().getStartupDate());
    }
}
  

и журнал выглядит следующим образом

 [INFO / 20201112 14:19 / http-nio-8080-exec-1 / Caller 0         at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:175)
Caller 1         at org.apache.juli.logging.DirectJDKLog.info(DirectJDKLog.java:121)
Error parsing HTTP request header
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in the HTTP protocol [HTTP/1.10x0aHost:]
        at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:560)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:260)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)

[INFO / 20201112 14:51 / http-nio-8080-exec-2 / Caller 0         at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173)
Caller 1         at org.apache.juli.logging.DirectJDKLog.info(DirectJDKLog.java:116)
Initializing Spring DispatcherServlet 'dispatcherServlet'

[INFO / 20201112 14:51 / http-nio-8080-exec-2 / Caller 0         at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:525)
Caller 1         at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:170)
Initializing Servlet 'dispatcherServlet'

[INFO / 20201112 14:51 / http-nio-8080-exec-2 / Caller 0         at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:547)
Caller 1         at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:170)
Completed initialization in 9 ms

[INFO / 20201112 15:19 / SpringContextShutdownHook / Caller 0    at kr.co.motov.ssp.util.ContextClosedHandler.onApplicationEvent(ContextClosedHandler.java:26)
Caller 1         at kr.co.motov.ssp.util.ContextClosedHandler.onApplicationEvent(ContextClosedHandler.java:12)
event.getSource(): org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4c203ea1, started on Thu Nov 12 11:56:20 UTC 2020

[INFO / 20201112 15:19 / SpringContextShutdownHook / Caller 0    at kr.co.motov.ssp.util.ContextClosedHandler.onApplicationEvent(ContextClosedHandler.java:27)
Caller 1         at kr.co.motov.ssp.util.ContextClosedHandler.onApplicationEvent(ContextClosedHandler.java:12)
event.getApplicationContext().getApplicationName(): 

[INFO / 20201112 15:19 / SpringContextShutdownHook / Caller 0    at kr.co.motov.ssp.util.ContextClosedHandler.onApplicationEvent(ContextClosedHandler.java:30)
Caller 1         at kr.co.motov.ssp.util.ContextClosedHandler.onApplicationEvent(ContextClosedHandler.java:12)
event.getApplicationContext().getDisplayName(): org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@4c203ea1

[INFO / 20201112 15:19 / SpringContextShutdownHook / Caller 0    at kr.co.motov.ssp.util.ContextClosedHandler.onApplicationEvent(ContextClosedHandler.java:32)
Caller 1         at kr.co.motov.ssp.util.ContextClosedHandler.onApplicationEvent(ContextClosedHandler.java:12)
event.getApplicationContext().getId(): application

[INFO / 20201112 15:19 / SpringContextShutdownHook / Caller 0    at kr.co.motov.ssp.util.ContextClosedHandler.onApplicationEvent(ContextClosedHandler.java:33)
Caller 1         at kr.co.motov.ssp.util.ContextClosedHandler.onApplicationEvent(ContextClosedHandler.java:12)
event.getApplicationContext().getParent(): null

[INFO / 20201112 15:19 / SpringContextShutdownHook / Caller 0    at kr.co.motov.ssp.util.ContextClosedHandler.onApplicationEvent(ContextClosedHandler.java:36)
Caller 1         at kr.co.motov.ssp.util.ContextClosedHandler.onApplicationEvent(ContextClosedHandler.java:12)
event.getApplicationContext().getStartupDate(): 1605182180002

[INFO / 20201112 15:19 / SpringContextShutdownHook / Caller 0    at org.springframework.scheduling.concurrent.ExecutorConfigurationSupport.shutdown(ExecutorConfigurationSupport.java:218)
Caller 1         at org.springframework.scheduling.concurrent.ExecutorConfigurationSupport.destroy(ExecutorConfigurationSupport.java:208)
Shutting down ExecutorService 'scheduler'

[INFO / 20201112 15:19 / SpringContextShutdownHook / Caller 0    at org.springframework.scheduling.concurrent.ExecutorConfigurationSupport.shutdown(ExecutorConfigurationSupport.java:218)
Caller 1         at org.springframework.scheduling.concurrent.ExecutorConfigurationSupport.destroy(ExecutorConfigurationSupport.java:208)
Shutting down ExecutorService 'executor'

[INFO / 20201112 15:19 / SpringContextShutdownHook / Caller 0    at com.zaxxer.hikari.HikariDataSource.close(HikariDataSource.java:350)
Caller 1         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
HikariPool-1 - Shutdown initiated...

[INFO / 20201112 15:19 / SpringContextShutdownHook / Caller 0    at com.zaxxer.hikari.HikariDataSource.close(HikariDataSource.java:352)
Caller 1         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
HikariPool-1 - Shutdown completed.
  

Ответ №1:

Причина, по которой оно автоматически отключается, заключается в выходе из сеанса ssh в командной оболочке.
итак, я только что выполнил свое приложение с помощью команды nohup для выполнения в фоновом режиме.

 nohup java -jar my-application.jar amp;
  

и если я разверну его с помощью docker, проблем не возникнет.

Комментарии:

1.Некоторые полезные последующие действия читайте nohup здесь

Ответ №2:

На самом деле проблема заключается не в том, что приложение само по себе завершает работу, а в том, что люди пытаются найти уязвимости в вашем приложении, отправляя поддельные запросы. Вы можете попытаться решить эту проблему, отфильтровав запросы через веб-сервер (например, Apache Httpd), прежде чем пересылать их в приложение Spring Boot.

Комментарии:

1. спасибо за ваш ответ. Это была простая проблема. Я ответил на свой вопрос.