请教下 nodejs 程序的占用

2023-03-24 17:45:54 +08:00
 jqtmviyu683

最近重拾 nodejs, 照抄了个简单的签到程序, 挂在服务器上用, 使用 pm2 启动, 但发现为啥内存占用那么高 就这和 hello word 一样简单的代码, 显示内存占用 63.6mb, 到底是我写的问题, 还是什么原因. 看了眼 docker 里跑的其他几个签到服务, 大多在十几 M 左右, 用 chatgpt 把这段代码转下, 同样用 pm2 启动, 也是占用非常少.

const schedule = require('node-schedule')
const axios = require('axios')
const profiles = require('./config')

const getNowTime = () => {
  return new Date()['toLocaleDateString']()
}

const request = () => {
  profiles.forEach(async item => {
    const {url, headers} = item
    console.log(`\n\n------${getNowTime()} - ${url}:开始签到------\n`)

    const res = await axios({
      url,
      method: 'post',
      headers,
    })

    if (res && res.data) {
      console.log(`------ ${getNowTime()} 签到成功 ------\n`)
      console.log(JSON.stringify(res.data))
    } else {
      console.log(`------ ${getNowTime()} 签到失败 ------\n`)
      console.log(res)
    }
  })
}

const checkin = () => {
  schedule.scheduleJob('0 0 7 * * *', () => {
    setTimeout(() => {
      request()
    }, Math.random() * 10 * 60 * 1000)
  })
}

console.log(`开始执行任务-${getNowTime()}`)
checkin()
1666 次点击
所在节点    Node.js
2 条回复
jqtmviyu683
2023-03-24 17:56:31 +08:00
发完就发现自己写了个 bug, 不该用 forEach 的
jqtmviyu683
2023-03-24 19:43:18 +08:00
感觉自己犯蠢了, 写个最简单的 setInterval + console.log()不就可以验证了吗?
51.9mb

v8.getHeapStatistics() 打印

{
total_heap_size: 7430144,
total_heap_size_executable: 524288,
total_physical_size: 6549504,
total_available_size: 4339934392,
used_heap_size: 4521952,
heap_size_limit: 4345298944,
malloced_memory: 139368,
peak_malloced_memory: 246160,
does_zap_garbage: 0,
number_of_native_contexts: 1,
number_of_detached_contexts: 0,
total_global_handles_size: 8192,
used_global_handles_size: 2368,
external_memory: 408283
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/926923

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX