2011-05-13 405 views
2

嗨 我想制作一个使用java和tomcat服务器的网站。 该网站将为每个用户设置其服务器上所有进程的cpu和内存限制。例如,对于每个用户%3 cpu和100mb内存限制。如何在java中设置cpu和内存限制?

我该怎么做? 谢谢

+0

可以通过给每个用户一个内存限制,让他们拥有自己的tomcat进程,但这不会限制CPU使用率。 – 2011-05-13 17:14:24

+1

通常,限制CPU是与应用程序对应的OS设置。我认为操作系统上的软件总是尽可能多地使用处理能力。我从来没有听说过Java能够限制它自己的用法。看看你的tomcat设置或操作系统设置将是我的第一个猜测。 – 2011-05-13 20:20:56

+0

我一直在寻找这个近2年。到目前为止我还没有找到一个好的解决方案。我甚至问过如何在JVM中实现一个JVM,但是已经放弃了它的项目。所以,我会让你的问题最喜欢:) – mschonaker 2011-05-17 19:22:18

回答

1

这是不可能的一个Tomcat进程。您需要产生多个子进程,每个进程都有自己的(-Xmx100m或OS特定的内存配额)和OS特定的设置来控制CPU配额。

根据您的用户可能变得多么恶劣,您还可能会限制可用文件描述符的数量,端口范围,磁盘配额等。最后,可能需要将每个用户的进程放入虚拟机和/或监狱。

0

在Java中没有可用于强制限制线程资源使用率的机制。唯一可以做到这一点的方法是让底层操作系统执行此操作,这很可能会要求您为每个限制生成一个单独的JVM,并且它不会跨平台移植。

请注意,您可以对函数调用(使用Executor)设置超时限制,并且大部分操作都会中断。这对你来说可能够好了。如果您需要更多,则需要操作系统介入。