使用会话文件存储随着时间的推移增加 CPU 峰值

Increasing CPU spikes over time with session-file-store

2 月 19 日左右,我的服务器开始出现每小时增加的 CPU 个峰值:

我将这些跟踪到为我的网站提供服务的节点进程。 Git 显示 1 月 12 日和 2 月 24 日之间没有变化。2 月 24 日,我进行了以下升级:

-    "mongoose": "^4.11.6",
+    "mongoose": "^5.9.2",
-    "passport-local-mongoose": "^4.1.0",
+    "passport-local-mongoose": "^6.0.1",
-    "jwt-simple": "^0.5.1",
+    "jwt-simple": "^0.5.6",
-    "orm": "^5.0.2",
+    "orm": "^5.0.5",

到 7 月,我的 CPU 的所有时间都达到了 100%

一些分析显示 session-file-store 负责或正在被负责的代码调用:

这是调用树,虽然我不是很明白,但它可能提供了信息

我设置会话文件存储的代码是

const next = require("next")
const express = require("express")
const passport = require("passport")
const session = require("express-session")
const FileStore = require("session-file-store")(session)

const app = next({
  dir: ".",
  dev: config.dev
})

app
  .prepare()
  .then(() => {
    server = express()

    server.use(cookieParser())
    server.use(
      session({
        secret: process.env.SESSION_SECRET,
        store: new FileStore({
          path: "/tmp/sessions",
          secret: process.env.SESSION_SECRET
        }),
        resave: false,
        rolling: true,
        saveUninitialized: true,
        httpOnly: true,
        cookie: {
          maxAge: 60000 * 60 * 24 * 7 * 4 // 4 weeks
        }
      })
    )
    server.use(passport.initialize())
    server.use(passport.session())
    passportConfig(passport)

我的配置中有什么东西可以解释为什么会话文件存储会每小时执行一次任务且容量不断增加吗?这是 passport-local-mongoose 错误吗?

问题是我使用的是会话选项 saveUninitialized。这导致了大量无用的会话文件,这些文件以某种方式每小时处理一次。

我通过将 saveUninitialized 设置为 false 来解决问题。