워커 쓰레드풀 확장을 통한 성능튜닝 (process.env.UV_THREADPOOL_SIZE)
참조문서 : http://docs.libuv.org/en/latest/threadpool.html
기본적으로 뒤에서 열심히 일하는 워커(IO작업 담당)들은 멀티쓰레드인데, 기본 크기가 4이다. 이는 최대 128까지 늘릴 수 있다. 특정 함수가 쓰레드풀을 사용할 때, libuv는 최대 쓰레드 수를 미리 할당해주는데, 이를 늘려주면 스레딩의 성능이 향상된다.
대신 메모리 오버헤드가 늘어난다. 따라서 적당한 크기의 쓰레드 수를 잡아주면 좋다.
nodejs에서 워커 쓰레드의 수는 process.env.UV_THREADPOOL_SIZE 에서 제어할 수 있다. 그러나 동적으로 소스.js 레벨에서 제어할 수는 없다. (소스.js에서process.env.UV_THREADPOOL_SIZE=64 이런거 안된다.)
따라서 인스턴스가 뜨기 전에 쓰레드풀을 설정해줘야한다.
node 또는 pm2 명령어에 같이 붙여주면 된다. 쓰레드확인은 ps -Lef | grep node 로 할 수 있다.
pm2 start app.js 으로 인스턴스를 뛰우면 쓰레드 10개가 돌아가고 있다.
- 아마도.. pm2가 4개먹고, node가 2개먹고, 워커쓰레드가 4개(default)
- pm2말고 node로 실행하면 기본적으로 2+4개 쓰레드가 있었다.
UV_THREADPOOL_SIZE=8 pm2 start app.js 으로 인스턴스를 실행시키면 쓰레드가 14개 돌아간다.
[sjh836@main nodeStudy]$ ps -Lef | grep node
UID PID PPID LWP C NLWP STIME TTY TIME CMD
sjh836 68549 102292 68549 0 14 Jul25 ? 00:00:00 node /home/sjh836/nodeStudy/app.js
출처: https://sjh836.tistory.com/95?category=710138 [빨간색코딩]
'JavaScript BackEnd > Node.js, Express' 카테고리의 다른 글
nodejs 메모리 누수 (0) | 2021.03.18 |
---|---|
mongoose-auto-increment (0) | 2021.03.18 |
Mongoose 모듈 (mongodb와 혼용, 연결, 스키마, 타입, 모델, CRUD) (0) | 2021.03.18 |
libuv (개념, 아키텍처, 이벤트루프, 쓰레드풀) (0) | 2021.03.18 |
request 모듈 (0) | 2021.03.18 |
Restify 모듈 (0) | 2021.03.18 |
Express 모듈 (0) | 2021.03.18 |
http 모듈 (0) | 2021.03.18 |