0

我正在做一个小型周末项目,它基本上是一个在线 IDE,允许您从浏览器运行 PHP、Ruby 或 Python 代码。我已经完成了所有设置和工作,但是我创建系统的方式,如果用户运行一个写得不好的脚本,或者一个计算量很大的脚本,系统可能会减慢每个人的速度,直到我达到超时(15 秒)。

我的系统没有通过斐波那契测试。我如何单独运行该过程,这将允许用户创建:

while (true) { fibonacci() } // pseudo-code

不让服务器崩溃?我考虑了以下行动方案:

  • 在 Docker ( https://www.docker.io ) 容器中运行每个进程,但我不确定 docker 如何处理慢速容器
  • 在 VM 中运行每个进程
  • 在即时创建的 EC2 实例中运行每个进程(这不是一个真正的选择,因为这既慢又昂贵)
4

2 回答 2

0

尝试将进程限制为仅一个 CPU 内核。

您可以使用任务集来做到这一点:

http://linux.die.net/man/1/taskset

您还可以使用 isolcpus 隔离您的一个 CPU 内核(并且您的系统进程不会使用该内核),并使用任务集在该 CPU 内核中运行 PHP/Ruby/Python 代码。

了解有关 isolcpus 的更多信息:

一核专用单进程

https://askubuntu.com/questions/165075/how-to-get-isolcpus-kernel-parameter-working-with-precise-12-04-amd64

于 2013-12-23T08:35:09.123 回答
0

You should spawn another process using the multiprocessing module, then run the users code within that spawned process, thus keeping the inputted code "isolated" in another process. However, you should still keep in mind, you should always run this in a virtual machine because running it outside of one is unsafe on many levels.

Using this method, you can lower the processes priority, since you are in linux, and this should keep each proc. from slowing down your overall machine while the timeout runs. This is assuming that you are indeed running a linux system.

于 2013-08-18T16:16:04.853 回答