본문으로 이동

가용성/2026년 9월 30일 사고

페미위키
2026-09-30 15:39부터 2026-09-30 16:34까지 · 그 달의 가용성

9월 30일 15시 39분부터 16시 34분까지 php-fpm 워커가 모두 점유되어, 캐시에 없는 문서와 로그인, 편집, 특수 문서처럼 PHP가 만드는 요청이 수십 초씩 기다렸습니다. 이 동안 PHP로 간 요청 30,367건 가운데 23,087건이 10초 넘게 걸렸고 502와 503이 688건 나갔습니다. 캐시에 있는 문서는 1초 남짓에 나갔습니다. 크롤러가 캐시되지 않는 빨간 링크와 특수:가리키는문서를 훑은 것이 원인이었고, 로그인하지 않은 이 요청들을 사이트 전체에서 한데 세는 속도 제한을 16시 34분에 배포했습니다.


시각 일어난 일
15:39 워커 대기열이 20에서 120으로 오름. php-fpm 워커 16개가 전부 점유되고 웹 서버의 CPU 두 개가 모두 100%에 닿음. 데이터베이스 서버는 한가함
15:40 Grafana의 워커 대기열 경보가 울림
15:48 대기열이 잠시 비어 경보가 풀림
15:54 대기열이 다시 차서 경보가 울림
15:56 대기열이 512에 닿음. 512는 listen 백로그의 상한이라 그 위로는 오르지 않음
16:13 원인을 확인하고 대응 방법을 정함
16:30 속도 제한 배포를 승인함
16:34 배포가 끝나고 대기열이 0으로 내려옴. 경보가 풀림.[1]

원인

전체 요청 수는 초당 13건 안팎으로 평소와 같았고, 요청의 종류가 바뀌었습니다. 로그인하지 않은 /index.php 요청을 30분 단위로 세어 같은 날 13시부터 13시 30분까지와 15시 33분부터 16시 3분까지를 견주면 빨간 링크(redlink=1)가 85건에서 2,418건으로, 특수 문서가 170건에서 1,952건으로, 로그인과 계정 만들기 문서(returnto=)가 182건에서 1,158건으로 늘었습니다. 특수 문서 가운데 가장 많은 것은 특수:가리키는문서였습니다. 어느 것도 캐시되지 않으므로 모두 PHP까지 갔습니다.

요청은 30분 동안 500개가 넘는 주소에서 왔고, 대부분 헤더까지 갖춘 Chrome이었습니다. /index.php 요청 8,036건 가운데 봇의 특징을 보인 것은 1,397건이었습니다. 그래서 /24별 제한에는 걸리지 않았고, 사이트 전체에서 세는 제한은 차이와 옛 판, 검색, 역사만 셌으므로 이 요청들은 아무 제한도 받지 않았습니다.

수치는 모두 Loki의 Caddy 접근 로그와 Grafana Cloud의 php-fpm 지표에서 잰 것입니다. 429로 거절된 요청은 접근 로그에 남지 않으므로 위 건수에 들어 있지 않습니다.[2]

고친 것

  • 로그인하지 않은 빨간 링크, mobileaction=, 특수:가리키는문서 요청을 사이트 전체에서 10분에 150건까지 받는 link_walk 제한을 넣었습니다. infra#977에서 고쳐 16시 34분에 배포했습니다. 배포 뒤 6분쯤 동안 이 제한이 437건을 거절했고, 배포 뒤 20분 동안 나간 요청 7,233건 가운데 7,190건이 2초 안에 끝났습니다.

남은 문제

  • 크롤링이 이어지는 동안에는 빨간 링크나 특수:가리키는문서를 여는 로그인하지 않은 이용자도 크롤러와 같은 한도에서 429를 받을 수 있습니다. 로그인한 이용자는 제한을 받지 않습니다.
  • 로그인과 계정 만들기 문서는 이용자가 로그인하지 못하게 될까 봐 이번 제한에 넣지 않았고, 아무 한도도 받지 않습니다. infra#978에 적어 두었습니다.

출처