핵심 정리
javascript
import os from "node:os";
const workerCount = Math.max(1, os.availableParallelism() - 1);
const totalMem = os.totalmem();
const freeMem = os.freemem();
console.log({
workerCount,
platform: os.platform(),
arch: os.arch(),
homedir: os.homedir(),
tmpdir: os.tmpdir(),
memoryUsagePercent: ((1 - freeMem / totalMem) * 100).toFixed(1),
});운영체제 정보
먼저 구분해 둘 기본형은 아래입니다.
- 코어 수 출발점:
os.availableParallelism() - 메모리 상태:
os.totalmem(),os.freemem() - 플랫폼 분기:
os.platform(),os.arch() - 사용자 경로:
os.homedir() - 임시 파일 경로:
os.tmpdir()
os는 정답을 주기보다 출발점을 준다
워커 수, 메모리 여유, 플랫폼 문자열을 읽을 수는 있지만, 최종 운영 값은 부하 테스트와 배포 환경 조건을 같이 봐야 합니다.
워커 수는 availableParallelism()부터 본다
CPU 작업 분산의 기본 출발점으로는 가장 실용적입니다. 다만 메인 스레드와 컨테이너 제한을 같이 고려해야 합니다.
경로 하드코딩 대신 homedir()와 tmpdir()를 쓴다
CLI와 데스크톱형 도구에서는 특히 설정 디렉터리와 임시 파일 경로를 안전하게 잡는 데 유용합니다.
컨테이너에선 숫자를 그대로 믿지 않는다
호스트 기준 값처럼 보일 수 있으니, 환경 변수 오버라이드 같은 보정 경로를 열어 두는 편이 좋습니다.
os 값은 로직 결정 힌트이지 정책 자체는 아니다
예를 들어 메모리가 충분해 보여도 실제 컨테이너 제한, cgroup 설정, 배포 정책은 별도로 더 좁을 수 있습니다.
그래서 os 카드는 "자동 결정"보다 "기본 제안값 계산" 카드로 읽는 편이 안전합니다.
언제 읽어야 하나
체크포인트
- 워커 수 출발점:
os.availableParallelism() - 메모리 확인:
os.totalmem(),os.freemem() - 플랫폼 분기:
os.platform() - 아키텍처 분기:
os.arch() - 사용자 홈 경로:
os.homedir() - 임시 경로:
os.tmpdir() - 실행 정책은
os값 그대로 고정하지 말고 오버라이드 경로를 둔다
주의할 점
availableParallelism()은 출발점이지 최종값이 아니다. 메인 스레드 부담과 컨테이너 제한을 무시하고 그대로 worker 수로 고정하면 오히려 처리량이 떨어질 수 있다.
참고 링크
1 sources