系统资源耗尽(在脚本中执行多个程序)

0 投票
2 回答
894 浏览
提问于 2025-04-16 04:38

我在学校的服务器上运行一个脚本。在这个脚本里,我会执行 Java、C、C++、Python 和 Perl 的程序。因为每个程序会被执行很多次(我是助教,需要用不同的输入来测试学生的程序)。但是服务器总是给我报错:“系统资源耗尽”。我猜这可能是因为我没有释放资源。

我听说在脚本中运行一个程序会启动一个进程。所以我在想,可能是因为进程太多,分配给我的系统资源用完了。

有没有什么办法解决这个问题呢?

我在这里贴出我部分的脚本代码:

# maxconnect4 is the compiled c code
for ((i = 1; i <= 21; i++))
do
    maxconnect4 input1.txt
done

谢谢

2 个回答

1

你似乎是在运行 maxconnect4,然后等它完成后再开始下一个运行,所以我觉得你的脚本本身没有问题。关键问题是 maxconnect4 在做什么。它可能非常消耗资源,或者它可能会启动一些子进程,然后再返回到你的脚本。

我建议你做一些实验,比如手动运行 maxconnect4 几次,看看是否会出现资源错误。

我还建议使用系统工具来调查一下。例如,可以用 ps 命令查看是否有很多进程在运行。用 vmstat 命令查看 CPU 和内存的使用情况。

1

因为你是在自动运行学生的程序,所以他们的程序可能写得很糟糕,使用的内存比那些更有经验的程序员写的类似程序要多。即使是Java和Python程序,也可能写得不够好,导致内存泄漏(想象一下一个栈,里面的东西一直在增加,但从来没有拿掉过任何东西)。

在你开始评分之前,最好先用一些已知能正常工作的作业实现来测试一下你的环境,确保一切正常。

你还应该查看学生的代码,特别是当你在他们的作业上遇到错误时。

也有可能是你的系统负担过重,可能需要在另一台机器上运行这些测试。使用一台没有其他用户的机器是个好主意,因为这样可以避免其他因素干扰你的测试。

在测试时,你可能还想在另一终端上运行top命令,以监控资源的使用情况。

撰写回答