AWS ELB: не удалось загрузить ресурс: сервер ответил со статусом 503 (служба недоступна: внутренний сервер загружен)

мой стек cloudformation успешно развернут. Я пытаюсь развернуть кольцевое приложение clojure на EC2.

Когда я получаю доступ к конечной точке эластичного баланса нагрузки в my-app.us-west-1.elb.amazonaws.com, я получаюFailed to load resource: the server responded with a status of 503 (Service Unavailable: Back-end server is at capacity)

Я подтвердил, что кот запущен, подключившись к ec2 и запустив ps -afx

Так в чем здесь может быть проблема?

обновление: хорошо, поэтому выполнение запроса curl на localhost: 8080 возвращает HTTP 500

SEVERE: Servlet.service() for servlet [clj-west.system/servlet-handler servlet] in context with path [] threw exception
java.lang.NullPointerException: Handler returned nil
        at ring.util.servlet$make_service_method$fn__52.invoke(servlet.clj:127)
        at clj_west.servlet$_service.invoke(servlet.clj:1)
        at clj_west.servlet.service(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)

person user299709    schedule 30.05.2016    source источник
comment
Проверьте количество работоспособных экземпляров на ELB. Правильно настройте HealthCheck.   -  person Shibashis    schedule 31.05.2016
comment
@Shibashis, какие настройки подходят для сервера tomcat7? Я вижу их здесь, но не знаю, правы ли они: Ping Target HTTP:8080/health-check Timeout 5 seconds Interval 12 seconds Unhealthy threshold 3 Healthy threshold 3   -  person user299709    schedule 31.05.2016
comment
Можете ли вы зайти на локальный хост и проверить, слушает ли процесс 8080?   -  person Shibashis    schedule 31.05.2016
comment
Также проверьте группы безопасности.   -  person Shibashis    schedule 31.05.2016
comment
@Shibashis, как мне проверить группу безопасности и что я ищу. попробую завиток   -  person user299709    schedule 31.05.2016
comment
Перейдите в консоль aws и проверьте группу безопасности, связанную с экземпляром.   -  person Shibashis    schedule 31.05.2016
comment
@Shibashis Я подключаюсь по ssh к своему ec2, когда я делаю curl http://localhost:8080, он возвращает HTTP 500 с java.lang.NullPointerException: Handler returned nil   -  person user299709    schedule 31.05.2016
comment
@Shibashis и я вижу, что все запросы на проверку работоспособности возвращают 500   -  person user299709    schedule 31.05.2016
comment
HTTP:8080/health-check, на вашем сервере нет такой конечной точки   -  person Shibashis    schedule 31.05.2016
comment
вы развернули какие-либо приложения в tomcat   -  person Shibashis    schedule 31.05.2016
comment
Перенастройте elb heathcheck на допустимую конечную точку. Некоторый URL-адрес, который имеет ответ http 200.   -  person Shibashis    schedule 31.05.2016
comment
@Shibashis имеет смысл. да, я развернул файл WAR. означает ли это, что мне нужно создать конечную точку проверки работоспособности в моем веб-приложении??   -  person user299709    schedule 31.05.2016
comment
@Shibashis Я обновил вопрос с помощью трассировки стека.   -  person user299709    schedule 31.05.2016
comment
Да, это лучший способ настроить проверку работоспособности. Если вы используете что-то вроде springboot. Возможно, у вас есть что-то из коробки.   -  person Shibashis    schedule 31.05.2016
comment
@Shibashis Я не уверен, что только что использовал шаблон cf из github.com/vrivellino/clojure -west-2014-demo, то есть из 2014 года, так что, может быть, дело /health-check в новом изменении? Не знаю, почему автор не включил это.   -  person user299709    schedule 31.05.2016
comment
Просто чтобы подтвердить, что проблема заключается в проверке работоспособности, вы можете временно изменить ее на проверку tcp и настроить ее для проверки порта 8080. Для этого не потребуется конечная точка проверки работоспособности. Если это проблема, после изменения проверки работоспособности elb должен зарегистрировать экземпляр.   -  person Shibashis    schedule 31.05.2016
comment
@Shibashis, так что мои другие конечные точки, которые я создал, работают, поэтому, думаю, я просто создам /health-check вручную. попробую ПТС проверить   -  person user299709    schedule 31.05.2016
comment
вручную? вы имеете в виду настройку проверки работоспособности на elb   -  person Shibashis    schedule 31.05.2016
comment
@Shibashis Я только что изменил проверку работоспособности на TCP на elb и подтвердил, что она работает!!!!! Теперь я также могу получить доступ к своим конечным точкам через elb. Итак, проблема заключалась в том, что он искал /health-check, которого не существовало. Я озадачен тем, думал ли автор, что tomcat предоставил эту конечную точку с самого начала...   -  person user299709    schedule 31.05.2016
comment
@Shibashis, да, это правильно, я имею в виду создание конечной точки /health-check вручную в моем веб-приложении, чтобы оно возвращало 200. но я думаю, что TCP тоже прекрасно работает   -  person user299709    schedule 31.05.2016
comment
да. Я бы порекомендовал создать проверку работоспособности внутри приложения. Процесс может продолжать прослушивать порт, но приложение может не работать по другим причинам. Так что проверка tcp может быть не самой подходящей.   -  person Shibashis    schedule 31.05.2016
comment
@Shibashis, да, ты прав, сейчас сделаю это! Большое спасибо за Вашу помощь!   -  person user299709    schedule 31.05.2016


Ответы (1)


На основе обсуждения из комментариев. Проблема была решена путем обновления проверки работоспособности на ELB.

person Shibashis    schedule 31.05.2016