피드로 돌아가기
Node.js 0.10.22 (Stable)
Node.js BlogNode.js Blog
Backend

Node.js 0.10.22가 메모리 누수 제거, TLS 스톨 방지, 파일 디스크립터 버그 수정으로 7가지 핵심 결함 해결

Node.js 0.10.22 (Stable)

2013년 11월 12일3beginner

Context

Node.js 0.10 시리즈는 프로덕션 환경에서 메모리 누수, TLS 통신 지연, 자식 프로세스 파일 디스크립터 오류, macOS Mavericks 응답 불가 문제, 그리고 플랫폼별 버그(Solaris 시간대 정보, REPL 중복값, 디버거 스크립트 오류)를 누적하고 있었다.

Technical Solution

  • npm을 1.3.14로 업그레이드: 패키지 관리 개선
  • libuv를 v0.10.19로 업그레이드: 이벤트 루프 및 비동기 I/O 핵심 라이브러리 개선
  • child_process 모듈에서 stale 파일 디스크립터 이벤트에 대한 assert 제거: 자식 프로세스 관련 어설션 오류 해결
  • macOS Darwin 플랫폼에서 "Not Responding" 상태 해결: activity monitor에서 응답 불가 표시 제거
  • debugger sb() 함수 수정: 명명되지 않은 스크립트에서의 버그 제거
  • REPL에서 자동완성 시 중복값 제거: 완성 리스트 중복 제거
  • 종료된 핸들에서 메모리 누수 제거: 메모리 해제 누락 부분 수정
  • TLS에서 read(0)을 사용해 스톨 방지: 읽기 작업을 통한 통신 정체 방지
  • Solaris 플랫폼에서 올바른 시간대 정보 사용: V8 엔진의 플랫폼별 시간대 처리 수정

Key Takeaway

유명한 오픈소스 런타임도 메모리 누수, 플랫폼별 호환성 버그, 이벤트 루프 레이어(libuv)의 안정성 문제를 안정화하는 데 여러 버전을 거친다는 점에서, 기반 라이브러리 업그레이드와 플랫폼별 엣지 케이스 수정이 정상화 버전의 핵심 작업이다.


Node.js 기반 프로덕션 서비스에서 TLS 통신을 사용하거나 자식 프로세스를 생성하는 경우,

0.

1

0.22 이상으로 업그레이드하면 예상 불가능한 스톨과 프로세스 크래시를 방지할 수 있다.

원문 읽기