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

Posted

技术标签:

【中文标题】使用会话文件存储随时间增加 CPU 峰值【英文标题】:Increasing CPU spikes over time with session-file-store 【发布时间】:2020-11-24 20:36:50 【问题描述】:

在 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 要么负责,要么被负责的代码调用:

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

我设置 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)

我的配置中的某些内容是否解释了为什么 session-file-store 会有一个每小时任务且容量不断增加的任务?这是一个护照本地猫鼬错误吗?

【问题讨论】:

【参考方案1】:

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

我通过将saveUninitialized 设置为false 解决了这个问题。

【讨论】:

以上是关于使用会话文件存储随时间增加 CPU 峰值的主要内容,如果未能解决你的问题,请参考以下文章

Infortrend GS/Gse统一存储1.38 OS正式发布提供下载更新

如果会话存储在文件中,为啥仍然使用 cookie 来存储它们?

Hive Streaming 追加 ORC 文件

如何存储用户的会话数据

阻塞会话存储

将用户会话变量存储在文件与数据库中