나는 nginx/passenger에서 실행되는 프로덕션 루비 sinatra 앱을 가지고 있으며, 요청이 복잡하게 멈추는 것을 자주 보게됩니다. 나는 10 초마다 기계의 클러스터에서 승객 상태를 호출하고 결과를 그래프로 표시하는 스크립트를 작성했습니다.승객의 모든 실행중인 루비 스레드에 스택 추적을 얻는 방법
파란색 라인이 4 기계에 걸쳐 평균 (60)에 지속적으로 요동 치고 기다리고 글로벌 큐를 보여줍니다, 파란색 선은 60 안타 때, 그것은 모든 기계가 끝나가 의미 : 이것은 내가 무엇을보고있다 아웃. 나는 현재의 passenger_max_pool_size를 20으로 설정 했으므로 최대 풀 크기의 3 배가되고, 이후의 요청은 아마도 삭제 될 것입니다.
내 앱은 Amazon RDS mysql 백엔드와 Redis 인스턴스의 두 가지 주요 외부 리소스에 의존합니다. 아마도 이들 중 하나가 주기적으로 느려지거나 반응하지 않아서 이러한 행동을 유발할 수 있습니까?
여기서 병목 현상이 Amazon RDS, Redis 또는 다른 것인가를 알기 위해 스택 추적을받는 방법에 대해 조언 해 줄 수 있습니까?
감사합니다.
내가 기다리고 있었다 얼마나 알 수 있습니까? AFAIK, 자동 저장은 백그라운드에 있어야하며 메모리 페이지를 복사하는 동안 만 지연되어야합니다. 메모리 페이지는 300ms 위에 있어야합니다. – seppo0010
경험적으로, 내 redis 노드가 몇 초 동안 차단되는 것처럼 보일 것입니다. 나는 주어진 60 초 동안 5 ~ 10 초 정도의 차단을 보았습니다. 나는 노예를 구하기 위해 노예를 사용하려고 노력할 것입니다. – esilver