2012-06-14 2 views
1

Elastic Beanstalk을 사용하여 배포되고 단일 EC2 마이크로 인스턴스에서 실행되는 Amazon Web Services에서 실행되는 웹 사이트가 있습니다. 그것은 스테이징 환경이고 나는 그곳에 접근 할 수있는 유일한 사람입니다. Apache JMeter를 사용하여 6 명의 사용자가 웹 사이트를 탐색하면서 총 3 초마다 평균적으로 요청을 처리합니다 (이미지, CSS, JS 및 기타 정적 리소스는 CloudFront에서 제공하고 EC2 인스턴스에서는 트래픽을 생성하지 않습니다).Amazon ELB가 응답을 제공하지 못했습니다.

문제는 잠시 후 (환경 설정 후 30-60 분) 웹 사이트가 응답하지 않는 것입니다. 로그 (catalina.out)에서 cronjob이 실행 중임을 알 수 있기 때문에 Tomcat이 여전히 제대로 실행되고 있다고 확신합니다. ELB 만 응답을 할 수없는 것 같습니다.

로그를 분석하면 Tomcat에서 오류가 전혀 발생하지 않습니다 (/opt/tomcat7/logs/tail_catalina.log 또는 /opt/tomcat7/logs/catalina.out에 없음).

[Thu Jun 14 20:26:42 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:26:42 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:26:50 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:26:50 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:27:20 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:27:20 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:27:43 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:27:43 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:27:50 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:27:50 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:28:20 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:28:20 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:28:42 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:28:42 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:28:50 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:28:50 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:29:20 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:29:20 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:29:42 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:29:42 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:29:50 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:29:50 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:30:20 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:30:20 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:30:43 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:30:43 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:30:50 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:30:50 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:31:20 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:31:20 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:31:43 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:31:43 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:31:50 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:31:50 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
[Thu Jun 14 20:32:20 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:32:20 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 

을 EC2 인스턴스가 마지막으로 종료 때까지 ... (그리고 새가 자동으로 시작됩니다) : 웹 사이트에 연결할 수대로 다음과 같은 오류가 즉시/등/아파치/로그/elasticbeanstalk-의 error_log를에 나타나는 시작 .

요청을하지 않거나 요청 횟수를 줄이면이 ​​문제가 발생하지 않습니다.

도움을 주시면 감사하겠습니다.

감사합니다.

+0

질문과 관련이 없지만 googlability로 인해 : 443 만 설정된 ELB에서 포트 80에 액세스하려고하면 "연결이 거부되었습니다"라는 메시지가 표시 될 수 있습니다. – Fuser97381

답변

7

나 가정에서 시작하자 :

귀하의 Tomcat 응용 프로그램은

그 로그 이벤트, 사실이라면 127.0.0.1:8999에서 수신 대기하도록되어

  • :

    [Thu Jun 14 20:26:42 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
    [Thu Jun 14 20:26:42 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 
    

    .. 응용 프로그램 청취자가 사망했음을 알립니다. 사이트가 정상적으로 작동 할 때 curl 명령이 유효한 HTTP 응답을 반환해야

    curl -v http://127.0.0.1:8999/ 
    

    그건, 그리고 아마 Connection refused 또는 couldn't connect to host 당신이 정전 발생하는 경우 반환됩니다 : 당신은 이것을 확인할 수 있습니다. 또한 응용 프로그램 포트에서 유효한 리스너를 확인하기 위해 다음 명령을 사용할 수 있습니다

    제한 응용 프로그램 청취자가 죽지 포함하지만 수없는 이유가 있습니다
    netstat -an | grep LISTEN | grep 8999 
    

    :

    • 은 JVM을의 하드 충돌
    • 응용 프로그램의 부드러운 충돌
    • lsof | wc -l를 사용 (파일 기술자의 부족 (Tomcat 응용 프로그램 로그를 보면) (JVM이 프로세스가 계속 실행되는 경우 사용 ps 확인합니다)) 애플리케이션의 사용자 ulimit -n 비교 거라고

    그러나, 대부분의 오류는 오류 메시지가 발생한다 기록되는 통상 기록되는 JVM 프로세스의 stderr. 저것은 볼 것이다 제일 장소이다.다른 모든 방법이 실패하면 디버그 로깅을 사용하도록 설정하여 포어 그라운드에서 Tomcat 응용 프로그램을 실행 해보십시오.

+0

답장을 보내 주셔서 감사합니다. @ gabrtv. 인스턴스가 다시 작동하지 않을 때까지 기다리는 중입니다. 문제의 원인을 파악하기 위해 제안 사항을 사용하겠습니다. 아마 Amazon EC2에 stderr가 어디에 로그인했는지 알고 있습니까? 감사. – satoshi

+0

'stderr'는 프로세스별로 기록됩니다. 이 경우 Tomcat/JVM 프로세스의 stderr에 관심이 있습니다. 전형적으로 그것은 logfile, catalina.out 또는 별도의 "error"로그 파일에 기록됩니다. 또한 관련 오류에 대해'/ var/log/syslog' 및/var/log/messages를 찾아야합니다. – gabrtv

+0

이것에 대한 어떤 업데이 트? 현상금은 곧 끝납니다;) – gabrtv

1

나는이 문제와 비슷한 문제를 해결하기 위해 하루를 보냈다. Amazon Elastic Beanstalk 환경에 배포 된 WAR 파일이 있습니다. 저와의 차이점은 AEBS 환경에 의해 스핀 업되는 인스턴스가 종료되고 AEBS에 의해 새로운 인스턴스로 대체되기 5 분 전까지 만 지속된다는 것입니다.

후 오히려 (내 인스턴스가 살아있는 동안 5 분 소요 덩어리) 및 일부 light reading 내가 AEBS 톰캣 인스턴스가 아파치가 다시 연결됩니다 /_hostmanager에 80 요청에 포트에서 요청을 수신하여 만든 것을 발견 파고 많은 포트 8999와 다른 포트 8080 (Tomcat). 인스턴스에 배포 된 'hostmanager'라는 Ruby 응용 프로그램은 포트 8999에서 수신 대기합니다.이 응용 프로그램은 Elastic Beanstalk 환경에서 트래픽에 대한 그림을 얻을 수있는 다른 통계 인 & 트래픽과 함께 AWS Elastic Beanstalk Host Manager에 다시보고합니다. 인스턴스 수를 적절하게 늘리거나 줄입니다.

AWS Elastic Beanstalk 호스트 관리자가 인스턴스의 hostmanager 응용 프로그램에서 응답을받지 못하면 인스턴스를 종료하고 새 호스트를 시작합니다. 이것은 귀하의 사이트가 30 분간 지속 된 다음에 사망하는 이유 일 수 있습니다. 그래서

여기 문제가 자바 응용 프로그램이 8080 포트까지 제공되는으로하지만,이 원인을 아마 인 hostmanager 응용 프로그램이 포트 8999.에서 수신하지하지있다 같아요

[Thu Jun 14 20:26:42 2012] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8999 (localhost) failed 
[Thu Jun 14 20:26:42 2012] [error] ap_proxy_connect_backend disabling worker for (localhost) 

확인 /opt/elasticbeanstalk/var/log/hostmanager.log 무슨 일이 일어나고 있는지와 hostmanager 응용 프로그램이 불행한 이유에 대해 더 많은 단서를 줄 수 있기 때문입니다.

내 경우 hostmanager 앱이 Amazon S3 스토리지 버킷에 wget을 실행 중이며 404 응답을 얻고있는 것으로 나타났습니다 (위에서 언급 한 hostmanager.log를 보면 알 수 있습니다). 이로 인해 호스트 관리자가 시작되지 못했습니다. 따라서 들어오는 요청이 포트 8999로 재 라우팅되었을 때 아무 것도 듣고 있지 않았습니다. 실패. 인스턴스가 종료되었습니다.

hostmanager 응용 프로그램이 실패한 이유를 정확히 해결하기보다는 Elastic Beanstalk 환경에서 사용되는 AMI를 잃어버린 원인으로 간주하기로 결정했습니다. 나는 그것을 포기하고 사용자 정의 AMI를 실행하는 새로운 탄성 콩 줄기 환경을 얻기 위해 다음 단계에 따라 결국 :

  1. 이었다 인스턴스에서 AMI를 만들어 내 WAR 파일
  2. 와 새로운 탄성 콩 줄기 환경 만들기 그것에 의해 생성
  3. 등재 2
  4. 라이트 I 필요한 몇몇 여분의 비트 (예 톰캣 관리자) 단계에서 생성 된 AMI에서 정규 EC2 인스턴스
  5. 3 단계
  6. ,369을에 생성 정규 인스턴스에서 AMI 생성됨
  7. AMI를 Elastic Beanstalk Environment에 적용했습니다.

정확히 무엇이 설정되어 있는지 정확히 알지 못하면 정확히 도울 수 없습니다. hostmanager가 8999 번 포트에서 수신 대기한다는 것을 알고 있지만 hostmanager.log의 위치와 운이 좋으면 원하는 위치로 이동하게됩니다.