Sentry-javascript: withScope fuga de memoria, muy obvia cuando se usa scope.setTag en @ sentry / node

Creado en 12 ago. 2019  ·  3Comentarios  ·  Fuente: getsentry/sentry-javascript

Paquete + Versión

  • [] @sentry/browser
  • [x] @sentry/node
  • [] raven-js
  • [] raven-node _ (cuervo por nodo) _
  • [ ] otro:

Versión:

5.5.0

Descripción

Creando una nueva edición desde que se cerró # 1762.
Existe una pequeña pérdida de memoria en @ sentry / node. Llamar a setTag con algunas cadenas largas lo hace mucho más grande.
Esto es identificable porque no es solo una pérdida de memoria, sino que, de acuerdo con mis métricas de gotas de DO, provoca un aumento permanente en el uso de la CPU y el ancho de banda público que solo se puede solucionar reiniciando el servidor.
La imagen muestra lo que sucede cuando agregué setTag (11 de julio) y cuando lo eliminé (9 de agosto).
System memory (1)

Needs Reproduction

Comentario más útil

@kamilogorek, el código ofensivo está aquí: https://github.com/ParabolInc/action/blob/0bde4b002aa3d53fc00f1febcb39185079d827f2/packages/server/utils/sendToSentry.ts#L28 -L35

por lo que parece, el alcance no está recibiendo GC.

puede ser impopular, pero todo lo que realmente quiero es una llamada API limpia que tome una excepción y variables. por ejemplo, Sentry.captureExpection(error, {tags: {foo: 1}}) . eso eliminaría los ámbitos y las pérdidas de memoria asociadas.

Todos 3 comentarios

¿Puede proporcionar algún caso de reproducción para esto? setTag con múltiples solicitudes simultáneas seguramente aumentará la huella de memoria, pero una vez que un alcance es GC, la memoria debería caer a la línea de base.

@kamilogorek, el código ofensivo está aquí: https://github.com/ParabolInc/action/blob/0bde4b002aa3d53fc00f1febcb39185079d827f2/packages/server/utils/sendToSentry.ts#L28 -L35

por lo que parece, el alcance no está recibiendo GC.

puede ser impopular, pero todo lo que realmente quiero es una llamada API limpia que tome una excepción y variables. por ejemplo, Sentry.captureExpection(error, {tags: {foo: 1}}) . eso eliminaría los ámbitos y las pérdidas de memoria asociadas.

withScope al final de su ciclo de vida realiza una operación popScope que elimina la capa de la matriz interna, por lo que no hay una referencia sólida a ella: GC se encarga de ello automáticamente.
fwfw puede cambiar su llamada a:

Sentry.withScope((scope) => {
  scope.setUser(user)
  scope.setTags(tags)
  Sentry.captureException(error)
});
¿Fue útil esta página
0 / 5 - 0 calificaciones