요청: 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)+크라우니코드 학습.