2013-04-20 4 views
18

최근의 유니콘/지능형 라우팅 문제와 관련없는 일관성없는 성능이 Heroku에서 나타납니다.가끔씩 느린 Heroku에 대한 요청

이것은 일반적으로 ~ 150ms (소요되는 20 회 중 19 회) 소요되는 요청의 예입니다. 이 요청에서 약 4 초 또는 1 ~ 2 배의 오랜 시간이 걸렸음을 알 수 있습니다.

  • 데이터베이스가 병목이 아니었다, 그것은 dB 우리가 충분한 동력계 이상이
  • 를 조회하고 만은 25ms을 보냈다, 그래서 난 몰라 :

    enter image description here

    어떤 것들은

    참고 사항 이것이 병목 현상이라고 생각합니다 (20 명의 더블 다이노 스가 5 명씩 유니콘을 운영하고 있으며 분당 평균 1000 개의 요청을 처리 할 수 ​​있으며 평균 응답 시간은 150ms이므로 60/0.150 * 20 * 5 = 40,000 요청을 처리 할 수 ​​있음을 의미합니다) 달리 말하면 우리는이 측정을 할 때 다이노 스에 40 배의 용량을 가졌다. 찍은.

이렇게 가끔씩 느린 요청이 발생할 수 있습니다. 앞에서 언급했듯이 일화 상으로는 약 20 건의 요청 중 1 건에서 발생하는 것으로 보입니다. 내가 생각할 수있는 유일한 점은 상자에 잡음이 많은 이웃 문제가 있거나 라우팅 레이어의 성능이 일관성이 없다는 것입니다. 누구든지 추가 정보 나 아이디어가 있다면 나는 호기심을 가질 것입니다. 고맙습니다.

+0

그것이 위안이라면, 나는 이것도 경험하고 있으며 그것에 대한 응용 프로그램의 특별한 이유를 추적 할 수 없었습니다. 시끄러운 이웃 이론에 대한 또 다른 데이터 포인트는 무엇입니까? –

+0

Heroku와 함께 지원 티켓을 사용해 보셨습니까? –

+0

오랜 시간이 지난 후 이것을 다시 살펴보면, 여기 미친 * 이론이 있습니다. Heroku의 "공평한 CPU 점유율"과이를 달성하는 데 사용하는 가상화와 관련이 있습니다. 필자의 주장을 증명하기 위해, 작은 코드를 작성할 수있다.'/ test' URL에 대한 핸들러가있다. 그 안에는 수백만에 달합니다. 그냥 CPU를 구울. 그것은 * 언젠가는 150ms, 언젠가는 4 초가되면 헤로 쿠입니다. –

답변

9

저는 지금까지별로 행운이없는 비슷한 문제를 직접 쫓아 왔습니다.

사업의 첫 번째 주문이 NewRelic을 추천한다고 가정합니다. 이 경우 귀하에게 더 많은 정보가있을 수 있습니다.

둘째, 대기열 시간을 확인하는 것이 좋습니다. 요청 대기 시간. 이것을 위해 NewRelic을 보거나, Heroku가 들어오는 요청에 추가하는 "시작 시간"HTTP 헤더 (지금은 인쇄 시작()에서 대기 시간으로 "시작 시간"빼기)를 사용하십시오. 당신이 만들고있는 DNS 통화에서 -

1) DNS : 사람들은 내 경우 나 실패

, 내가 여기 잘못하고 있었다 것들로 오는 시도하는 것은 (? 정통 이상) 목록입니다 너의 견해? 시간이 좀 걸릴 수 있습니다.

2) 로그 성능 - Heroku는 자신의 "Logplex"를 사용하여 모든 stdout을 수집하여 자신이 정의한 로그 드레인에 저장합니다. Papertrail과 같은 서비스가 있습니다.이 성능에 대한 문서는 없으며 이론적으로 Heroku가 버퍼를 플러시하는 동안 프로세스에서 stdout에 대한 기록을 차단할 수 있습니다.

3) DB 연결 받기 - 어떤 프레임 워크를 사용하고 있는지 확실하지 않지만 DB 연결을 받고있는 연결 풀이있을 수 있으며 시간이 오래 걸렸습니까? 그것은 쿼리 시간으로 나타나지 않을 것이며, 그것은 당신의 프로세스에 대한 시간을 차단할 것입니다.

4) Dyno 성능 - Heroku에는 몇 초마다 몇 가지 서버 메트릭 (평균로드, 메모리)이 표준 출력으로 인쇄되는 추가 기능이 있습니다. Graphite를 사용하여 그래프를 작성하고 통계와 시간 사이의 상관 관계를 찾아 보았습니다. 여기서 "산발적 인 느린 요청"이 증가하는 사례를 보았습니다. 그것은 나를 도울 수는 없지만 당신을 도울 수 있습니다 :)

당신이 생각해내는 것을 알려주십시오.

+2

우리는 NewRelic을 사용하고 있습니다. 때때로 우리는 때때로 뾰족한 요청 대기열 시간을 볼 수 있습니다. http://cl.ly/image/112t2x1F3I1s 왜 우리는 다이노스 (20 개의 dynos, dyno 당 5 명의 작업자, 2 개의 dynos, 1 개의 ~ 1000 개의 요청 당 하나의 용량 만 넘어야합니다. 분). 용의자 목록이 좋아 보인다. 문제가 여전히 라우팅 레이어에있는 것처럼 느껴지지만 이것은 단지 추측입니다. –

+0

@Brian - 호기심 때문에 1000 req/분 동안 왜 20GB의 응용 프로그램 서버가 있습니까? 그것은 단지 16 ~ 17 req/sec입니다. 당신은 때때로 10x 트래픽의 커다란 스파이크를 얻나요? (편집 : 신경 쓰지 마라. 나는 코인베이스를 실행했다는 것을 깨달았다 ... 훌륭한 btw이지만 스케일이 어디서 나 왔는지 쉽게 알 수있다!) 또한 느린 요청에 대한 이유를 알아 냈는가? 나는 동일한 문제가있다. (기본 DB보기가없는) 3 개의 요청 중 약 1 개가 천천히 실행된다. – orokusaki