如何限制一个JVM中的资源



我正在尝试使用WSO2产品,我正在考虑一种情况,即坏代码可能会占用所有CPU时间(例如,死循环)。我确实在WSO2 AS上尝试过,有两个租户,A和B。A的错误代码确实会影响B,B的应用程序将有很长的响应延迟,甚至被卡住。有没有办法限制租户的CPU使用量?谢谢

目前,如果需要完全隔离,您将不得不以所谓的私人飞机模式设置环境,在这种模式下,每个租户都有自己的JVM。

在共享环境中,我们有卡住的线程检测,这将确保关键线程不会运行超过指定的时间段。我们计划在每个租户的基础上限制CPU使用。这将在未来的版本中提供。

我的建议是不要在一个应用程序服务器中运行两个租户。在同一台机器上运行两个单独的进程。更好的是,在单独的操作系统级容器(如监狱或lxc容器)中运行两个单独的进程。如果不能使用容器,也可以将虚拟机分开。

操作系统为您提供了控制CPU使用的工具-进程的rlimit和nice,以及容器和虚拟机的特定实现设施。因为它们是在操作系统(或虚拟机管理器)中实现的,所以它们能够正确可靠地完成这项工作。应用程序服务器不可能做到这一点。

无论如何,让单独的应用程序共享应用程序服务器和JVM是一个可怕的想法,应该在90年代被废除。根本不需要它,而且它会带来很多潜在的头痛。

最新更新