EMZETT.
Увійти

ECONNRESET: connection reset by peer

Коротко: Інша сторона різко завершила TCP-з’єднання, поки ви надсилали або очікували дані.

Докладніше: Повідомлення: Error: read ECONNRESET (Node.js), Connection reset by peer (Linux), ERR_CONNECTION_RESET (Chrome). На відміну від connection refused (на порту ніхто не слухає) з’єднання спершу було встановлено, а потім жорстко перервано (TCP RST).

Подробиці

Можливі причини

  • Сервер падає або перезапускається.
  • Міжмережевий екран, проксі або балансувальник навантаження перериває непрацюючі чи довгі з’єднання (тайм-аут простою).
  • Сервер закриває keep-alive-з’єднання, які клієнт ще хоче використати повторно.
  • Надто великі запити або порушення лімітів.
  • Нестабільна мережа (Wi-Fi, VPN, мобільна) або ПЗ безпеки, що блокує трафік TLS.
  • Сервер перевантажений і скидає з’єднання (черга заповнена).
  • Неправильне налаштування TLS (неправильна версія/шифри).

Рішення

  1. Перевірте журнали сервера: збій, пам’ять, перезапуски?
  2. Повторюйте з відстрочкою: окремі скидання в мережі нормальні й мають перехоплюватися клієнтом.
  3. Узгодьте тайм-аути та налаштування keep-alive клієнта, сервера й посередників (тайм-аут клієнта коротший за тайм-аут сервера).
  4. Не використовуйте з’єднання повторно нескінченно; за помилки відкривайте нове.
  5. Перевірте іншу мережу, VPN/проксі/антивірус.
  6. Зберіть подробиці за допомогою curl -v, openssl s_client або tcpdump.
  7. Перевірте навантаження та ліміти з’єднань (наприклад, ulimit -n).

Оцінка

Картина «помилка лише іноді» вказує на тайм-аути чи піки навантаження, «завжди» — на конфігурацію або міжмережевий екран. У Node.js: задайте req.on('error', ...) і налаштування Agent для keepAlive, не залишайте помилки необробленими, інакше процес аварійно завершиться.

Див. також: ERR_CONNECTION_REFUSED, ERR_CONNECTION_TIMED_OUT, HTTP keep-alive