성능 모니터링은 성공적인 애플리케이션을 실행하는 데 중요한 부분입니다. 무언가의 성능을 알려주는 가장 기본적인 방법 중 하나 문제가 발생할 때마다 지속 시간을 측정하고 그로부터 통계를 추출하는 것입니다.
평균
값 모음의 평균은 어떤 것이 얼마나 좋은지 또는 나쁜지 확인하는 좋은 시작입니다. 고려 중인 모든 값을 합한 다음 발생 횟수로 나누어 계산됩니다.
Ruby에서 평균 응답 시간을 계산하는 방법은 다음과 같습니다.
참고 :예제에서는 분할 시 보다 정확한 결과를 얻기 위해 총 지속 시간 값을 Float에 캐스팅했습니다. 그렇지 않으면 Ruby는 가장 가까운 정수로 반올림하여 4를 반환합니다. 대신.
또 다른 유용한 통계는 중앙값입니다. 비슷해 보이지만 값 모음의 평균과 중앙값에는 차이가 있습니다.
중앙값은 집합의 위쪽 절반과 집합의 아래쪽 절반을 구분하는 값입니다.
홀수 개의 값이 있는 데이터 세트의 경우 먼저 값을 정렬한 다음 중간 숫자를 선택하여 중앙값을 얻습니다. 짝수 개의 값이 있는 집합의 경우 정렬한 후 중앙값은 두 개의 가운데 숫자의 평균이 됩니다.
이 통계는 데이터에 큰 편향이 있는지 또는 긴 꼬리가 있는지 확인하는 좋은 방법입니다.
위 기간의 평균은 335.83입니다. 2000ms의 단일 이상값 때문입니다. 3.5에 불과한 중앙값 , 편향이 있음을 나타냅니다.
데이터세트의 평균과 중앙값을 모두 계산하면 큰 이상값이나 긴 꼬리가 있는지 알아낼 수 있습니다.
평균의 문제
평균과 중앙값은 성과를 나타내는 좋은 지표이지만 전체 내용을 말해주지는 않습니다. 웹페이지를 10번 요청하면 평균은 매우 낮을 수 있지만 하나 이상의 요청을 완료하는 데 여전히 매우 오랜 시간이 걸릴 수 있습니다.
아래 이미지는 AppSignal의 특정 작업에 대한 99번째(파란색) 및 90번째(녹색) 백분위수와 평균(빨간색)을 보여줍니다. 99번째와 90번째가 평균에서 꽤 멀리 떨어져 있고 약간의 스파이크가 있는 것을 볼 수 있습니다. 이는 일반 고객이 좋은 경험을 하는 반면, 때때로 페이지가 렌더링될 때까지 거의 두 배나 기다려야 하는 사용자가 있다는 것을 의미합니다. 이상적으로는 이러한 모든 값을 가능한 한 서로 가깝게 하여 모든 사용자에게 보다 일관된 경험을 제공하는 것이 좋습니다.

예를 들어, 10명의 고객이 100밀리초에서 1초 사이의 기간을 가진 페이지를 요청하는 다음 기간 세트를 가정해 보겠습니다.
이렇게 하면 평균이 190ms이 됩니다. 한 사용자는 1초의 응답 시간이라는 매우 나쁜 경험을 했습니다. 평균만 추적하면 웹사이트의 성능이 훌륭하다고 생각하기 쉽지만 실제로는 때때로 사용자가 끔찍한 경험을 하게 됩니다.
위의 예는 10개의 요청에 대해서만 설명했지만 하루에 1,000개의 요청이 있었다면 그 중 100명의 사용자가 끔찍한 경험을 했다는 의미입니다.
백분위수
값의 분포에 대한 더 나은 아이디어를 제공하기 위해 백분위수를 사용합니다. 백분위수는 중앙값, 즉 세트의 절반이 해당 숫자 아래에 있고 나머지 절반이 위에 있는 데이터 세트의 지점을 나타내는 숫자와 유사합니다. 백분위수는 20번째 백분위수가 데이터 세트에 있는 숫자의 20%가 해당 숫자보다 낮다는 의미에서 유사합니다.
다음과 같은 (정렬된) 세트가 주어졌습니다:
20번째 백분위수를 알고 싶다면 다음과 같은 방법으로 계산할 수 있습니다. 세트에 10개의 값이 있습니다. 원하는 값은 위치 1(20.0 / 100 * 10 - 1)에 있습니다. ) 배열은 0부터 시작합니다. 이 배열에는 짝수 개의 항목이 포함되어 있으므로 인덱스(2) 사이의 평균을 계산해야 합니다. ) 및 인덱스 + 1(3 ). 그러면 값은 150이 됩니다. 20번째 백분위수입니다.
매우 순진한 Ruby 구현은 다음과 같습니다:
이 percentile 함수는 median와 매우 비슷해 보입니다. 계산하고 실제로 median 50th와 동일합니다. 백분위수.
AppSignal은 위의 통계를 사용하여 애플리케이션에 대한 성능 지표를 생성합니다. 우리는 평균에만 의존하지 않고 90번째 및 95번째 백분위수를 계산하여 요청 분포에 대한 더 나은 아이디어를 제공하는 이상값을 표시합니다. 공연 투어 페이지에서 자세한 내용을 알아보세요.
이상한 점
백분위수와 평균이 계산되는 방식으로 인해 때때로 90번째 백분위수가 평균 아래로 떨어질 수 있습니다. 예를 들어 다음 데이터세트가 있는 경우:
그러면 mean이 표시됩니다. 182.73 중 , 1의 90번째 백분위수 .
측정항목 수집 시스템이 90번째 백분위수와 평균만 표시하는 경우에도 90번째 백분위수가 평균 아래로 떨어지면 데이터세트 어딘가에 큰 이상치가 있다고 추론할 수 있습니다.
👋 이 기사가 마음에 드신다면 Ruby(on Rails) 성능에 관해 우리가 작성한 더 많은 글이 있으니 Ruby 성능 모니터링 체크리스트를 확인해 보세요.
이 게시물의 내용이 거의 100% 완료되었습니다.
지금은 그게 다야! 다른 게시물에서는 Quantile을 사용하여 모든 고객의 요청에 대한 백분위수를 효율적으로 저장하고 계산하는 방법에 대해 설명하겠습니다. 통계 및 APM, 오류 추적 또는 성능 모니터링에 대한 질문이나 의견이 있는 경우 Twitter @AppSignal 또는 이메일을 통해 문의해 주세요.
로버트 비크먼
공동 창립자로서 Robert는 우리의 첫 번째 커밋을 작성했습니다. 그는 또한 우리의 지원 역할 모델이며 코드의 작은 세부 사항에 대해 모두 알고 있습니다. 여행과 사진(동시에).
모든 기사:Robert Beekman