← 목록
기타 2026-07-21 3KB 읽기 3분

요청: estel-외부접속-점점느려짐-접속불가-진단

  • 날짜: 2026-07-21 00:32:27
  • 작업 경로: /Users/ef/CrownyOS/crownyc

요청 본문

estel.crowny.org 를 외부에서 접속하니까 점점 느려지다 접속 안되는 현상 확인. 현재 버전에서 검증 하고 코드/컨디션 확인.

관련 산출

(클로드가 작업 결과를 이어 기록)


진단 결과 (2026-07-21 완료)

증상

estel.crowny.org 외부 접속 시 점점 느려지다 접속 불가. 로컬(127.0.0.1:9617)은 모든 경로 1~44ms 정상.

근본원인 (재현 확증)

단일스레드 crownyc HTTP 서버 + 무완화 5s 읽기 타임아웃 + 0.0.0.0 외부노출.
  • 서버.한선 accept 루프(959~983): TCP수락TCP읽기(16384)→처리→TCP닫기 직렬 단일스레드.
  • VM(crownyc.c 12221~12234) TCP수락이 accept 소켓에 SO_RCVTIMEO 기본 5000ms 설정. env CROWNY_TCP_RCVTIMEO_MS로 조절, CROWNY_TCP_LOOPBACK=1로 127.0.0.1 전용 바인드.
  • 재현: python 원시소켓으로 connect 후 무송신 스톨 1개 → 정상요청 0.01s→4.70s 블록(복구 후 0.01s). 단일스레드라 스톨마다 전원 직렬 대기.
  • localhost는 스톨 안 나서 재현 불가 → "외부에서만" 증상과 정확히 일치. 외부 실네트워크(느린 모바일·봇·스캐너·브라우저 preconnect)의 스톨이 5s당 1개보다 빠르면 백로그 무한증가 → 점점 느려지다 접속거부.
  • estel은 EnvironmentVariables 전무 → 기본 5000ms·0.0.0.0. plist PID 4419→54436→94076 변동 = KeepAlive 재기동 사이클 정황.

2차 리스크 (플래그, 미수리)

  • estel.err 반복: [STR] 문자열 핸들 432000/480000 (90%) — exit43 위험. 로드시 정적 소비(21907큐브·QEC테이블·HTML 상수)로 확인 — 200요청+무거운 API(qec/surface) 30회 반복에도 핸들 불변·크래시 0(런타임 누수 아님). 헤드룸 48000 얇음. 무거운 동시 API 버스트 시 돌파 가능성 잔존 → 관찰 대상(상한 확대 또는 정적 생존셋 축소는 별건).

처방 (적용·검증 완료)

org.crowny.estel.plist에 EnvironmentVariables 추가(config만, 완전가역):
  • CROWNY_TCP_LOOPBACK=1 → 127.0.0.1 전용 바인드. 외부 클라 9617 직접접속 차단, 게이트웨이(127.0.0.1 업스트림)만 통과. 직접-인터넷 스톨/스캐너 표면 제거.
  • CROWNY_TCP_RCVTIMEO_MS=1500 → 스톨 비용 5s→1.5s.
  • 백업=plist.bak-preloopback-*. CrownyOS CLAUDE.md 권장 사이드카 설정과 동일.

검증 실측

  • 바인드 127.0.0.1:9617 확정, env 적용 확인.
  • 게이트웨이 로컬 200(1.5ms) · 공인 https://estel.crowny.org 200(185ms) · /api/health 200.
  • 스톨중 정상요청 4.70s→1.20s(4배 개선). API qec/surface/qkd 200.
  • 동반 서버hang진단.한선(4상 판정 5/5 PASS)+크라우니코드 학습.

생태계 공통 발견 (후속 필요)

게이트웨이-프론트 crownyc 서버 스캔: 7종이 동일 0.0.0.0+미완화 — space:9607·cad:9609·hall:9606·tree:9608·character:9615·ev:9616·staking:9603. estel이 먼저 터진 건 외부 스톨 트래픽을 더 받았을 뿐. 동일 처방(loopback+RCVTIMEO) 일괄 적용 권장(사용자 확인 대기 — 7 재기동 blip).