node.js에서 http request는 기본적으로 agent를 이용한 connection pool을 이용한다.
(기본적으로 Connection: keep-alive)
이게 그냥 쉬엄쉬엄할땐 문제가 없는데,
단위시간 당 엄청난 양의 request + 1 request당 소요시간이 늘어나면 request 처리에 병목이 생긴다.
그도 그럴 것이 따로 agent를 지정하지 않을 경우 사용되는 http.globalAgent의 maxSockets 수가,
기본 5 이기 때문에 동시에 5개 이상의 연결을 처리하지 못하는 것이다.
이것 때문에 망할 병목이 생기는데 해결꼼수는 다음과 같음.
* http.globalAgent.maxSockets 수를 늘여 동시 처리가능 숫자를 늘이는 법.
http://nodejs.org/docs/latest/api/http.html#http_agent_maxsockets
http.globalAgent.maxSockets = 100; // 숫자는 적당히 보고 상황에 맞게
* http.request 시에 agent 값을 false로 주는 방법.
agent값을 false로 세팅할 경우 connection pool이 만땅 차면 Connection: close로 전환한다네.
http://nodejs.org/docs/latest/api/http.html#http_http_request_options_callback
var options = {
host: 'www.google.com',
port: 80,
path: '/',
method: 'POST',
agent: false // <-
};
var req = http.request(options, function(res){
// ... ...
});
하지만 이 모든 것들도 결국 http.request 레벨의 문제해결을 위한 꼼수일 뿐이고,
request를 처리할 서버쪽이 밀리는거면 해결불가능.
'node.js' 카테고리의 다른 글
[node.js] 인터넷 연결상태 체크 (check internet connectivity) (0) | 2016.01.13 |
---|---|
[node.js] http + cluster 구성시 worker graceful restart (no downtime) (0) | 2015.11.19 |
[node.js] async 모듈을 이용한 비동기 처리 패턴 (0) | 2014.01.21 |
[node.js] node.js + MongoDB (node-mongodb-native) (0) | 2013.06.21 |
[node.js] 파일 터치하기 (touch, atime, mtime) (0) | 2013.01.22 |