2013-03-04 2 views
2

우리는 Play 1.2.5 응용 프로그램을 가지고 있으며 응용 프로그램이 응답하지 않는 문제가 있습니다.Play Framework가 응답하지 않게 되나요? (메모리 문제 일 가능성이 있음)

응용 프로그램에 대한 적절한 메모리 설정을 지정하면 문제가 다시 발생하지 않지만 (ATM 며칠), 실제 이유와 로그에서 확인할 수있는 방법이 있는지 알고 싶습니다. 우리의 설정에서

, 우리는

  • 재생 AWS에서 실행 1.2.5 응용 프로그램 (우분투 12.04)
  • MySQL의 RDS 데이터베이스
  • 아파치 서버 프록시 작업 (취급 SSL 등)

    을 얻었다.

(단지 200 & "OK")이 다양한 통화에 일어난하지만 난 간단한 renderText -implementation와 모니터링 상태 검사의 예를 가지고있다. 우리는이 "모든 시간"을 가졌습니다. 응용 프로그램이 부팅하지 않고 응답했습니다.

아파치 접근 기록했다 :

(IP addr) - - [01/Mar/2013:09:31:16 +0200] "GET /monitor/healthcheck HTTP/1.1" 502 4305 "-" "NING/1.0" 

아파치 오류 로그했다 :

[Fri Mar 01 09:36:16 2013] [error] [client (IP addr)] (70007)The timeout specified has expired: proxy: error reading status line from remote server localhost:8080 
    [Fri Mar 01 09:36:16 2013] [error] [client (IP addr)] proxy: Error reading from remote server returned by /monitor/healthcheck 

플레이 로그가 아무것도 없었어요 (아파치는 300 번대 = 5m 프록시 시간 초과의 길이) (우리는 컨트롤러에서 요청 URL 로깅을 받았으므로 최소한 요청이 길을 찾지 못했거나 로깅에 문제가 있음을 알 수 없음)

첫 번째 생각에는 스레드가 부족합니다. ->이 로그는 시간의 몇 이전의 트래픽을하지 않는 경우도 발생

  • 매우 낮은 트래픽

    • 우리는 개발 중에있다 :이 때문에, 나에게 꽤 가능성이 보인다
  • 우리는 10 개 스레드 우리가 사용하는 비동기 WS 호출이없는
  • (play.pool=10)는 (사람들은 다소 것 같다 플레이 1.2.x 버전 버그가)
  • 없음 있어요 매달려 스레드 것 같다 나던이 각종 커버 사용 후 무작위 시험으로 오랜 시간
  • 블로킹 호출이 (jstack을 모든 것을 조사가 ~ 것 같다 OK)

(아마도 관련, 아마) : 우리가 확인 한 시간 jstack을 그것은 cacll에 대해 응답하지 않았다 있도록 :

$ jstack 7842 
7842: Unable to open socket file: target process not responding or HotSpot VM not loaded 
The -F option can be used when the target process is not responding 

그러나 시도하기 전에 -F 우리가 다시 시도하고 JVM이 어떤 응답 할 수없는 상태에 있다면, 그것은 확인을 곧 그것을 만든 있도록 적절한 응답을 얻었다.

도움이 필요하면 적절한 메모리 설정을 설정하고 그 이후 (지난 금요일 2013-03-01) 우리는이 문제가 없었습니다.

jvm.memory=-Xms64m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m 

그러나 로그에 인쇄 된 메모리 문제는 없었습니다. 내가 실제 이유에 대한 단서를 가지고 있지 않기 때문에 나는 그렇게 아직도 조금 걱정 :

  • 무엇 수 있습니다 원인
    • 일부 메모리 문제가 왜 로그에서 찾을 수 없습니다? 스레드를 떠날 것이다
    • 일부 (결정적) 것은 오랜 시간이
  • 이 다시 발생하는 경우 로그에 원인을 볼 수있는 몇 가지 방법이 있나요 차단?
    • 로그에 메모리 문제가 발생하려면 몇 가지 설정이 필요합니까?

업데이트 : 아마 MySQL의 연결 테스트에 걸려 문제가 될 것으로 보인다. another more focused question을 생성하고 문제가 해결 된 후에도이를 업데이트하도록 기억할 것입니다.

+0

JConsole을 사용하여 JVM을 살펴 보셨습니까? – allprog

+0

JConsole을 사용해 본 적이 없습니다 (설정이 가능하고 체크 아웃해야 할 수도 있음). 어쨌든 문제가 다시 발생했습니다. jstack을 -F와 함께 실행하면 문제가 _com.mchange.v2.c3p0.impl.DefaultConnectionTester.activeCheckConnectionNoQuery_ 내에 차단 된 스레드가있는 것으로 보입니다. 좀 더 철저히 조사한 후에 여기에서 업데이트하겠습니다. – Touko

답변