Files
OJ2/.env.example
T
xuyueandClaude Opus 5.5 37e971b6b4 refactor(判题机): 换成 go-judge,空闲内存从几百 MB 降到 16 MB
原来的 JudgeServer 按核数起 gunicorn worker、每份提交再按核数开进程池,空闲内存跟着核数走
(2 核 52MB、16 核 305MB)。换成 go-judge 后空闲 16MB,同一批提交判题中 80–100MB(原来约 370MB)。

go-judge 只管在沙箱里跑命令,编译、逐点运行、比对输出、定状态码搬到 judge/sandbox.ts,
口径逐条照搬 JudgeServer,出参形状不变。拿生产库真实提交新旧逐点对比:C 2000 份 1989 一致、
C++ 891 份 890 一致、Python 2000 份全一致;不一致的是 system("pause")(现在不再判运行时错误)、
未定义行为、endl 死循环打印(运行时错误变运行超时),见 docker/judge/README.md。

- 判题容器改成 privileged(go-judge 要自己建 cgroup),镜像 oj2-judge-3
- 心跳改由 worker 每 5 秒问判题机 /version 代记,删掉 /api/judge-server/heartbeat
- 前端统一用 stripJudgePath 去掉判题机工作目录(新的 /w/ 和旧的 /judger/run/)
- 提交前编译检查只编译不运行

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 15:03:57 +08:00

19 lines
1.0 KiB
Bash

DATABASE_URL=postgres://onlinejudge:onlinejudge@localhost:5433/onlinejudge
REDIS_URL=redis://localhost:6380
JUDGE_SERVER_URL=http://localhost:8081
# 判题机 token:自己生成,不要用固定值。
# TOKEN=$(openssl rand -hex 32)
# echo "JUDGE_SERVER_TOKEN=$TOKEN" >> .env # 后端读这里
# echo "OJ2_JUDGE_TOKEN=$TOKEN" >> docker/.env # 判题机容器读这里,两边必须一致
# 留空的话后端会随机生成一个并在启动日志里告警,判题请求会被 401 挡掉。
JUDGE_SERVER_TOKEN=
JUDGE_CONCURRENCY=2
# 试运行(运行例子 / 自己输入)同时在判题机上跑几批,和正式提交共用判题机
TRIAL_CONCURRENCY=2
# WebSocket 升级额外放行的来源,逗号分隔的完整 origin。
# 同源本来就放行,本机开发(Vite 5173 → API 3000)也自动放行,一般不用配。
# 只有前后端分处不同域名时才需要,例如 ALLOWED_WS_ORIGINS=https://oj.example.com
ALLOWED_WS_ORIGINS=
OJ2_DEV_USERNAME=student
OJ2_DEV_PASSWORD=student123