개요
Node.js의 process.cpuUsage() 메서드는 현재 실행 중인 프로세스가 사용한 사용자(user) 및 시스템(system) CPU 시간을 반환합니다. 반환되는 데이터는 user와 system 속성을 가진 객체 형태이며, 값의 단위는 마이크로초(μs, 10⁻⁶초)입니다.
참고로 여러 CPU 코어가 동시에 프로세스 작업을 처리하는 경우, 반환된 값이 실제 경과 시간보다 클 수 있습니다.
문법
process.cpuUsage([previousValue])
매개변수
이 메서드는 아래와 같이 단 하나의 매개변수만 받습니다.
previousValue – 선택적 매개변수입니다. 이전에 process.cpuUsage() 메서드를 호출했을 때 반환된 값을 전달하면, 두 호출 사이의 CPU 사용량 차이(delta)를 계산하여 반환합니다.
예제 1: 기본 사용법
cpuUsage.js라는 이름의 파일을 생성하고 아래 코드를 복사합니다. 파일 생성 후 다음 명령어로 코드를 실행할 수 있습니다.
node cpuUsage.js
cpuUsage.js
// process.cpuUsage() 사용 예제
// process 모듈 불러오기
const process = require('process');
// cpuUsage() 메서드를 호출하여 CPU 사용량 정보 가져오기
const usage = process.cpuUsage();
// CPU 사용량 값 출력
console.log(usage);출력 결과
admin@root:~/node/test$ node cpuUsage.js
{ user: 352914, system: 19826 }위 출력에서 user: 352914는 사용자 모드에서 약 0.35초, system: 19826은 커널(시스템) 모드에서 약 0.02초 동안 CPU를 사용했음을 의미합니다.
예제 2: previousValue를 활용한 사용량 차이 측정
이번에는 previousValue 매개변수를 활용하여 특정 구간 동안의 CPU 사용량을 측정하는 예제를 살펴보겠습니다.
// process.cpuUsage() 사용 예제
// process 모듈 불러오기
const process = require('process');
// cpuUsage() 메서드를 호출하여 CPU 사용량 정보 가져오기
var usage = process.cpuUsage();
// 현재까지의 CPU 사용량 값 출력
console.log("cpu usage before: ", usage);
// 현재 타임스탬프 저장
const now = Date.now();
// 프로세스를 약 100밀리초 동안 지연시키는 루프
while (Date.now() - now < 100);
// 약 100ms 동안 CPU를 사용한 후
// 이전 값을 인자로 전달하며 process.cpuUsage() 메서드를 다시 호출
usage = process.cpuUsage(usage);
// 구간별 CPU 사용량 값 출력
console.log("Cpu usage by this process: ", usage);출력 결과
admin@root:~/node/test$ node cpuUsage.js
cpu usage before: { user: 357675, system: 32150 }
Cpu usage by this process: { user: 93760, system: 95 }이 예제에서는 이전 반환값을 previousValue로 전달했기 때문에, 두 번째 출력값은 프로세스 시작 이후의 누적 사용량이 아닌 두 호출 사이 구간의 CPU 사용량 차이를 나타냅니다. 약 100ms 동안의 바쁜 대기(busy-wait) 루프로 인해 사용자 모드 CPU 시간이 약 93ms 증가한 것을 확인할 수 있습니다.
정리
process.cpuUsage()는 Node.js 애플리케이션의 성능 프로파일링과 병목 지점 분석에 유용한 메서드입니다. 특정 코드 블록 실행 전후로 호출하여 해당 구간의 실제 CPU 소비량을 정밀하게 측정할 수 있습니다.