Mongoose: 4.7.1 => 4.7.2: Se agotó el tiempo de espera de la conexión MongoError

Creado en 9 dic. 2016  ·  44Comentarios  ·  Fuente: Automattic/mongoose

Al probar [email protected] / [email protected] , obtengo:

MongoError: se agotó el tiempo de espera de la conexión 2 a XXXXXX
en Function.MongoError.create (/node_modules/mongodb-core/lib/error.js:29:11)
en el zócalo.(/node_modules/mongodb-core/lib/conexión/conexión.js:186:20)
en Socket.g (eventos.js:286:16)
en emitNone (eventos.js:86:13)
en Socket.emit (eventos.js:185:7)
en Socket._onTimeout (net.js:333:8)
en tryOnTimeout (timers.js:224:11)
en Timer.listOnTimeout (timers.js:198:5)' } 'se agotó el tiempo de espera de la conexión 2 a XXXXXX

esto no sucede con [email protected] / [email protected].

Más detalles:

  • consulta: agregado con allowDiskUse(true).read('secundarioPreferido').cursor()
  • tiempo: el error ocurre alrededor de 35 segundos después de enviar la consulta (antes de que se reciban los primeros resultados)
  • versión del nodo: v6.3.0
  • versión npm: 3.10.9
  • opciones de conexión:
{
 "socketOptions": {
    "socketTimeoutMS": 240000,
    "keepAlive": 10000,
    "connectTimeoutMS" : 30000
} 
  • consulta:
[
    { $match: {
            _id: { $lt: oid },
            signature: { $exists: true }
        }
    },
    { $group: { 
            _id: { myid: '$myid', signature: '$signature' },
            count: { $sum:  1 },
            myid: { $first: '$myid' },
            docs: { $push: { _id: '$_id', name: '$name' } }
        }
    },
    { $match: {
            count: { $gt : 1 }
        }
    }
]
docs

Comentario más útil

El problema está sin resolver desde hace algún tiempo.
¿Qué debemos hacer para arreglar esto?
En algún momento me gustaría actualizar a la versión más reciente, pero solo puedo hacerlo cuando esto se haya resuelto.

Todos 44 comentarios

Estoy experimentando el mismo problema, [email protected] , [email protected]

  • establecer socketTimeoutMS en valores más altos o 0 no hace ninguna diferencia
  • establecer connectTimeoutMS en valores más altos o 0 no hace ninguna diferencia
  • no se activa ningún evento "cerrar" o "reconectado", solo un "tiempo de espera", lo que da como resultado un error de Mongoose en la devolución de llamada

Revertir a [email protected] / [email protected] resuelve el problema, es decir, no provoca tiempos de espera

De [email protected] a 2.2.12, el detector de eventos de tiempo de espera cambió de "una vez" a "encendido", ¿quizás esto tenga algo que ver con eso?

¿O deberíamos publicar esto como un problema en el controlador nativo de mongodb?

@silentjohnny Obteniendo el mismo problema con [email protected]

Publicaría un problema en el controlador nativo mongodb, mongoose no hace mucho en cuanto a la conexión inicial.

Extraño. Estoy experimentando el mismo problema pero con [email protected] y versiones superiores que usan [email protected]
¡Con [email protected] y [email protected] funciona! .
Mi consulta agregada no tiene opciones, así que no sé, tal vez esa sea la diferencia entre el problema original y yo @dcolens .

¿Alguien abrió un problema con el controlador nativo? para poder seguirlo...
Ahora mismo me quedo con [email protected]

[email protected] actualizado a [email protected] que incluye una solución para monitorear el tiempo de espera de las operaciones y generar un evento de tiempo de espera en las operaciones en ejecución @ 1284917

Pronto Mongoose se actualiza a [email protected] , lo intentaré.

El mismo problema para mí, y ni siquiera estoy seguro de si se trata solo de agregados de ejecución prolongada que se agotan, o si es aleatorio y no es un tiempo de espera real en absoluto. A veces parece que el tiempo de espera se agota casi de inmediato, pero otras veces se ejecuta durante 30 segundos más o menos. En este caso particular, tengo cuatro agregados.execs ejecutándose a la vez.

Volver a [email protected] y [email protected] lo soluciona, así que lo haré por ahora.

Es de esperar que esto se solucione en la próxima versión, ya que mongoose 4.7.7 usa [email protected]. De cualquier manera, este no es realmente un problema de mangosta como dijo @ vkarpov15 , sino que tiene más que ver con mongodb. Voy a cerrar esto por ahora, pero si sigue teniendo el mismo problema después del próximo lanzamiento, debe abrir un ticket o un PR en el extremo de mongodb.

Creo que puede haber más en este problema de lo que parece. Tuve que volver a 4.4.20 para detener por completo estos tiempos de espera agregados en todas las circunstancias. 4.7.x y 4.6.x tenían tiempos de espera falsos muy rápidos en algunas circunstancias de múltiples ejecuciones simultáneas. Me salté la 4.5 y volví directamente a una buena versión conocida (4.4.20) que estamos usando en producción, y que resolvió el problema por completo, pero TBH todavía estoy desconcertado por lo que está sucediendo. Lo siento, no tengo más datos para agregar, pero no estoy seguro de si es solo un problema con la versión del controlador mongodb nativo que está usando mongoose, o si hay más de un factor contribuyente en el trabajo .

Teniendo el mismo problema con [email protected] y [email protected]. Los tiempos muertos son realmente extraños. Esta es bastante corta (alrededor de 5 s) y muy reproducible, pero otras consultas tardan más de 5 s y no se agotan.

Estoy seguro de que los tiempos de espera a menudo son falsos. En un escenario que estaba viendo, comencé cuatro operaciones de agregado.exe simultáneas que demoran alrededor de 30 segundos. Uno se agotó en 8 segundos, otro se agotó en 20 segundos, pero los otros dos se completaron normalmente en 30 segundos. La repetición provocó un orden de tiempo de espera diferente, pero siempre un resultado similar. Sospecho que los tiempos de espera se configuran incorrectamente en las conexiones incorrectas, o no se eliminan cuando se completa una operación, por lo que se activan inesperadamente en una ejecución posterior. Algo así de todos modos. Desafortunadamente, no tengo tiempo en este momento para seguirlo.

[email protected] parece haber resuelto los tiempos de espera para mí. @ steve-p-com como está sugiriendo, los tiempos de espera en 4.7.2 eran falsos y causaron que se emitieran eventos de error en la conexión incorrecta, esto fue resuelto por [email protected] y [email protected] debería funciona bien en tu caso. ¿Hiciste una prueba con esa versión?

Todavía no probé 4.7.9 o 4.8.0, tal vez [email protected] introdujo una regresión, lo que explicaría el problema que está experimentando @flosky . ¿Ese tiempo de espera también ocurre en [email protected]?

He vuelto a probar con 4.8.1 hoy y no he tenido ningún problema con tiempos de espera inesperados. Primero eliminé todos los cachés de npm y los cachés de hilo, luego eliminé node_modules y luego reinstalé todo. Hasta aquí todo bien.

A mí también me pasó con 4.8.1. Regresé a muchas versiones de Mongoose y MongoDB y me surgía el problema todo el tiempo.

@thenitai , ¿tiene más contexto? ¿Podemos ver cómo configura su conexión mongoDB?

@varunjayaraman Descubrí que nuestro código de error de dominio detecta el error y, por lo tanto, reinicia nuestra aplicación. Sin embargo, el problema sigue ahí.

No estoy muy seguro de lo que necesita ver en la configuración de nuestra conexión. ¿Te refieres a las opciones de conexión? Si es así, son:

var dbOptions = {
            db: { native_parser: true },
            server: {
                auto_reconnect: true,
                socketOptions: {
                    keepAlive: 1, 
                    connectTimeoutMS: 300000,
                    socketTimeoutMS: 300000
                }
            }
        };

Tengo el mismo problema también. incluso con la última versión v4.8.4

Acabo de encontrar el problema. en mi caso, es porque el uso de la memoria del servidor es demasiado alto (siempre 95% ~ 99%), después de aumentar la memoria, ya no hay problema.

También veo este problema en mi servidor con Mongoose 4.7.7 , MongoDB 3.4.1 y Node 4.7.2 . Cuando el uso de memoria es alto en mi servidor, los tiempos de espera parecen ocurrir aleatoriamente en serie:

CosWebsite-27 MongoError: connection 42 to 127.0.0.1:27017 timed out
CosWebsite-27     at Function.MongoError.create (/home/cos/cos/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:29:11)
CosWebsite-27     at Socket.<anonymous> (/home/cos/cos/node_modules/mongodb/node_modules/mongodb-core/lib/connection/connection.js:186:20)
CosWebsite-27     at Socket.g (events.js:260:16)
CosWebsite-27     at emitNone (events.js:67:13)
CosWebsite-27     at Socket.emit (events.js:166:7)
CosWebsite-27     at Socket.wrapped (/home/cos/cos/node_modules/newrelic/lib/transaction/tracer/index.js:183:28)
CosWebsite-27     at Socket.wrappedEmit [as emit] (/home/cos/cos/node_modules/newrelic/lib/transaction/tracer/index.js:220:46)
CosWebsite-27     at Socket._onTimeout (net.js:333:8)
CosWebsite-27     at _runOnTimeout (timers.js:537:11)
CosWebsite-27     at _makeTimerTimeout (timers.js:528:3)
CosWebsite-27     at Timer.unrefTimeout (timers.js:597:5)
... times 6
CosWebsite-27 GET /clans/compas-c-r-98QP9J2G/members 500 10569.300 ms - 9893
CosWebsite-27 GET /players/1000-99JQVQ9VU 500 12388.484 ms - 9849
CosWebsite-27 GET /players/R0YUPPRR/profile 500 8204.622 ms - 9857
CosWebsite-27 GET /players/UG8YJUJY/profile 500 4622.819 ms - 9857
CosWebsite-27 GET /clans/next-state-P8RYGQYV 500 11526.859 ms - 9861
CosWebsite-27 GET /clans/YY2CCUVV 500 6755.380 ms - 9817

Como puede ver, ninguna de las solicitudes duró más de 12 segundos. Mi conector mangosta está configurado de esta manera:

const mongoDB = {
    uri: "mongodb://127.0.0.1:27017/XXX",
    options: {
        host: '127.0.0.1',
        port: '27017',
        database: "XXX",
        compression: false,
        server: {
            poolSize: 5,
            auto_reconnect: true,
            socketOptions: {
                socketTimeoutMS: 0,
                connectTimeoutMS: 0
            }
        },
        promiseLibrary: Promise
    }
};

¿Alguna idea de lo que podría estar saliendo mal?

@adrienbaron Yo también!!!
Que alguien me ayude por favor.

¿Alguien ha presentado un informe de error a los desarrolladores del controlador mongo nativo?

¿Este problema todavía existe en 4.9.1?

Sí, el problema aún existe en 4.9.1....

[email protected]
[email protected]
[email protected]

Tuve el mismo problema hoy después de actualizar a la última versión de mongoose, luego bajé a 4.7.1 y ¡todo funciona perfectamente!

El problema está sin resolver desde hace algún tiempo.
¿Qué debemos hacer para arreglar esto?
En algún momento me gustaría actualizar a la versión más reciente, pero solo puedo hacerlo cuando esto se haya resuelto.

Actualicé Mongoose de 4.4.17 a 4.7.9 hace aproximadamente un mes. Desde entonces, un cronjob diario ha fallado tres veces, siempre con un error de tiempo de espera de conexión de mongo.

Cambiaré a Mongoose 4.7.1 y veré si esto ayuda.

editar: el mensaje de error

2017-04-19 03:09:23: You have triggered an unhandledRejection, you may have forgotten to catch a Promise rejection:
MongoError: connection 261 to localhost:27017 timed out
    at Function.MongoError.create (/var/www/someproject/node_modules/mongodb-core/lib/error.js:29:11)
    at Socket.<anonymous> (/var/www/someproject/node_modules/mongodb-core/lib/connection/connection.js:186:20)
    at Socket.g (events.js:286:16)
    at emitNone (events.js:86:13)
    at Socket.emit (events.js:185:7)
    at Socket._onTimeout (net.js:333:8)
    at tryOnTimeout (timers.js:224:11)
    at Timer.listOnTimeout (timers.js:198:5)

@ centigrade-thomas-becker Tuve el mismo problema durante más de un mes en producción, ayer cambié a 4.7.1, ¡no más problemas!

mismo problema ocurre @ 4.7.7

Con Mongo 4.7.1 hay menos problemas que con 4.7.9, pero sigo recibiendo el mensaje de error ocasional al guardar en MongoDB:

2017-04-30 03:09:32: Error: connection timeout
    at .<anonymous> (/var/www/someproject/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js:168:17)
    at emitTwo (events.js:106:13)
    at emit (events.js:191:7)
    at listener (/var/www/someproject/node_modules/mongodb/lib/db.js:1791:14)
    at emitOne (events.js:96:13)
    at emit (events.js:188:7)
    at .<anonymous> (/var/www/someproject/node_modules/mongodb/lib/server.js:270:14)
    at g (events.js:286:16)
    at emitOne (events.js:96:13)
    at emit (events.js:188:7)
    at .<anonymous> (/var/www/someproject/node_modules/mongodb-core/lib/topologies/server.js:322:12)
    at emitOne (events.js:96:13)
    at emit (events.js:188:7)
    at .<anonymous> (/var/www/someproject/node_modules/mongodb-core/lib/connection/pool.js:271:12)
    at g (events.js:286:16)
    at emitTwo (events.js:106:13)
    at emit (events.js:191:7)
    at Socket.<anonymous> (/var/www/someproject/node_modules/mongodb-core/lib/connection/connection.js:175:10)
    at Socket.g (events.js:286:16)
    at emitNone (events.js:86:13)
    at Socket.emit (events.js:185:7)
    at Socket._onTimeout (net.js:333:8)
    at tryOnTimeout (timers.js:224:11)
    at Timer.listOnTimeout (timers.js:198:5)

El error ocurre en una máquina virtual Linux que ejecuta Ubuntu 15.04

Lo mismo aquí con:

├─┬ [email protected]
│ ├─┬ [email protected]
│ │ ├── [email protected]

mongo versión @ 3.2.11

en AWS EC2.

¿Alguna actualización/solución? ¿Tendría keepAlive: true algún efecto positivo?

No estoy seguro de si esto ayuda a alguien, pero en nuestro caso nos dimos cuenta de que estábamos pasando nuestros parámetros de tiempo de espera ( socketTimeoutMS etc.) a través options.server . ¡Esto estaba _mal_! Estamos utilizando un conjunto de réplicas y, como tal, nuestras opciones deberían ser las siguientes:

En nuestro caso, la aplicación realmente necesitaba la capacidad de conectarse a un servidor normal o réplica, así que lo hicimos:

const serverOptions = {
  poolSize: 100,
  socketOptions: {
    socketTimeoutMS: 60000
  }
};

mongoose.createConnection(dbpath, {
  server: serverOptions,
  replset: serverOptions
});

¡Espero que eso ayude a alguien!

Hola, todos,
Estoy usando mlab para alojar mi base de datos. me sale este error
Error de conexión de Mongo DB: {[MongoError: conexión 0 a ds155841.mlab. com:xxxxx tiempo agotado'}

@RemeAjayi Creo que esto no tiene nada que ver con este boleto.
Debería intentar / crear otro después de investigar el problema.

@ht2 me salvaste el día ❤️

¿Hay alguna solución viable al problema original?

En caso de que ayude a alguien, experimenté este problema al paralelizar 2 consultas brutales find() (usando el patrón Promise).

Torneado

Promise.all([
  col1.find({longQuery: true}),
  col2.find({longQuery: true})
])
.spread(function(result1, result2) {
  //stuff
});

en un enfoque secuencial

col1.find({longQuery: true})
.then(function(result1) {
  return Promise.all([
    result1,
    col2.find({longQuery: true})
  ]);
})
.spread(function(result1, result2) {
  //stuff
});

lo hizo funcionar

@cyrilchapon pensó que estaba funcionando para mí, pero su enfoque secuencial no resolvió mi problema:/

es intermitente... a veces funciona, a veces se agota...

¿Por qué este cierre silencioso?

Una continuación de mi comentario anterior https://github.com/Automattic/mongoose/issues/4789#issuecomment -298849907

Moví la base de datos infractora de una máquina virtual a un contenedor docker con linux, nodeJS y mongoDB completamente nuevos. Creé una prueba de estrés que no hace más que truncar y rellenar la base de datos todo el día. Descubrí que aproximadamente 1 de cada 6000 ejecuciones de prueba dan como resultado un error de tiempo de espera.

Supongo que tuve la misma experiencia después de mi último comentario, olvidé mencionarlo.

Pero actualizar el nodo a una de sus últimas versiones junto con todos los demás departamentos aparentemente funcionó.

Ahora, con el comentario anterior, creo que es una cuestión de error heredado.

También estaba teniendo el mismo problema con mongo 3.6.2 y mongoose 4.9.2
Lo arreglé pasando parámetros de conexión adicionales

MONGO_URI=mongodb://user:[email protected]:27017/dbname?keepAlive=true&poolSize=30&autoReconnect=true&socketTimeoutMS=360000&connectTimeoutMS=360000

@mzahidriaz Muchas gracias, sus soluciones me funcionan, pero ¿puede explicar o hacer referencia a un enlace sobre cómo eligió esos parámetros para resolver este problema?

@ MinhNguyen41092 en este momento, los únicos documentos son los documentos del controlador MongoDB http://mongodb.github.io/node-mongodb-native/3.1/api/MongoClient.html#connect . agregaremos detalles sobre esto a http://mongoosejs.com/docs/connections.html

Para aquellos que experimentan errores intermitentes, también los tuve en mongoose-4.13.11 con mongodb-2.2.35 mongodb-core-2.1.19 en un entorno particular. Varias consultas en diferentes puntos de nuestro conjunto de pruebas, aunque en su mayoría probaban una parte particular de nuestra aplicación que tiene consultas más pesadas y hace cosas en paralelo IIRC, todas recibían este mensaje de error. Y todo el conjunto de pruebas ni siquiera tarda 15 segundos en ejecutarse, por lo que de ninguna manera debería haber estado presionando los tiempos de espera predeterminados de 30 segundos en primer lugar:

     MongoError: connection 0 to localhost:27017 timed out
      at Function.MongoError.create (node_modules/mongoose/node_modules/mongodb-core/lib/error.js:29:11)
      at Socket.<anonymous> (node_modules/mongoose/node_modules/mongodb-core/lib/connection/connection.js:200:20)
      at Socket._onTimeout (net.js:448:8)

Esto solo sucedió en nuestro servidor de compilación de prueba de CI. No pude reproducirlo en mi máquina de desarrollo.

(En mi propio sistema (repositorio privado, esto es para mi propia referencia en caso de que necesite desenterrar esto nuevamente), este error aparece al menos en los números de compilación 358, 356, 355, 352).

Después de activar useMongoClient: true , las pruebas parecen pasar de manera confiable en el entorno de CI hasta el momento. Tuve tres ejecuciones exitosas con solo ese cambio, mientras que muchas ejecuciones secuenciales anteriores fallaron debido al extraño error de tiempo de espera.

Creo que @thenitai @steve-p-com @adrienbaron también estaba experimentando los extraños tiempos de espera falsos. Creo que el error les estaba ocurriendo a ustedes antes de que saliera la versión 4.11, que incluso trajo useMongoClient: true como una opción. ¿Puede decir si eso marcó la diferencia para sus cargas de trabajo?

[email protected]
[email protected]
[email protected]
Tiene el mismo problema, 1,5 millones de errores en la barra antivuelco durante un par de días, ¿con qué se puede conectar? ¿Cómo resolver?
screen shot 2019-02-25 at 2 53 37 pm
screen shot 2019-02-25 at 2 54 01 pm
screen shot 2019-02-25 at 2 55 27 pm

@SergeyVatz vea la respuesta a su pregunta en #5376

¿Fue útil esta página
0 / 5 - 0 calificaciones