read econnreset как исправить
Узел js ECONNRESET
я запускаю приложение Express js с помощью socket.io для чата webapp и я получаю следующую ошибку случайным образом около 5 раз во время 24ч. Процесс узел, завернутый в навсегда и он перезапускается сама сразу же.
проблема в том, что перезапуск express выбивает моих пользователей из своих комнат и никто этого не хочет.
веб-сервер определяется на основе графических интерфейсов. Нет проблем со стабильностью сокета, просто используя websockets и flashsockets транспорты. Я не могу воспроизвести это нарочно.
это ошибка с узлом v0. 10. 11:
EDIT (2013-07-22)
добавлены оба socket.io обработчик ошибок клиента и обработчик неперехваченных исключений. Кажется, что это один ловит ошибку:
так что я подозреваю, что это не a socket.io проблема, но http-запрос на другой сервер, который я делаю, или соединение mysql/redis. Проблема в том, что стек ошибок не помогает мне определить мою проблему с кодом. Вот вывод журнала:
как я узнаю, что вызывает это? Как мне получить больше от ошибки?
хорошо, не очень многословно, но вот stacktrace с «longjohn»:
здесь я служу файл политики флэш-сокета:
может ли это быть причиной?
11 ответов:
Вы, наверное, уже догадались: это ошибка подключения.
«ECONNRESET» означает, что другая сторона разговора TCP резко закрыла свой конец соединения. Это, скорее всего, связано с одной или несколькими ошибками протокола приложения. Вы можете посмотреть журналы сервера API, чтобы узнать, жалуется ли он на что-то.
быстрое и грязное решение для развития:
использовать longjohn, вы получаете длинные трассировки стека, которые будут содержать асинхронные операции.
чистота и правильное решение: Технически, в узле, когда вы испускают ‘error’ событие и никто его не слушает, он бросит. Чтобы его не кинуть, поставьте на него слушателя и справьтесь с ним сами. Таким образом, вы можете зарегистрировать ошибку с дополнительной информацией.
чтобы иметь один прослушиватель для группы вызовов, вы можете использовать Домены а также поймать другие ошибки во время выполнения. Убедитесь, что каждая асинхронная операция, связанная с http (сервер / клиент), находится в разных домен контексте по сравнению с другими частями кода, домен будет автоматически слушайте error события и будет распространять его на свой собственный обработчик. Таким образом, вы только слушаете этот обработчик и получаете данные об ошибке. вы также получаете дополнительную информацию бесплатно.
EDIT (2013-07-22)
Как я уже писал выше:
«ECONNRESET» означает, что другая сторона разговора TCP резко закрыла свой конец соединения. Это, скорее всего, связано с одним или несколькими протоколами приложений ошибки. Вы можете посмотреть журналы сервера API, чтобы узнать, жалуется ли он на что-то.
что также может быть так: в случайные моменты времени другая сторона перегружена и просто убивает соединение в результате. Если это так, зависит от того, к чему именно вы подключаетесь.
но одно точно: у вас действительно есть ошибка чтения на вашем TCP-соединении, которая вызывает исключение. Вы можете увидеть это, посмотрев на код ошибки, который вы опубликовали в своем редактировании, который подтвердить это.
простой tcp-сервер, который у меня был для обслуживания файла политики flash, вызывал это. Теперь я могу поймать ошибку с помощью обработчика:
Как мне отладить ошибку ECONNRESET в Node.js?
Я запускаю приложение Express.js, используя Socket.io для веб-приложения чата, и случайно получаю следующую ошибку примерно 5 раз в течение 24 часов. Процесс узла заворачивается навсегда и сразу же перезапускается.
Проблема в том, что перезапуск Express выбивает моих пользователей из их комнат, и никто не хочет этого.
Веб-сервер прокси HAProxy. Нет проблем со стабильностью сокетов, только при использовании веб-сокетов и транспортов flashsockets. Я не могу воспроизвести это специально.
Это ошибка с узлом v0.10.11 :
РЕДАКТИРОВАТЬ (2013-07-22)
Добавлен как клиентский обработчик ошибок socket.io, так и обработчик необработанных исключений. Кажется, что этот ловит ошибку:
Поэтому я подозреваю, что это не проблема Socket.io, а HTTP-запрос к другому серверу, который я делаю, или соединение MySQL / Redis. Проблема в том, что стек ошибок не помогает мне определить мою проблему с кодом. Вот вывод журнала:
Как я знаю, что вызывает это? Как я могу получить больше от ошибки?
Хорошо, не очень многословно, но вот трассировка стека с Longjohn:
Здесь я использую файл политики флэш-сокета:
Может ли это быть причиной?
Возможно, вы уже догадались: это ошибка соединения.
«ECONNRESET» означает, что другая сторона диалога TCP внезапно закрыла свой конец соединения. Скорее всего, это связано с одной или несколькими ошибками протокола приложения. Вы можете просмотреть журналы сервера API, чтобы увидеть, если он жалуется на что-то.
Но так как вы также ищете способ проверить ошибку и, возможно, устранить ее, вы должны взглянуть на « Как отладить ошибку зависания сокета в NodeJS? », Которая была опубликована в stackoverflow по аналогичному вопросу.
Быстрое и грязное решение для разработки :
Чтобы иметь одного слушателя для группы вызовов, вы можете использовать домены, а также ловить другие ошибки во время выполнения. Убедитесь, что каждая асинхронная операция, относящаяся к http (сервер / клиент), находится в различном контексте домена, по сравнению с другими частями кода, домен автоматически прослушивает error события и передает его своему собственному обработчику. Таким образом, вы только слушаете этот обработчик и получаете данные об ошибках. Вы также получите больше информации бесплатно.
РЕДАКТИРОВАТЬ (2013-07-22)
Как я уже писал выше:
«ECONNRESET» означает, что другая сторона диалога TCP внезапно закрыла свой конец соединения. Скорее всего, это связано с одной или несколькими ошибками протокола приложения. Вы можете просмотреть журналы сервера API, чтобы увидеть, если он жалуется на что-то.
Но одна вещь наверняка: у вас действительно есть ошибка чтения на вашем соединении TCP, которое вызывает исключение. Это можно увидеть, посмотрев код ошибки, который вы опубликовали в своем редактировании, что подтверждает это.
Comments
ayazpasha2434 commented Feb 9, 2015
The text was updated successfully, but these errors were encountered:
We are unable to convert the task to an issue at this time. Please try again.
The issue was successfully created but we are unable to update the comment at this time.
brycebaril commented Feb 9, 2015
To me, this sounds like a networking issue outside Node.js, this error «ECONNRESET» is when the remote connection to Node.js closes the socket unexpectedly.
Are you using a proxy between Node and Redis?
What version of Node/node_redis/Redis server?
I doubt the NewRelic agent is involved, but you could always try to reproduce without the agent and see if that fixes the issue. cc/ @wraithan
wraithan commented Feb 10, 2015
Those lines are just CLS doing it’s thing. With more of a repro I could fully rule out the New Relic agent. But I’m relatively confident this isn’t being caused by us.
ayazpasha2434 commented Feb 10, 2015
I removed the NewRelic agent, the problem still occurs. Approx. every 3 mins I get this crash happening. Below are the logs for reference.
sarathms commented Feb 12, 2015
I was facing this problem too, but just got resolved after I realized I was playing around with my /etc/hosts file yesterday for some other reason. It was missing:
@ayazpasha2434 the solution might not be the same for you, but like others are hinting, it is defintely outside node and in the env/shell/OS/VM. Step back a little and stare at it.
ayazpasha2434 commented Feb 13, 2015
@sarathms I have this mapping in my hosts file. However, the Redis machine in my case is a remote one. Just cross-checked, I have the said localhost mapping in Redis machine as well. Still the problem is not solved.
Waterloo commented Mar 8, 2015
Waterloo commented Mar 8, 2015
@ayazpasha2434 This line solved my error
blainsmith commented Aug 15, 2015
@ayazpasha2434 Did @Waterloo have the right answer for you?
BridgeAR commented Sep 23, 2015
There seemed to be an issue with your network connection and it does not seem to be an issue with node redis. Adding the error handler should be sufficient so the app does not crash anymore (and it should always be attached).
biggu0 commented Apr 7, 2016
BridgeAR commented Apr 7, 2016
@biggu0 I’m not sure what connection this has to node_redis. To find out more about ECONNRESET you might want to look at stackoverflow.
akhare22sandeep commented Aug 2, 2016
below are the snapshotting setting in redis.conf
save 900 1
save 300 10
save 60 10000
Please let us know if we are doing something wrong.
saranyapm commented Jan 5, 2017
After getting the error it is automatically reconnecting.
What can be the issue to lost the connection.
sw-tt-tarunvarma commented Jan 31, 2017 •
riginoommen commented May 31, 2017
I am also facing the same issue
events.js:160
throw er; // Unhandled ‘error’ event
^
Error: read ECONNRESET
hametGh commented Oct 4, 2018 •
This solved my problem with:
stormit-vn commented Oct 22, 2018
I ma also facing this issue. I am using with sails.js framework with a hook, so there is only one connection to redis server when starting node service, we will use global sails object to access and work with redis
Here is the stack trace of the error
AbortError: Redis connection lost and command aborted. It might have been processed.\n at RedisClient.flush_and_error (/var/sample-app/node_modules/redis/index.js:362:23)\n at RedisClient.connection_gone (/var/sample-app/node_modules/redis/index.js:664:14)\n at RedisClient.on_error (/var/sample-app/node_modules/redis/index.js:410:10)\n at Socket. (/var/sample-app/node_modules/redis/index.js:279:14)\n at emitOne (events.js:116:13)\n at Socket.emit (events.js:211:7)\n at emitErrorNT (internal/streams/destroy.js:66:8)\n at /var/sample-app/node_modules/async-listener/glue.js:188:31\n at args.(anonymous function) (/usr/lib/node_modules/pm2/node_modules/event-loop-inspector/index.js:138:29)\n at _combinedTickCallback (internal/process/next_tick.js:139:11)\n at process._tickDomainCallback (internal/process/next_tick.js:219:9)\n at process.fallback (/var/sample-app/node_modules/async-listener/index.js:563:15).
Our node app is running on a Docker container and it will connect to Redis server installed on an EC2 linux instance.
mallikharjuna-ibexlabs commented Apr 2, 2019
We also facing same issue, but here we placed the stunnel to proxy the redis to localhost using below stunnel configuration.
fips = no
#setuid = root
#setgid = root
pid = /var/run/stunnel.pid
debug = 7
#options = NO_SSLv2
options = NO_SSLv3
output = /var/log/stunnel.log
#client = no
#foreground = yes
[redis-cli]
client = yes
accept = 127.0.0.1:6379
connect = redisendpoint:6379
node is disconnecting with these below errors for every couple of minutes. We running these through docker containers.
emps commented May 23, 2019
We also facing same issue, but here we placed the stunnel to proxy the redis to localhost using below stunnel configuration.
fips = no
#setuid = root
#setgid = root
pid = /var/run/stunnel.pid
debug = 7
#options = NO_SSLv2
options = NO_SSLv3
output = /var/log/stunnel.log
#client = no
#foreground = yes
[redis-cli]
client = yes
accept = 127.0.0.1:6379
connect = redisendpoint:6379
node is disconnecting with these below errors for every couple of minutes. We running these through docker containers.
same to me i think this is an issue with stunnel