文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Node服务内存如何监控

2024-04-02 19:55

关注

本篇文章为大家展示了Node服务内存如何监控,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一个 Node 应用实例

所以,如何动态监控一个 Node 进程的内存变化呢?

以下是一个 Node Server 的示例,并且是一个有内存泄漏问题的示例,并且是山月在生产环境定位了很久的问题的精简版。

  ❝    那次内存泄漏问题中,导致单个容器中的内存从原先的 400M 暴涨到 700M,在 800M 的容器资源限制下偶尔会发生 OOM,导致重启。一时没有定位到问题 (发现问题过迟,半个月前的时序数据已被吞没,于是未定位到 Release),于是把资源限制上调到 1000M。后发现是由 ctx.request 挂载了数据库某个大字段而致    ❞

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'))

进程内存监控

一些问题需要在本地及测试环境得到及时扼杀,来避免在生产环境造成更大的影响。那么了解在本地如何监控内存就至关重要。

pidstat 是 sysstat 系列 linux 性能调试工具的一个包,竟然用它来调试 linux 的性能问题,包括内存,网络,IO,CPU 等。

「这不仅试用与 node,而且适用于一切进程,包括 python,java 以及 go」

# -r: 指输出内存指标  # -p: 指定 pid  # 1: 每一秒输出一次  # 100: 输出100次  $ pidstat -r -p pid 1 100

而在使用 pidstat 之前,需要先找到进程的 pid

如何找到 Node 进程的 pid

在 node 中可以通过 process.pid 来找到进程的 pid

> process.pid  16425

虽然通过写代码可以找到 pid,但是具有侵入性,不太实用。那如何通过非侵入的手段找到 pid 呢?有两种办法

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2.  通过多余的参数结合 ps 定位进程

  3.  通过端口号结合 lsof 定位进程 

$ 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)

使用 pidstat 监控内存

Node服务内存如何监控

从以上代码中可以知道,node 服务的 pid 为 31796,为了可以观察到内存的动态变化,再施加一个压力测试

$ 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

对于输出指标的含义如下

从输出可以看出,「当施加了压力测试后,内存由 19M 涨到了 85M。」

使用 top 监控内存

pidstat 是属于 sysstat 下的 linux 性能工具,但在 mac 中,如何定位内存的变化?

此时可以使用 top/htop

$ htop -p 31796

Node服务内存如何监控

使用 htop 监控内存

生产环境内存监控

由于目前生产环境大都部署在 k8s,「因此生产环境对于某个应用的内存监控本质上是 k8s 对于某个 workload/deployment 的内存监控」,关于内存监控 metric 的数据流向大致如下:

k8s -> metric server -> prometheus -> grafana

架构图如下:

Node服务内存如何监控

Node服务内存如何监控

❝    以上图片取自以下文章

最终能够在 grafana 中收集到某一应用的内存监控实时图:

由于本部分设计内容过多,我将在以下的章节中进行介绍

「这不仅仅适用于 node 服务,而且适用于一切 k8s 上的 workload」

上述内容就是Node服务内存如何监控,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯