Node.js의 "connect EMFILE"오류
최근에 Node.js를 실행하는 내 사이트로 많은 트래픽을 받았습니다. 트래픽이 증가함에 따라 이전에는 발생하지 않았던 많은 충돌이 시작되었습니다. 내 로그에 다음 오류가 표시됩니다.
{ [Error: connect EMFILE] code: 'EMFILE', errno: 'EMFILE', syscall: 'connect' }
Error: connect EMFILE
at errnoException (net.js:670:11)
at connect (net.js:548:19)
at net.js:607:9
at Array.0 (dns.js:88:18)
at EventEmitter._tickCallback (node.js:192:40)
왜 충돌하는지 아는 사람? 그리고 그것을 해결하는 방법에 대한 아이디어?
Express.js와 Socket.io를 사용하고 있습니다. Ubuntu에서 실행됩니다.
EMFILE 오류는 OS가 더 많은 파일 / 소켓을 열도록 프로그램을 거부하고 있음을 의미합니다.
살펴보십시오 : Linux에서 열린 파일 수 제한을 어떻게 변경합니까?
EMFILEerror maximum files이는 OS가 더 많은 파일 설명자를 열도록 프로그램을 거부하고 있음 을 나타냅니다.
시스템에서 열린 파일에는 디스크 파일, 명명 된 파이프, 네트워크 소켓 및 모든 프로세스에서 열린 장치가 포함됩니다.
운영 체제는 프로세스 당 열린 파일 제한을 지정합니다.
시스템의 열린 파일 제한을 확인하려면 ulimit -a명령을 사용하십시오 . 일반적으로 유닉스 계열 시스템에서는 기본값이 1024입니다.
제한이 1024 인 경우 사용자 / 프로세스는 최대 1024 개의 파일을 열 수 있습니다. 이 제한 수단을 초과하는 경우 open, pipe및 dup시스템 호출은 실패하고 EMFILE 오류를 얻을 것입니다.
얻을 EMFILE때 대부분 코드의 누출을 나타냅니다. 프로그램에 누수가있는 경우 ulimit를 더 높은 값으로 늘리는 것은 좋은 해결책이 아닙니다.
누출 원인을 찾아야합니다. 다음은 운영 체제와 같은 유닉스에서 디버깅하는 데 사용할 수 있습니다.
lsof의미list open files명령은 열린 파일 목록을 제공합니다. nodeJS 프로그램에 누수가 있다고 가정하여 프로그램에서 열린 총 파일 설명자 수를 찾으십시오.lsof | grep 노드 | 화장실 -l
소켓에 대한 파일 설명자를 찾으려면 다음을 사용하십시오.
lsof -n -i -P | grep 노드
이것을 사용하여 누수가 어디에 있는지 알아 내고 수정할 수 있습니다.
제 경우에는 이미 ulimit 세트와 kern.maxfiles 구성을 Mac에서 사용할 수있는 가장 높게 설정했습니다.
수정 된 것은 전 세계적으로 최대 소켓 수를 제한하는 것입니다. 이후 버전의 노드에서 한계는 무한대입니다.
다음 코드 줄을 추가해보십시오.
var https = require('https');
var http = require('http');
https.globalAgent.maxSockets = 5;
http.globalAgent.maxSockets = 5;
요청 라이브러리를 사용하는 경우 이러한 설정을 구성 할 수 있습니다.
참조 : https://github.com/request/request#request---simplified-http-client
maxSockets에 대한 자세한 내용 : https://nodejs.org/api/http.html#http_agent_maxsockets
참조 URL : https://stackoverflow.com/questions/10355501/connect-emfile-error-in-node-js
'Program Club' 카테고리의 다른 글
| VIM : 커서 / 화살표 키 비활성화 (탐색 전용) (0) | 2021.01.08 |
|---|---|
| 2 단계 커밋 (0) | 2021.01.08 |
| RESTful HTTP 대신 Websocket을 사용하면 어떤 함정이 있습니까? (0) | 2021.01.07 |
| memcpy를위한 향상된 REP MOVSB (0) | 2021.01.07 |
| 페이징이 활성화되고 확대 / 축소 된 UIScrollView 이미지 / 사진 뷰어 (0) | 2021.01.07 |