hydrojudge
您可以通过一键安装脚本快速安装独立评测机,详情请前往 部署Hydro 查看。
准备
在配置评测机之前,请确认您的站点已经可以访问并正常登录/注册。
您应该预先下载您所要支持的语言的编译器,若您在配置完评测机后 升级/重新安装 了编译器,您需要重新启动沙箱。
关于编译器说明,请参照 编译器 章节。
如果不使用自动脚本,您需要按照如下方式手动安装沙箱服务:
前往 criyle/go-judge 下载对应 cpu 架构的 go-judge。
go-judge 需要在后台运行并监听 127.0.0.1:5050
。如果系统使用的 cgroup 版本为 1 或者使用的为非 systemd init 的发行版,请以 root 权限运行。
可使用 pm2 进行管理。
安装
作为附加组件
由于用附加组件安装的评测机与 Hydro 必须在同一台服务器上,每一个 Hydro 实例最多只能有一台评测机由附加组件安装。
在安装 Hydro 的机器上运行下面的指令安装 @hydrooj/hydrojudge
:
重启 Hydro 后 hydrojudge 即可正常运行。
作为独立进程
该方法可以帮助您在任意服务器上部署评测机。
首先需要创建一个有 PRIV_JUDGE 权限的账户,具体方法参照 此处。(在部署 Hydro 的服务器上运行)
然后在运行评测机的服务器上安装 HydroJudge :
创建目录 ~/.config/hydro
,在该目录下创建文件 judge.yaml
,配置文件格式如下:
设置完之后,使用下面的指令即可开始运行(可以使用 pm2 管理):
更新
HydroJudge 会发布不定期更新。您可以使用 yarn global upgrade-interactive --latest
来检测并进行更新。
关闭
作为附加组件
在 系统设置>hydrojudge 中有一栏 Disable builtin judge,将它勾上,然后重启 Hydro 即可。
作为独立进程
根据开启的方法关闭即可。
卸载
关闭后运行下面指令即可。
评测设置
作为附加组件
在 系统设置>hydrojudge 修改对应的参数,然后重启 Hydro 和 hydrojudge 即可。
作为独立进程
如果有需要修改单题测试点数量上限等设置,可以在 ~/.config/hydro/judge.yaml
的末尾添加下列内容:
在 此处 的设置均可添加到此处。
修改编译选项/添加新语言支持
对于已安装内置评测机的用户(无论内置评测机是否启动),在 控制面板>系统设置 中修改 judge.langs 配置项即可;对于没有安装内置评测机的用户,需要在 ~/.config/hydro/langs.yaml
中配置。
文件格式参照 此处 。
如果您添加了新的语言,您还需要前往 控制面板>系统设置 中修改 Language Highlight ID 与 Monaco language modes。
分别表示选择对应的语言后的高亮设置(基于 PrismJS)和 Monaco 编辑器语法规则设置。
修改完后请重启 Hydro 和 hydrojudge 。
测试数据格式
参照 测试数据格式 配置。
调整沙箱空间大小
如果不调整沙箱的空间大小,当您的评测使用文件 IO 且输入输出文件较大时可能会引发错误。
对于 2022/8/12 前安装的用户:
在服务器上运行下面的代码找到 hydro-sandbox 的运行目录:
参照 沙箱文件系统挂载文档 中的自定义挂载的配置,保存配置内容到运行目录并命名为 mount.yaml
。
修改配置文件中 work dir
和 tmp dir
所对应 size
和 nr_inodes
的挂载参数至您想要的大小,保存后重启 hydro-sandbox
即可完成更改。
对于 2022/8/12 后安装的用户:
编辑 /root/.hydro/mount.yaml
,修改 size 即可。
C/C++ 彩色编译错误信息
- 确认您安装了支持彩色输出的编译器;
- 在系统设置中,将 C/C++ 编译命令后加上
-fdiagnostics-color=always
例:
开大程序运行栈空间
2022/8/12 后安装的实例默认已开启无限栈空间,无需手动操作
在很多时候系统默认为程序提供的栈空间并不能满足我们的需求,此时我们需要手动为用户程序提供更大的栈空间。
修改 pm2 中 hydro-sandbox 的启动参数为 ulimit -s unlimited && /usr/bin/hydro-sandbox
:
提高测评精度
禁用 CPU 频率缩放与 Intel 睿频加速技术,防止 CPU 频率波动。
禁用内存地址空间随机化,以使得存在内存寻址错误的代码能够得到更多可重复的结果,可以通过在 /etc/sysctl.conf
中添加下面这行并运行 sudo sysctl -p
应用:
内存计量不准确
在控制面板上出现内容为 You are using cgroup v2 without kernel 5.19+. This could result in inaccurate memory usage measurements.
警告时,意味着当前系统的内存消耗计量存在误差。
部分 Linux 设备默认使用 cgroup2,而在 5.19 版本前的内核的 cgroup2 中移除了精确计量内存消耗的接口。
若要获得更精确的内存计量,推荐启用 cgroup v1 (您可以通过检查 /sys/fs/cgroup/memory/memory.memsw.usage_in_bytes
是否存在来验证是否当前系统是否启用了 cgroup v1 ):
以 Ubuntu 的默认引导器 GRUB 2 为例,编辑 /etc/default/grub
:
在其中
后,加入 `cgroup_enable=memory swapaccount=1 systemd.unified_cgroup_hierarchy=0,变为:
运行以下命令更新 GRUB 2 的配置,然后重新启动。
内存控制器未开启
在控制面板上出现内容为 The memory cgroup controller is not enabled. This could result in inaccurate memory usage measurements.
警告时,意味着当前系统并没有开启内存 cgroup 控制器。
部分 Linux (如 Raspbian) 并不会默认开启内存 cgroup 控制器,启用内存控制器可以获得更精确的内存限制和计量。
以 Raspbian 为例,编辑 /boot/firmware/cmdline.txt
(如果不存在则 /boot/cmdline.txt
):
在末尾添加(注意空格)
重启之后检查 /proc/cgroups
确认内存控制器 memory
已开启。