도구스개발

M/G/1 대기행렬(폴라첵–힌친) 계산기

도착은 포아송이고 처리 시간의 분포는 무엇이든 좋은 창구 하나짜리 줄의 평균 대기시간을 폴라첵–힌친 공식으로 계산합니다. 평균 처리 시간이 같아도 편차가 크면 대기가 길어지는 것을 변동계수별 표로 나란히 보여 줍니다.

Cv = 1. 기억이 없는 분포로, M/M/1과 같아진다

평균 대기시간 Wq

16분

이용률 80% · 앞에 평균 3.2명 · 같은 평균에 지수분포였다면 16분

이용률 ρ = λ·E[S]80%
변동계수 Cv1
처리 시간의 표준편차4분
평균 대기시간 Wq16분
평균 체류시간 W = Wq + E[S]20분
평균 대기 인원 Lq3.2
계 안의 평균 인원 L4
창구가 노는 확률20%
지수분포(M/M/1) 대비1
진행 중인 일의 남은 시간4분
변동계수 Cv평균 대기지수분포 대비
0 — 언제나 같은 시간8분0.5
0.5 — 얼랑 4단계10분0.625
0.707 — 얼랑 2단계12분0.75
1 — 지수분포16분1
1.526분1.625
240분2.5
31.33시간5

평균이 똑같아도 들쭉날쭉할수록 대기가 길어집니다

계산 근거 — 폴라첵–힌친 공식Wq = λ·E[S²] / (2(1 − ρ)) = ρ·E[S]·(1 + Cv²) / (2(1 − ρ))λ = 0.2/분 · E[S] = 4분 · E[S²] = 32분²Lq = λWq · W = Wq + E[S] · L = λW (리틀의 법칙)도착이 포아송이고 창구가 하나면 처리 시간의 분포가 무엇이든 이 식이 성립합니다. 평균과 분산만 알면 되고 분포의 모양은 몰라도 됩니다.
평균 처리 시간이 같아도 들쭉날쭉하면 줄이 길어집니다. E[S²] = 분산 + 평균²이라 공식에 분산이 그대로 들어오기 때문입니다. 지금은 Cv = 1이라 지수분포일 때의 1배입니다. 처리 시간을 아예 일정하게 만들면 (Cv = 0) 대기가 지수분포의 절반으로 떨어지므로, 서버를 늘리기 전에 처리 시간을 고르게 만드는 쪽을 먼저 보는 것이 값이 쌉니다. 요청 크기 제한, 타임아웃, 무거운 작업 분리가 그 방법입니다.
«진행 중인 일의 남은 시간»이 평균의 절반이 아닙니다. 아무 때나 도착하면 긴 작업 도중에 끼어들 확률이 그만큼 높기 때문입니다(검사 역설). 그래서 남은 시간의 평균이 E[S]/2가 아니라 E[S²]/(2E[S]) = 4분가 됩니다. 처리 시간이 일정하면 정확히 절반이지만, 지수분포면 «기억이 없어» 남은 시간의 평균이 평균 처리 시간 그대로입니다.
이용률이 80%인데, 여기서 조금만 더 올라가면 대기가 급격히 늘어납니다. 분모의 (1 − ρ) 때문입니다. ρ가 0.8에서 0.9로 가면 대기가 두 배가 되고, 0.9에서 0.95로 가면 다시 두 배가 됩니다. 시스템을 «꽉 채워 쓰는» 설계가 위험한 이유이며, 보통 70~80%를 목표로 잡습니다.
창구가 둘 이상이면 이 식을 쓸 수 없습니다. M/G/c에는 닫힌 식이 없고 근사식만 있습니다. 처리 시간이 지수분포인 창구 여럿은 얼랑 C 공식으로 풀 수 있고, 창구 하나에 지수분포면 M/M/1 계산기가 더 자세한 값을 냅니다. 도착이 포아송이 아니거나(몰려서 오는 경우) 우선순위가 있으면 또 다른 식이 필요합니다.

사용 방법

  1. 1한 시간에 몇 건이 들어오는지와 한 건 처리에 걸리는 평균 시간을 넣습니다.
  2. 2처리 시간의 분포를 고릅니다. 모르겠으면 «지수분포»가 무난한 출발점입니다.
  3. 3실측 로그가 있으면 «변동계수를 직접»으로 바꾸고 표준편차÷평균을 넣습니다.
  4. 4아래 표에서 편차만 바꿨을 때 대기가 얼마나 달라지는지 봅니다.
  5. 5이용률을 70~80% 아래로 유지하는지 확인합니다.

자주 묻는 질문

도착이 포아송(M), 처리 시간은 아무 분포(G), 창구가 하나(1)인 대기행렬입니다. M/M/1이 «처리 시간이 지수분포»라는 강한 가정을 깔고 있는 것과 달리, M/G/1은 평균과 분산만 알면 평균 대기시간을 정확히 계산할 수 있습니다. 실제 시스템의 처리 시간이 지수분포인 경우는 드물기 때문에 더 널리 쓰입니다.

폴라첵–힌친 공식 Wq = λE[S²]/(2(1−ρ))에 처리 시간의 2차 적률 E[S²]가 들어가고, E[S²] = 분산 + 평균²이라 분산이 그대로 반영되기 때문입니다. 변동계수 Cv로 다시 쓰면 대기가 (1 + Cv²)/2에 정비례하므로, Cv = 0(언제나 같은 시간)이면 지수분포의 절반, Cv = 2면 2.5배가 됩니다.

처리 시간을 고르게 만드는 것이 서버를 늘리는 것보다 값이 쌀 때가 많습니다. 편차를 완전히 없애면 대기가 절반으로 떨어지기 때문입니다. 요청 크기 제한, 타임아웃, 무거운 작업을 별도 큐로 분리하기, 배치 크기 통일이 그 방법입니다. 물론 이용률이 이미 90%를 넘었다면 처리 능력 자체를 늘려야 합니다.

처리 시간 로그를 모아 표준편차를 평균으로 나눕니다. 웹 요청처럼 대부분 빠르고 가끔 아주 느린 작업이 섞이면 Cv가 2~3을 넘기도 합니다. p50과 p99의 차이가 클수록 Cv도 크다고 보면 대략 맞습니다.

아무 때나 도착하면 긴 작업 도중에 끼어들 확률이 그만큼 높기 때문입니다. 이것을 검사 역설이라 하며, 남은 시간의 평균이 E[S]/2가 아니라 E[S²]/(2E[S])가 됩니다. 처리 시간이 일정하면 정확히 절반이지만, 지수분포면 «기억이 없어» 남은 시간의 평균이 평균 처리 시간 그대로입니다.

보통 70~80%를 넘기지 않습니다. 공식의 분모가 (1 − ρ)라 ρ가 0.8에서 0.9로 가면 대기가 두 배, 0.9에서 0.95로 가면 다시 두 배가 됩니다. 이용률이 1에 닿으면 평균 대기시간 자체가 존재하지 않고 줄이 끝없이 길어집니다.

M/G/c에는 닫힌 식이 없고 근사식만 있어 이 계산기로는 다룰 수 없습니다. 처리 시간이 지수분포인 창구 여럿은 얼랑 C 공식으로, 창구 하나에 지수분포는 M/M/1 계산기로 풀 수 있습니다.

평균 대기시간은 달라지지 않습니다. 우선순위를 주든 무작위로 뽑든, 창구가 노는 일 없이 계속 일한다면 전체 평균은 같습니다. 달라지는 것은 «누가 오래 기다리는가»의 분포이며, 짧은 작업을 먼저 처리하면 평균 체감은 좋아지지만 긴 작업은 더 오래 기다립니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이루어지며 입력한 값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 창구가 하나뿐인 경우만 다룹니다. 창구가 여럿이면 얼랑 C 계산기를 쓰십시오.
  • 도착이 포아송(간격이 지수분포)이라고 가정합니다. 손님이 몰려서 오거나 예약제로 오면 실제 대기가 이보다 짧거나 길어집니다.
  • 평균값만 냅니다. p95·p99 같은 꼬리 지연은 처리 시간 분포의 모양에 따라 달라져 평균과 분산만으로는 정할 수 없습니다.
  • 대기 자리가 무한하다고 봅니다. 자리가 한정되어 손님이 돌아가는 경우는 다루지 않습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 2일 · 결과는 참고용 추정치입니다.