From f2121180ae9e432e189b64ad3e80897fac0dc2ce Mon Sep 17 00:00:00 2001 From: undefined Date: Sun, 2 Feb 2025 16:43:02 +0800 Subject: [PATCH] judge: fix memory limit --- packages/hydrojudge/package.json | 10 +++++----- packages/hydrojudge/src/compile.ts | 2 +- packages/hydrojudge/src/compiler.ts | 2 +- packages/hydrojudge/src/judge/run.ts | 4 ++-- packages/hydrojudge/src/sandbox.ts | 2 ++ packages/hydrooj/setting.yaml | 2 ++ 6 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/hydrojudge/package.json b/packages/hydrojudge/package.json index 485f414a0..a20688d53 100644 --- a/packages/hydrojudge/package.json +++ b/packages/hydrojudge/package.json @@ -1,7 +1,7 @@ { "name": "@hydrooj/hydrojudge", "bin": "bin/hydrojudge.js", - "version": "3.4.1", + "version": "3.4.2", "main": "./src/index.ts", "author": "undefined ", "repository": "https://github.com/hydro-dev/Hydro.git", @@ -9,9 +9,9 @@ "@hydrooj/utils": "workspace:^", "adm-zip": "0.5.14", "cac": "^6.7.14", - "p-queue": "^8.0.1", - "schemastery": "^3.14.7", - "semver": "^7.6.3", + "p-queue": "^8.1.0", + "schemastery": "^3.15.0", + "semver": "^7.7.0", "shell-quote": "^1.8.2", "superagent": "^10.1.1", "ws": "^8.18.0" @@ -21,6 +21,6 @@ "devDependencies": { "@types/adm-zip": "^0.4.34", "@types/shell-quote": "^1.7.5", - "@types/ws": "^8.5.13" + "@types/ws": "^8.5.14" } } diff --git a/packages/hydrojudge/src/compile.ts b/packages/hydrojudge/src/compile.ts index a7c609367..1e9f525f8 100644 --- a/packages/hydrojudge/src/compile.ts +++ b/packages/hydrojudge/src/compile.ts @@ -23,7 +23,7 @@ export default async function compile( copyOutCached: [target], env: { HYDRO_LANG: lang.key }, time: lang.compile_time_limit || 10000, - memory: lang.compile_memory_limit || 256 * 1024 * 1024, + memory: lang.compile_memory_limit || 256, }, `compile[${lang.key}]`, 3, diff --git a/packages/hydrojudge/src/compiler.ts b/packages/hydrojudge/src/compiler.ts index 43aa26ad5..36e98e821 100644 --- a/packages/hydrojudge/src/compiler.ts +++ b/packages/hydrojudge/src/compiler.ts @@ -10,7 +10,7 @@ export async function compilerVersions(langs: Record) { const res = await runQueued(version, { copyIn: {}, time: 10000, - memory: 256 * 1024 * 1024, + memory: 256, }, 'compilerVersions', 5); result[lang] = `${res.stdout}\n${res.stderr}`.trim(); } diff --git a/packages/hydrojudge/src/judge/run.ts b/packages/hydrojudge/src/judge/run.ts index b008c6d73..9aedd8e59 100644 --- a/packages/hydrojudge/src/judge/run.ts +++ b/packages/hydrojudge/src/judge/run.ts @@ -17,7 +17,7 @@ export const judge = async (ctx: JudgeTask) => { copyIn: execute.copyIn, // Allow 2x limits for better debugging time: parseTimeMS(ctx.config.time || '1s') * 2, - memory: parseMemoryMB(ctx.config.memory || '128m'), + memory: parseMemoryMB(ctx.config.memory || '256m'), filename: ctx.config.filename, addressSpaceLimit: address_space_limit, processLimit: process_limit, @@ -32,7 +32,7 @@ export const judge = async (ctx: JudgeTask) => { const message: string[] = []; if (time > parseTimeMS(ctx.config.time || '1s')) { status = STATUS.STATUS_TIME_LIMIT_EXCEEDED; - } else if (memory > parseMemoryMB(ctx.config.memory || '128m') * 1024) { + } else if (memory > parseMemoryMB(ctx.config.memory || '256m') * 1024) { status = STATUS.STATUS_MEMORY_LIMIT_EXCEEDED; } else if (code) { status = STATUS.STATUS_RUNTIME_ERROR; diff --git a/packages/hydrojudge/src/sandbox.ts b/packages/hydrojudge/src/sandbox.ts index 82111948f..5d7dbd53e 100644 --- a/packages/hydrojudge/src/sandbox.ts +++ b/packages/hydrojudge/src/sandbox.ts @@ -30,9 +30,11 @@ const statusMap: Map = new Map([ ]); export interface Parameter { + /** in ms */ time?: number; stdin?: CopyInFile; execute?: string; + /** in MB */ memory?: number; processLimit?: number; addressSpaceLimit?: boolean; diff --git a/packages/hydrooj/setting.yaml b/packages/hydrooj/setting.yaml index e9e3b6501..cfbcda3b0 100644 --- a/packages/hydrooj/setting.yaml +++ b/packages/hydrooj/setting.yaml @@ -33,6 +33,7 @@ langs: - ~ Key marked with a ? means the option is optional - (name): disabled?: whether to disable this language + hidden?: won't show in the language selection compile?: Compile Command code_file?: Where to write code file when compiling, defaults to `foo.[name]` execute: Command to execute the program @@ -42,6 +43,7 @@ langs: target?: Compiler output file, defaults to `foo` display: Display name compile_time_limit?: Compile time limit, in milliseconds + compile_memory_limit?: Compile memory limit, in MB address_space_limit?: Enable address space memory limit as CCF did process_limit?: Limit the number of thread bash: