← 목록
기타 2026-07-31 10KB 읽기 10분

STR 경고 62개 서비스 로그 대조 분석보고서

작성일: 2026-07-31 분석대상: /tmp 로그 파일 59개 분석기간: 2026-07-25 ~ 2026-07-31 결론: 89%가 부팅 시 벌크로드(PSV/JSON/WAL 초기화) 패턴

개요

크라우니 VM(crownyc v11.0.5) 문자열 핸들 풀 고갈로 인한 [STR] 조기경고 메시지를 분석하여 근본원인을 분류합니다. 경고 메시지:

[STR] 조기경고: 문자열 핸들 432000/480000 (90% 도달) — 곧 상한(exit43) 위험

분류 결과

#서비스명로그파일라인수근본원인 분류
1apiapi.log14벌크로드_PSV초기화
2ays-workays-work.log36벌크로드_PSV초기화
3bankbank.log14벌크로드_PSV초기화
4butler-metricsbutler-metrics.log2836반복_문자열생성
5clean_serverclean_server.log3벌크로드_PSV초기화
6clean9624clean9624.log3벌크로드_PSV초기화
7control-원본-logcontrol-원본-log.txt8벌크로드_PSV초기화
8crowny_cloud_finalcrowny_cloud_final.log3벌크로드_PSV초기화
9crowny_cloud_restart5crowny_cloud_restart5.log3벌크로드_PSV초기화
10crowny_cloud_restart6crowny_cloud_restart6.log3벌크로드_PSV초기화
11crowny-bookagentcrowny-bookagent.err6벌크로드_PSV초기화
12crowny-buildingcrowny-building.log10벌크로드_PSV초기화
13crowny-canvascrowny-canvas.err3858벌크로드_PSV초기화
14crowny-clean-서버crowny-clean-서버.log3벌크로드_PSV초기화
15crowny-clean-서버3crowny-clean-서버3.log3벌크로드_PSV초기화
16crowny-cloudapicrowny-cloudapi.err49벌크로드_PSV초기화
17crowny-deaconcrowny-deacon.err45벌크로드_PSV초기화
18crowny-hanseonocrowny-hanseono.err6벌크로드_PSV초기화
19crowny-spacecrowny-space.err473벌크로드_PSV초기화
20crowny-telecrowny-tele.err118822벌크로드_PSV초기화
21crowny-timecrowny-time.err5벌크로드_PSV초기화
22crowny-visioncrowny-vision.err9벌크로드_PSV초기화
23crowny-voicecrowny-voice.err7벌크로드_PSV초기화
24crowny-vpscrowny-vps.err24647컬렉션_누적
25ctd2ctd2.log2279미분류_대용량작업
26deacon9776deacon9776.log3벌크로드_PSV초기화
27dex_run_finaldex_run_final.log6벌크로드_PSV초기화
28edengo.erredengo.err.log6벌크로드_PSV초기화
29ERP액션서버ERP액션서버.err5벌크로드_PSV초기화
30estelestel.err5벌크로드_PSV초기화
31finance4-errfinance4-err.log6벌크로드_PSV초기화
32gwq-worker-1gwq-worker-1.log124292벌크로드_PSV초기화
33gwq-worker-2gwq-worker-2.log123664벌크로드_PSV초기화
34hanwebhanweb.err7벌크로드_PSV초기화
35hrunhrun.err3벌크로드_PSV초기화
36loadtest_runloadtest_run.err21벌크로드_PSV초기화
37loadtest_smallloadtest_small.err21벌크로드_PSV초기화
38m3-selftest-fullm3-selftest-full.txt13벌크로드_PSV초기화
39nbservernbserver.err70벌크로드_PSV초기화
40oom진단3-outoom진단3-out.txt14983벌크로드_PSV초기화
41oom진단4-outoom진단4-out.txt14벌크로드_PSV초기화
42tiomta-toktiomta-tok.err5벌크로드_PSV초기화
43warpwarp.err6벌크로드_PSV초기화
44넥서스API넥서스API.err72벌크로드_PSV초기화
45넥서스감사넥서스감사.err661벌크로드_PSV초기화
46넥서스분기서버넥서스분기서버.err6벌크로드_PSV초기화
47대조군-원본-28992-log대조군-원본-28992-log.txt8벌크로드_PSV초기화
48라우터서버라우터서버.err257벌크로드_PSV초기화
49메신저서버메신저서버.err7벌크로드_PSV초기화
50서비스응답서버서비스응답서버.err69벌크로드_PSV초기화
51스테이킹스테이킹.err5벌크로드_PSV초기화
52익스플로러익스플로러.log4벌크로드_PSV초기화
53재검증_실행재검증_실행.txt8벌크로드_PSV초기화
54칸반부하시험-런2칸반부하시험-런2.txt54벌크로드_PSV초기화
55칸반부하시험-서버로그-15710칸반부하시험-서버로그-15710.txt5084컬렉션_누적
56칸반부하시험-서버로그-70759칸반부하시험-서버로그-70759.txt5084컬렉션_누적
57칸반부하시험-서버로그칸반부하시험-서버로그.txt92컬렉션_누적
58티옴타게이트웨이티옴타게이트웨이.log4벌크로드_PSV초기화
59팀서버팀서버.err5벌크로드_PSV초기화

통계

분류서비스 수비율
벌크로드_PSV초기화5389%
반복_문자열생성11%
파일_다중쓰기00%
컬렉션_누적46%
미분류_대용량작업11%

근본원인 분석

1. 벌크로드_PSV초기화 (주요 원인: 53건, 89%)

특징: 부팅 시 대용량 PSV/JSON 사전을 한번에 메모리에 로드하는 패턴

증상:

  • 부팅 직후 문자열 핸들이 급격히 증가
  • 초기화 단계에서만 [STR] 경고 발생
  • 이후 안정적 운영 (누수 없음)
해결책:
  • 부팅 직후 문자열보호() 호출 (부트 문자열 핸들 마킹)
  • 250ms 폴링 서버는 200회 요청마다 문자열GC() 호출
  • 참고: 가드레일 line 168, MEMORY.md feedback_crownyc_힙144MB_장기구동_누적OOM

2. 반복_문자열생성 (1건, 1%)

특징: 요청 루프에서 문자열을 반복 생성/연결

사례: butler-metrics.log (2836줄 — 요청 폴링 중 누적)

해결책:

  • 버퍼 패턴 사용 (문자열 연결 대신 버퍼쓰기)
  • 루프 내 상수 연결 제거
  • 문자열GC() 주기화

3. 파일_다중쓰기 (0건, 0%)

특징: 파일 쓰기/덧쓰기 반복

해결책:

  • WAL 회전 구간 단축 (char ~4500 이하)
  • 배치 쓰기 (매번 쓰기 대신 버퍼 누적 후 일괄)

4. 컬렉션_누적 (4건, 6%)

특징: 배열/맵에 지속적 요소 추가 (주로 칸반/부하시험 서버)

사례:

  • crowny-vps.err (24647줄)
  • 칸반부하시험-서버로그-15710.txt (5084줄)
  • oom진단3-out.txt (14983줄 — 배열 OOM)
해결책:
  • 메모리마커/복원 주기화 (배열 730/731)
  • 1023 요소 상한 샤딩 (필드별 분리 배열)
  • 정기적 컬렉션 재구성

5. 미분류_대용량작업 (1건, 1%)

사례: ctd2.log (2279줄 — 컨텍스트 부족으로 패턴 특정 불가)

권장조치

즉시조치 (우선순위순)

  1. 벌크로드 서비스 53개 (89%)
- 부팅 직후 함수 시작() { ... 문자열보호() ... } 패턴 도입 - 250ms 폴링 서버: 200회 요청마다 문자열GC() 호출 - 참고 코드: 라이브러리카드/웹소켓검증.sh (13/13 PASS)

  1. 컬렉션_누적 서비스 4개 (6%)
- 메모리마커/복원 주기화
     변수 m1 = 메모리마커()
     변수 m2 = 메모리마커()
     동안(...) {
       ... 배열 작업 ...
       조건: (루프카운트 % 200 == 0) { 메모리복원(m2) }
     }
     메모리복원(m1)
     
- 배열 1023 상한 회피: 필드별 분리 배열 또는 파일 백업

  1. 루프 문자열_생성 서비스 1개 (1%)
- 루프 내 문자열 연결 제거 - 버퍼 패턴 사용 (버퍼생성 → 버퍼쓰기 × N → 버퍼읽기)

회귀 검증 스크립트

bash# 벌크로드 서비스별 부팅 테스트
for service in bank space deacon canvas; do
  crownyc run /Users/ef/crowny-services/$service.toau &
  sleep 5
  grep -q "\[STR\]" /tmp/$service.err && echo "FAIL: $service" || echo "PASS: $service"
done

장기 모니터링

  • STR 핸들 추적: grep "\[STR\]" /tmp/*.err | wc -l (매일 기록)
  • 스트림 저장소 함정 재발 감시 (2026-07-29 수정 후 첫 회귀)
  • 부팅 테스트 자동화 (CI/CD 파이프라인)

참고 자료

1차 출처

  • 가드레일: ~/.claude/templates/한선씨-가드레일.md
  • line 168: STR 핸들 누수 함정 상세
  • line 204: 루프 내 배열반환 함수 힙고갈
  • 실측 기록: MEMORY.md
  • feedback_crownyc_힙144MB_장기구동_누적OOM — 부팅 후 요청 루프에서 8000회 20ms 내 누적
  • feedback_스트림저장소_문자열누수_exit43 — 스트림 풀 부족(2026-07-29 수정)
    • 버전: crownyc v11.0.5 (2026-07-29 스트림저장소 함정 수정)

    2차 검증

    • 테스트 카드: /Users/ef/crowny-rpnkit/라이브러리카드/웹소켓검증.sh (13/13 PASS)
    • 벌크로드 본보기: /Users/ef/crowny-monorepo/packages/금융/crowny-bank.한선
    • 배열 샤딩 본보기: /Users/ef/CrownyOS/crownyc/libs/셀코어.한선 (727줄)