@sentry/browser
@sentry/node
raven-js
raven-node
_(corbeau pour nœud)_5.5.0
Création d'un nouveau problème puisque #1762 a été fermé.
Il existe une petite fuite de mémoire dans @sentry/node. Appeler setTag
avec de longues chaînes le rend beaucoup plus gros.
Ceci est identifiable car il ne s'agit pas seulement d'une fuite de mémoire, mais selon mes métriques de gouttelettes DO, cela provoque une augmentation permanente de l'utilisation du processeur et de la bande passante publique qui ne peut être corrigée qu'en redémarrant le serveur.
La photo montre ce qui se passe lorsque j'ai ajouté setTag
(11 juillet) et quand je l'ai supprimé (9 août).
Êtes-vous en mesure de fournir un cas de reproduction pour cela? setTag
avec plusieurs requêtes simultanées augmentera certainement l'empreinte mémoire, mais une fois qu'une portée est GC, la mémoire devrait revenir à la ligne de base.
@kamilogorek le code incriminé est ici : https://github.com/ParabolInc/action/blob/0bde4b002aa3d53fc00f1febcb39185079d827f2/packages/server/utils/sendToSentry.ts#L28 -L35
à première vue, la portée n'est pas GC'd.
cela peut être impopulaire, mais tout ce que je veux vraiment, c'est un appel API propre qui prend une exception et des variables. par exemple Sentry.captureExpection(error, {tags: {foo: 1}})
. cela éliminerait les étendues et les fuites de mémoire associées.
withScope
à la fin de son cycle de vie effectue une opération popScope
qui supprime la couche du tableau interne, il n'y a donc pas de référence forte à celle-ci - GC s'en occupe automatiquement.
fwfw vous pouvez changer votre appel en :
Sentry.withScope((scope) => {
scope.setUser(user)
scope.setTags(tags)
Sentry.captureException(error)
});
Commentaire le plus utile
@kamilogorek le code incriminé est ici : https://github.com/ParabolInc/action/blob/0bde4b002aa3d53fc00f1febcb39185079d827f2/packages/server/utils/sendToSentry.ts#L28 -L35
à première vue, la portée n'est pas GC'd.
cela peut être impopulaire, mais tout ce que je veux vraiment, c'est un appel API propre qui prend une exception et des variables. par exemple
Sentry.captureExpection(error, {tags: {foo: 1}})
. cela éliminerait les étendues et les fuites de mémoire associées.