mirror of
https://github.com/misskey-dev/misskey.git
synced 2026-03-23 04:23:35 +00:00
Inline memory measurement script to fix base ref compatibility
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
This commit is contained in:
66
.github/workflows/get-backend-memory.yml
vendored
66
.github/workflows/get-backend-memory.yml
vendored
@@ -62,8 +62,70 @@ jobs:
|
||||
run: pnpm --filter backend migrate
|
||||
- name: Measure memory usage
|
||||
run: |
|
||||
# Start the server and measure memory usage
|
||||
node packages/backend/scripts/measure-memory.mjs > ${{ matrix.memory-json-name }}
|
||||
# Inline script to start the server and measure memory usage
|
||||
# This is inlined to work with both base and head refs
|
||||
node --input-type=module -e '
|
||||
import { fork } from "node:child_process";
|
||||
import { setTimeout } from "node:timers/promises";
|
||||
import { readFile } from "node:fs/promises";
|
||||
import { execSync } from "node:child_process";
|
||||
|
||||
const STARTUP_TIMEOUT = 120000;
|
||||
const MEMORY_SETTLE_TIME = 10000;
|
||||
|
||||
async function measureMemory() {
|
||||
const serverProcess = fork("./packages/backend/built/boot/entry.js", [], {
|
||||
cwd: process.cwd(),
|
||||
env: { ...process.env, NODE_ENV: "test" },
|
||||
stdio: ["pipe", "pipe", "pipe", "ipc"],
|
||||
});
|
||||
|
||||
let serverReady = false;
|
||||
serverProcess.on("message", (msg) => { if (msg === "ok") serverReady = true; });
|
||||
serverProcess.stdout?.on("data", (d) => process.stderr.write("[server] " + d));
|
||||
serverProcess.stderr?.on("data", (d) => process.stderr.write("[server] " + d));
|
||||
serverProcess.on("error", (e) => process.stderr.write("[error] " + e + "\n"));
|
||||
|
||||
const start = Date.now();
|
||||
while (!serverReady) {
|
||||
if (Date.now() - start > STARTUP_TIMEOUT) {
|
||||
serverProcess.kill("SIGTERM");
|
||||
throw new Error("Server startup timeout");
|
||||
}
|
||||
await setTimeout(100);
|
||||
}
|
||||
const startupTime = Date.now() - start;
|
||||
process.stderr.write("Server started in " + startupTime + "ms\n");
|
||||
|
||||
await setTimeout(MEMORY_SETTLE_TIME);
|
||||
|
||||
const pid = serverProcess.pid;
|
||||
let memoryInfo;
|
||||
try {
|
||||
const status = await readFile("/proc/" + pid + "/status", "utf-8");
|
||||
const rss = status.match(/VmRSS:\s+(\d+)\s+kB/);
|
||||
memoryInfo = { rss: rss ? parseInt(rss[1], 10) * 1024 : null };
|
||||
} catch {
|
||||
try {
|
||||
const ps = execSync("ps -o rss= -p " + pid, { encoding: "utf-8" });
|
||||
memoryInfo = { rss: parseInt(ps.trim(), 10) * 1024 };
|
||||
} catch {
|
||||
memoryInfo = { rss: null, error: "Could not measure memory" };
|
||||
}
|
||||
}
|
||||
|
||||
serverProcess.kill("SIGTERM");
|
||||
let exited = false;
|
||||
await new Promise((resolve) => {
|
||||
serverProcess.on("exit", () => { exited = true; resolve(); });
|
||||
setTimeout(10000).then(() => { if (!exited) serverProcess.kill("SIGKILL"); resolve(); });
|
||||
});
|
||||
|
||||
console.log(JSON.stringify({ timestamp: new Date().toISOString(), startupTimeMs: startupTime, memory: memoryInfo }, null, 2));
|
||||
}
|
||||
|
||||
measureMemory().catch((e) => { console.error(JSON.stringify({ error: e.message })); process.exit(1); });
|
||||
' > ${{ matrix.memory-json-name }}
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
|
||||
Reference in New Issue
Block a user