<p>ESOCKETTIMEDOUT κ°€μ Έμ˜€κΈ° μš”μ²­</p>

에 λ§Œλ“  2017λ…„ 06μ›” 03일  Β·  24μ½”λ©˜νŠΈ  Β·  좜처: request/request

ν™˜κ²½:

node version v7.10.0
uname -a
Linux iZ2zebqg2v1h2g7jmo9endZ 3.10.0-514.6.2.el7.x86_64 #1 SMP Thu Feb 23 03:04:39 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
request package version: "request": "^2.74.0"

μ΅μŠ€ν”„λ ˆμŠ€ μ‚¬μš©
일뢀 둜그λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€.

{ Error: ESOCKETTIMEDOUT
       at ClientRequest.<anonymous> (/data1/baas_server/baas_x37/node_modules/request/request.js:819:19)
       at Object.onceWrapper (events.js:293:19)
       at emitNone (events.js:86:13)
       at ClientRequest.emit (events.js:188:7)
       at Socket.emitTimeout (_http_client.js:679:10)
       at Object.onceWrapper (events.js:293:19)
       at emitNone (events.js:86:13)
       at Socket.emit (events.js:188:7)
       at Socket._onTimeout (net.js:352:8)
       at ontimeout (timers.js:386:14)
       at tryOnTimeout (timers.js:250:5)
       at Timer.listOnTimeout (timers.js:214:5) code: 'ESOCKETTIMEDOUT', connect: false }

μ†ŒμŠ€ μ½”λ“œλ₯Ό 보고 λ§Žμ€ 주석을 μ–»μŠ΅λ‹ˆλ‹€.

 var setReqTimeout = function() {
      // This timeout sets the amount of time to wait *between* bytes sent
      // from the server once connected.
      //
      // In particular, it's useful for erroring if the server fails to send
      // data halfway through streaming a response.
      self.req.setTimeout(timeout, function () {
        if (self.req) {
          self.abort()
          var e = new Error('ESOCKETTIMEDOUT')
          e.code = 'ESOCKETTIMEDOUT'
          e.connect = false
          self.emit('error', e)
        }
      })
    }

κ·Έλž˜μ„œ κ·Έ μ΄μœ μ™€ 버그λ₯Ό μˆ˜μ •ν•˜λŠ” 방법을 μ•Œκ³  μ‹ΆμŠ΅λ‹ˆλ‹€.
νŠΈλ¦¬κ±°ν•˜λŠ” 방법을 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. λ‘œκ·Έμ—μ„œλ§Œ μ°Ύκ±°λ‚˜ μš”μ²­μ΄ 였λ₯˜μž„을 μ°ΎμŠ΅λ‹ˆλ‹€.
감사 ν•΄μš”;

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

비동기 μš”μ²­μ΄ λ„ˆλ¬΄ 많으면 Linuxμ—μ„œ 이 μ˜ˆμ™Έκ°€ λ°œμƒν•©λ‹ˆλ‹€. λ‚΄κ°€ 찾은 ν•΄κ²° 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

이 μ˜΅μ…˜ μ„€μ •:

agent: false, pool: {maxSockets: 100}

이제 μ‹œκ°„ μ΄ˆκ³Όκ°€ 거짓말일 수 μžˆμœΌλ―€λ‘œ μ‹œκ°„ 초과λ₯Ό λŠ˜λ €μ•Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  24 λŒ“κΈ€

@Fov6363 저도 같은 문제인데 ν•΄κ²°ν•˜μ…¨λ‚˜μš”?

@liujb redis confλ₯Ό μ—…λ°μ΄νŠΈν•˜κ³  μ‹œκ°„ 초과λ₯Ό 0으둜 μ„€μ •ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. 그것은 μš”μ²­μ— κ΄€ν•œ 것이 μ•„λ‹™λ‹ˆλ‹€. Nginx의 문제.

저도 μš”

node ProxyServer.js
start: 0.0.0.0:8080
events.js:182
      throw er; // Unhandled 'error' event
      ^

Error: ESOCKETTIMEDOUT
    at ClientRequest.<anonymous> (/Users/safe/myhktools/node_modules/request/request.js:819:19)
    at Object.onceWrapper (events.js:314:30)
    at emitNone (events.js:105:13)
    at ClientRequest.emit (events.js:207:7)
    at Socket.emitTimeout (_http_client.js:722:34)
    at Object.onceWrapper (events.js:314:30)
    at emitNone (events.js:105:13)
    at Socket.emit (events.js:207:7)
    at Socket._onTimeout (net.js:402:8)
    at ontimeout (timers.js:469:11)

μ„œλ²„κ°€ ν”„λ‘μ‹œλ₯Ό μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμ— 이것을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€.

@liujb μ•ˆλ…•ν•˜μ„Έμš”, Nginx의 문제라고 ν•˜μ…¨μŠ΅λ‹ˆλ‹€. 이 문제λ₯Ό μ–΄λ–»κ²Œ ν•΄κ²°ν•©λ‹ˆκΉŒ?

ESOCKETTIMEDOUT은 μ—°κ²° μ‹œκ°„ μ΄ˆκ³Όμž…λ‹ˆκΉŒ μ•„λ‹ˆλ©΄ 읽기 μ‹œκ°„ μ΄ˆκ³Όμž…λ‹ˆκΉŒ?
200 μš”μ²­/초, 이 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

비동기 μš”μ²­μ΄ λ„ˆλ¬΄ 많으면 Linuxμ—μ„œ 이 μ˜ˆμ™Έκ°€ λ°œμƒν•©λ‹ˆλ‹€. λ‚΄κ°€ 찾은 ν•΄κ²° 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

이 μ˜΅μ…˜ μ„€μ •:

agent: false, pool: {maxSockets: 100}

이제 μ‹œκ°„ μ΄ˆκ³Όκ°€ 거짓말일 수 μžˆμœΌλ―€λ‘œ μ‹œκ°„ 초과λ₯Ό λŠ˜λ €μ•Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ•Œλ•Œλ‘œ λ‹€λ₯Έ 였λ₯˜μ™€ ν•¨κ»˜ 이 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

Error: read ECONNRESET
at exports._errnoException (util.js:1034:11)
at TLSWrap.onread (net.js:580:26)

μ—¬μ „νžˆ 이 λ¬Έμ œκ°€ μžˆλŠ” μ‚¬λžŒμ΄ μžˆμŠ΅λ‹ˆκΉŒ? ν•œ λ²ˆμ— λ§Žμ€ μš”μ²­μ„ λ³΄λ‚΄μ„œ λ°›κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ…Έλ“œ μ΅μŠ€ν”„λ ˆμŠ€ 기반 μž‘μ—…μžμ— λŒ€ν•œ 단일 λ„£κΈ° μš”μ²­λ„ λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€.
ν”„λ‘μ‹œ, 슀트리밍 μ—†μŒ, μž‘μ—…μž μΈ‘μ—μ„œ DBλ₯Ό μ²˜λ¦¬ν•˜λŠ” μ—¬λŸ¬ 비동기 약속을 μ‹œμž‘ν•˜λŠ” 단일 μš”μ²­.

μ œμ•ˆλœ μ—μ΄μ „νŠΈ: false, ν’€: μš”μ²­ μ˜΅μ…˜μ˜ {maxSockets: 100}이(κ°€) 도움이 λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

κ΄€λ¦¬μžμ˜ μ œμ•ˆμ΄ μžˆμŠ΅λ‹ˆκΉŒ?

agent: false, pool: {maxSockets: 100}
μœ„μ˜ μ˜΅μ…˜μ„ μ„€μ •ν•˜λ©΄ 였λ₯˜κ°€ 55μ—μ„œ 8둜 μ€„μ–΄λ“­λ‹ˆλ‹€.
그런 λ‹€μŒ m axSockets:200 을 μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€. ν•˜λ‚˜μ˜ 였λ₯˜λ§Œ λ‚¨μ•˜μŠ΅λ‹ˆλ‹€
μ΄μœ λŠ” λͺ¨λ₯΄κ² μ§€λ§Œ νš¨κ³Όκ°€ μžˆμŠ΅λ‹ˆλ‹€

request 2.88.0 κ°€ λ°œμƒν•˜λ©΄ 가끔 μ•±μ—μ„œ μ „μ†‘λ˜κ³  200개의 μƒνƒœ μ½”λ“œκ°€ μžˆλŠ” μˆ˜μ‹  λΆ€λΆ„μ—μ„œ 처리된 μš”μ²­μ— λŒ€ν•΄ ESOCKETTIMEDOUT이 λ°œμƒν•©λ‹ˆλ‹€. μš”μ²­ λ˜λŠ” https λͺ¨λ“ˆ 사이 μ–΄λ”˜κ°€μ— λ²„κ·Έμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€. λ‹€μ‹œ λ§ν•˜μ§€λ§Œ, μš”μ²­ libλŠ” 200 http μƒνƒœ μ½”λ“œλ‘œ μ²˜λ¦¬λ˜λŠ” https μš”μ²­μ— μ˜ˆμ™Έλ₯Ό throwν•©λ‹ˆλ‹€. μ–΄λ–€ 아이디어라도 ν™˜μ˜ν•©λ‹ˆλ‹€. λ¬Έμ œλŠ” 우리 μΈ‘μ—μ„œ μ‰½κ²Œ μž¬ν˜„ν•  수 μžˆμœΌλ―€λ‘œ(μ•½ 200개의 μš”μ²­μ΄ μ‹€νŒ¨ν•¨) 관심 μžˆλŠ” 뢄듀이 κ³„μ‹œλ©΄ 더 μžμ„Έν•œ 정보λ₯Ό μ œκ³΅ν•΄ λ“œλ¦΄ 수 μžˆμŠ΅λ‹ˆλ‹€.

μΆ”μ‹ : μ‹€νŒ¨ν•œ μš”μ²­μ— λŒ€ν•œ μž¬μ‹œλ„λ₯Ό κ΅¬ν˜„ν•˜μ—¬ ν•΄κ²° 방법을 μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”,
μ„€λͺ…μ„œμ—λŠ” "μ—°κ²° μ‹œκ°„ 초과 및 읽기 μ‹œκ°„ 초과"κ°€ μžˆλ‹€κ³  λ‚˜μ™€ μžˆμŠ΅λ‹ˆλ‹€.
각각 λ”°λ‘œ μ„€μ •ν•˜λŠ” 방법이 μ—†μ„κΉŒμš”?

가끔 μ•Œ 수 μ—†λŠ” λ„€νŠΈμ›Œν¬ 문제둜 인해 μ—°κ²° μ‹œκ°„ μ΄ˆκ³Όκ°€ λ°œμƒν•˜λŠ”λ°, 닡변을 받을 μ‹œκ°„μ„ κ³ λ €ν•˜κ³  μžˆλŠ” 전체 μ‹œκ°„ 초과λ₯Ό 기닀리지 μ•Šκ³  μš”μ²­μ„ μž¬μ‹œλ„ν•  수 μžˆλ„λ‘ μ΅œλŒ€ν•œ 빨리 μ‹œκ°„ 초과λ₯Ό ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. .
감사 ν•΄μš”.

μˆ˜μ •:

EventEmitter = require('events').EventEmitter
EventEmitter.prototype._maxListeners = n_maxLs;
var _fnNull = function(e){if(program && program.verbose)console.log(e)};
process.on('uncaughtException', _fnNull);
process.on('unhandledRejection', _fnNull);

EventEmitter.defaultMaxListeners = n_maxLs;
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0;

@MumiaIrrequieta @anosulchik @deluo

μˆ˜μ •:

EventEmitter = require('events').EventEmitter
EventEmitter.prototype._maxListeners = n_maxLs;
var _fnNull = function(e){if(program && program.verbose)console.log(e)};
process.on('uncaughtException', _fnNull);
process.on('unhandledRejection', _fnNull);

EventEmitter.defaultMaxListeners = n_maxLs;
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0;

@MumiaIrrequieta @anosulchik @deluo

이것이 λ³„λ„μ˜ μ‹œκ°„ 초과λ₯Ό μ„€μ •ν•˜λŠ” 데 μ–΄λ–»κ²Œ 도움이 λ©λ‹ˆκΉŒ?
λ§ˆμ§€λ§‰ 두 μ€„μ˜ 차이점은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

ESOCKETTIMEDOUT에 λŒ€ν•œ μˆ˜μ • 사항도 μ•„λ‹Œ 것 κ°™μŠ΅λ‹ˆλ‹€. @hktalent 이에 λŒ€ν•œ μžμ„Έν•œ 정보λ₯Ό μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

λ˜ν•œμ΄ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 맀뢄 수천 개의 μš”μ²­μ„ λ³΄λƒ…λ‹ˆλ‹€. λͺ¨λ“  연결을 μ‹€ν–‰ν•œμ§€ μ•½ 1주일 후에 ESOCKETTIMEDOUT μ¦‰μ‹œ 응닡을 μ‹œμž‘ν•©λ‹ˆλ‹€.

@SirLancelot-OG ν•΄κ²°ν•˜μ…¨λ‚˜μš”?

1λΆ„λ§ˆλ‹€ 데이터λ₯Ό ν΄λ§ν•˜λŠ”λ° 일뢀 APIκ°€ μ‚°λ°œμ μœΌλ‘œ λŠλ €μ§€κ³  전체 μš”μ²­μ΄ 1λΆ„ 이상 μ‹€ν–‰λ˜μ–΄ λˆ„μ λ˜μ–΄ μ‹œκ°„ μ΄ˆκ³Όκ°€ λ°œμƒν•œ 것 κ°™μŠ΅λ‹ˆλ‹€. μ μ ˆν•œ 둜그인이 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

이제 λ‚΄ 데이터에 μ›Ή μ†ŒμΌ“μ„ μ‚¬μš©ν•˜λŠ” κ²ƒμœΌλ‘œ μ΄λ™ν–ˆμŠ΅λ‹ˆλ‹€!

λͺ¨λ“  μš”μ²­μ— β€‹β€‹λŒ€ν•΄ 이 λ¬Έμ œκ°€ μΌκ΄€λ˜κ²Œ λ‚˜νƒ€λ‚©λ‹ˆλ‹€. μš”μ²­μ„ ν•˜λ©΄ μš”μ²­μ΄ μ™„λ£Œλ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ‹œκ°„ μ΄ˆκ³Όκ°€ 10초이면 단일 μš”μ²­μ˜ 10초 후에 'ESOCKETTIMEDOUT'을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

λˆ„κ΅¬λ“ μ§€ 이것을 κ³ μ³€μŠ΅λ‹ˆκΉŒ?

λ‚˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. 그것은 μš”μ²­μ— κ΄€ν•œ 것이 μ•„λ‹™λ‹ˆλ‹€. Nginx의 문제.

Nginx의 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법

μš°λ¦¬λŠ” 이것을 가지고 있으며 λΉŒλ“œμ— μ‹€νŒ¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ ...이 μ‹ λΉ„ν•œ μ‹ λΉ„ν•œ nginx μˆ˜μ •μ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ??

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰