限制Java CPU和内存使用

限制Java CPU和内存使用,java,multithreading,memory-management,cpu-usage,Java,Multithreading,Memory Management,Cpu Usage,我想创建一个Java应用程序,它能够限制每个线程的CPU和内存使用。比方说,它是一个RESTAPI,在每个请求和响应之间都有一个过程。我想限制他们。是否可以从代码中动态执行此操作 下一个相关的问题是,如果我有一台分布式机器,并且希望再次对每个进程应用CPU和内存限制,该怎么办 也许你可以推荐一些与这个高级主题相关的书籍或博客 谢谢您可以通过JVM(Java虚拟机)参数部分实现它-您可以为线程设置堆栈大小,为JVM设置堆大小。但不可能限制每个线程的内存 也不可能限制CPU的使用 您可以通过Thre

我想创建一个Java应用程序,它能够限制每个线程的CPU内存使用。比方说,它是一个RESTAPI,在每个请求和响应之间都有一个过程。我想限制他们。是否可以从代码中动态执行此操作

下一个相关的问题是,如果我有一台分布式机器,并且希望再次对每个进程应用CPU和内存限制,该怎么办

也许你可以推荐一些与这个高级主题相关的书籍或博客


谢谢

您可以通过JVM(Java虚拟机)参数部分实现它-您可以为线程设置堆栈大小,为JVM设置堆大小。但不可能限制每个线程的内存

也不可能限制CPU的使用

您可以通过Thread类中的
setPriority()
在Java程序中设置线程优先级,但这很糟糕,而且实际上并不有效

您还可以生成现在作为独立进程(而不是独立线程)的线程—具有固定堆大小和自定义进程优先级(cpu使用率)。但是你必须让多过程的沟通有效,这需要一些知识(不要自己写,使用一些已经经过战斗测试的信息系统)。此解决方案可能需要对当前代码进行大量更改

下面的文字是个人意见

无论什么时候,只要您有一个应用程序,您必须通过一些魔术(手动或在代码中)设置优先级,那么99%的可能性是应用程序架构被设计破坏了

但是为什么呢?


好吧,JVM的开发者花了数年时间开发最有效的线程管理解决方案。您应该承认JVM更了解如何处理它。

您可以通过JVM(Java虚拟机)参数部分实现它-您可以为线程设置堆栈大小,为JVM设置堆大小。但不可能限制每个线程的内存

也不可能限制CPU的使用

您可以通过Thread类中的
setPriority()
在Java程序中设置线程优先级,但这很糟糕,而且实际上并不有效

您还可以生成现在作为独立进程(而不是独立线程)的线程—具有固定堆大小和自定义进程优先级(cpu使用率)。但是你必须让多过程的沟通有效,这需要一些知识(不要自己写,使用一些已经经过战斗测试的信息系统)。此解决方案可能需要对当前代码进行大量更改

下面的文字是个人意见

无论什么时候,只要您有一个应用程序,您必须通过一些魔术(手动或在代码中)设置优先级,那么99%的可能性是应用程序架构被设计破坏了

但是为什么呢?


好吧,JVM的开发者花了数年时间开发最有效的线程管理解决方案。您应该承认JVM更了解如何处理它。

您不能仅在Java层上完成这项工作,您需要深入研究虚拟机

我建议您使用一些简单的虚拟机的源代码,例如,并尝试构建来理解它。在某些情况下,设置限制的可能性比整体性能更重要

将为您提供较新的代码库,但显然它的实现要复杂得多。可能介于两者之间


作为替代方案,您可以尝试在并行运行的多个Java虚拟机之间划分应用程序。当然,不是每个应用程序都可以这样分区,但是一个专门编写的应用程序可能可以这样。如果要这样做,请查找现有项目,如

您不能仅在Java层上执行此操作,您需要深入研究虚拟机

我建议您使用一些简单的虚拟机的源代码,例如,并尝试构建来理解它。在某些情况下,设置限制的可能性比整体性能更重要

将为您提供较新的代码库,但显然它的实现要复杂得多。可能介于两者之间


作为替代方案,您可以尝试在并行运行的多个Java虚拟机之间划分应用程序。当然,不是每个应用程序都可以这样分区,但是一个专门编写的应用程序可能可以这样。如果要这样做,请查找现有项目,如

将问题复制到此问题:将问题复制到此问题: