


Comment surveiller les changements de mémoire dans l'environnement local et l'environnement de production dans le service Node ?
Lors de l'utilisation de Node dans un environnement de production en tant que langage de serveur, une concurrence excessive ou des problèmes de code peuvent entraîner un MOO (manque de mémoire) ou le processeur. être complètement chargé. Ce sont des problèmes courants sur les serveurs. À l'heure actuelle, il est facile de détecter les problèmes en surveillant le processeur et la mémoire, combinés aux journaux et aux versions.
[Recommandation du didacticiel vidéo : Tutoriel node js]
Ce chapitre présentera comment surveiller les changements de mémoire dans l'environnement local et l'environnement de production
Une instance d'application Node
Alors, comment surveiller dynamiquement les changements de mémoire d'un processus Node ?
Ce qui suit est un exemple de serveur Node, et c'est un exemple de problème de fuite de mémoire, et c'est une version simplifiée du problème que Shanyue positionne depuis longtemps dans l'environnement de production.
Dans ce problème de fuite de mémoire, la mémoire dans un seul conteneur est passée de 400 Mo d'origine à 700 Mo de MOO, ce qui s'est parfois produit en dessous de la limite de ressources du conteneur de 800 Mo, entraînant un redémarrage. Le problème n'a pas été localisé pendant un certain temps (le problème a été découvert trop tard, les données de la série chronologique d'il y a un demi-mois avaient été englouties, donc la version n'a pas été localisée), la limite de ressources a donc été augmentée à 1000M. Plus tard, il a été découvert que cela était dû au montage par ctx.request d'un grand champ dans la base de données
const Koa = require('koa') const app = new Koa() function getData () { return Array.from(Array(1000)).map(x => 10086) } app.use(async (ctx, next) => { ctx.data = getData() await next() }) app.use(ctx => { ctx.body = 'hello, world' }) app.listen(3200, () => console.log('Port: 3200'))
Surveillance de la mémoire des processus
Certains problèmes doivent être éliminés à temps dans l'environnement local et de test, pour éviter un impact plus important sur l'environnement de production. Il est ensuite crucial de comprendre comment surveiller la mémoire localement.
pidstat
est un package de la série sysstat
d'outils de débogage de performances Linux. Il peut être utilisé pour déboguer les problèmes de performances Linux, notamment la mémoire, le réseau, les E/S, le processeur, etc.
Cela fonctionne non seulement avec node
, mais fonctionne également avec tous les processus, y compris python
, java
et go
# -r: 指输出内存指标 # -p: 指定 pid # 1: 每一秒输出一次 # 100: 输出100次 $ pidstat -r -p pid 1 100
lors de l'utilisation de pidstat
Avant, vous devez trouver le processus pid
Comment trouver le pid du processus Node
Dans node
vous pouvez utiliser process.pid
pour trouver le processuspid
> process.pid 16425
Bien que pid
puisse être trouvé en écrivant du code, il est intrusif et peu pratique. Alors comment trouver pid
par des moyens non invasifs ? Il existe deux manières
- Combinaison avec des paramètres redondants
ps
Localisation du processus - Combinaison avec le numéro de port
lsof
Localisation du processus
$ node index.js shanyue # 第一种方法:通过多余的参数快速定位 pid $ ps -ef | grep shanyue root 31796 23839 1 16:38 pts/5 00:00:00 node index.js shanyue # 第二种方法:通过端口号定位 pid lsof -i:3200 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 31796 root 20u IPv6 235987334 0t0 TCP *:tick-port (LISTEN)
Utilisez pidstat pour surveiller la mémoire
À partir du code ci-dessus, nous pouvons savoir que le pid du service de nœud est 31796
Afin d'observer. les changements dynamiques de la mémoire, appliquer Un test de stress
$ ab -c 10000 -n 1000000 http://localhost:3200/
# -r: 指输出内存指标 # -p: 指定 pid # 1: 每一秒输出一次 # 100: 输出100次 $ pidstat -r -p 31796 1 100 Linux 3.10.0-957.21.3.el7.x86_64 (shuifeng) 2020年07月02日 _x86_64_ (2 CPU) UID PID minflt/s majflt/s VSZ RSS %MEM Command 19时20分39秒 0 11401 0.00 0.00 566768 19800 0.12 node 19时20分40秒 0 11401 0.00 0.00 566768 19800 0.12 node 19时20分41秒 0 11401 9667.00 0.00 579024 37792 0.23 node 19时20分42秒 0 11401 11311.00 0.00 600716 59988 0.37 node 19时20分43秒 0 11401 5417.82 0.00 611420 70900 0.44 node 19时20分44秒 0 11401 3901.00 0.00 627292 85928 0.53 node 19时20分45秒 0 11401 1560.00 0.00 621660 81208 0.50 node 19时20分46秒 0 11401 2390.00 0.00 623964 83696 0.51 node 19时20分47秒 0 11401 1764.00 0.00 625500 85204 0.52 node
a la signification suivante pour les indicateurs de sortie :
RSS
:Resident Set Size
, ensemble de mémoire résident, peut être compris comme mémoire, c'est la mémoire dont nous avons besoin pour surveiller IndicateursVSZ
:virtual size
, mémoire virtuelle
Comme le montre la sortie, après le stress test a été appliqué, la mémoire est passée de 19M à 85M.
Utiliser top pour surveiller la mémoire
pidstat
est un outil de performances Linux sous sysstat
, mais comment localiser les changements de mémoire sous Mac ?
Vous pouvez utiliser top/htop
$ htop -p 31796
Surveillance de la mémoire de l'environnement de production
Étant donné que la plupart des environnements de production actuels sont déployés dans k8s
, Par conséquent, la surveillance de la mémoire d'une certaine application dans l'environnement de production est essentiellement la surveillance de la mémoire d'un certain workload/deployment
par k8s Le flux de données de surveillance de la mémoire metric
est à peu près le suivant : <.>
-> k8s
-> metric server
-> prometheus
grafana
Les photos ci-dessus sont tirées des articles suivantsEnfin, le graphique en temps réel de surveillance de la mémoire d'une application peut être collecté dans
: grafana
Comme il y a trop de contenu de conception dans cette partie, je le présenterai dans les chapitres suivants
Cela s'applique non seulement aux services de nœuds, mais s'applique également à tout sur k8 workload
Résumé
Ce chapitre présente la surveillance de la mémoire du service Node dans l'environnement local et l'environnement de production
1 Utilisez local htop/top
ou pidstat
pour surveiller. mémoire de processus
2. Utilisation dans un environnement de productionk8s/metric-server/prometheus/grafana
Surveiller la mémoire de l'ensemble de l'application du nœud
Lorsqu'une fuite de mémoire est détectée dans un certain service, comment résoudre le problème ? Par conséquent, le prochain article parlera de
1. Comment l'environnement de production surveille la mémoire de l'ensemble de l'application
2 Lorsque le MOO se produit dans l'environnement de production, comment localiser rapidement
.3. Plusieurs exemples de positionnement de MOO dans des environnements de production réels
Pour plus de connaissances liées à la programmation, veuillez visiter : Introduction à la programmation ! !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Comment gérer le téléchargement de fichiers ? L'article suivant vous expliquera comment utiliser Express pour gérer les téléchargements de fichiers dans le projet de nœud. J'espère qu'il vous sera utile !

Comment supprimer un nœud avec nvm : 1. Téléchargez « nvm-setup.zip » et installez-le sur le lecteur C ; 2. Configurez les variables d'environnement et vérifiez le numéro de version via la commande « nvm -v » 3. Utilisez la commande « nvm » ; install" commande Installer le nœud ; 4. Supprimez le nœud installé via la commande "nvm uninstall".

Durant cette période, je développais un service HTML dynamique commun à toutes les catégories de documents Tencent. Afin de faciliter la génération et le déploiement des accès aux différentes catégories, et pour suivre la tendance de migration vers le cloud, j'ai envisagé d'utiliser Docker pour corriger. contenu du service et gérer les versions des produits de manière unifiée. Cet article partagera l'expérience d'optimisation que j'ai accumulée en train de servir Docker pour votre référence.

Cet article partagera avec vous l'outil de gestion de processus de Node "pm2" et expliquera pourquoi pm2 est nécessaire, comment installer et utiliser pm2, j'espère qu'il sera utile à tout le monde !

Explication détaillée et guide d'installation pour les nœuds de pignon Cet article introduira l'écosystème de pignon en détail - nœuds PI, un rôle clé dans l'écosystème de pignon et fournir des étapes complètes pour l'installation et la configuration. Après le lancement du réseau de test de la blockchain pèse, les nœuds PI sont devenus une partie importante de nombreux pionniers participant activement aux tests, se préparant à la prochaine version du réseau principal. Si vous ne connaissez pas encore Pinetwork, veuillez vous référer à ce qu'est Picoin? Quel est le prix de l'inscription? PI Utilisation, exploitation minière et sécurité. Qu'est-ce que Pinetwork? Le projet Pinetwork a commencé en 2019 et possède sa pièce exclusive de crypto-monnaie PI. Le projet vise à en créer un que tout le monde peut participer

Comment empaqueter le fichier exécutable nodejs avec pkg ? L'article suivant vous expliquera comment utiliser pkg pour empaqueter un projet Node dans un fichier exécutable. J'espère qu'il vous sera utile !

npm node gyp a échoué car les versions de « node-gyp.js » et « Node.js » ne correspondaient pas. La solution : 1. Videz le cache du nœud via « npm cache clean -f » 2. Via « npm install - ». g n" Installez le module n ; 3. Installez la version "node v12.21.0" via la commande "n v12.21.0".

L'authentification est l'une des parties les plus importantes de toute application Web. Ce didacticiel traite des systèmes d'authentification basés sur des jetons et de leurs différences par rapport aux systèmes de connexion traditionnels. À la fin de ce didacticiel, vous verrez une démo entièrement fonctionnelle écrite en Angular et Node.js. Systèmes d'authentification traditionnels Avant de passer aux systèmes d'authentification basés sur des jetons, examinons les systèmes d'authentification traditionnels. L'utilisateur fournit son nom d'utilisateur et son mot de passe dans le formulaire de connexion et clique sur Connexion. Après avoir effectué la demande, authentifiez l'utilisateur sur le backend en interrogeant la base de données. Si la demande est valide, une session est créée à l'aide des informations utilisateur obtenues à partir de la base de données et les informations de session sont renvoyées dans l'en-tête de réponse afin que l'ID de session soit stocké dans le navigateur. Donne accès aux applications soumises à
