假设“运行myApp.jar,CPU=800,内存=1024”
我做java编程已经很多年了,问这个问题很尴尬。我甚至不知道这是否可能。如果可能,怎么做?
我只是想知道是否可以设置一个java程序的最大内存和cpu使用率。我突然想到这一点,因为我最近开始开发移动的应用程序。我想知道应用程序将如何在设备上的行为,这是非常有限的内存和处理器。
我看到物理引擎的演示应用程序可以在浏览器上运行,也可以在我的PC上执行。如果我在移动的设备上运行它们呢?性能会一样吗?与其开发一个示例移动应用程序来测试库的性能,我宁愿先在我的PC上使用特定的CPU和内存运行它。
顺便说一句,我试着在谷歌上搜索...我发现的只是监控和性能调优。我可能用错了关键字。
9条答案
按热度按时间xa9qqrwz1#
您可以通过-Xmx选项限制内存使用,也可以通过设置进程的优先级和/或CPU关联性来限制CPU使用。
8yoxcaq72#
JVM无法控制CPU使用率或优先级。
JVM可以控制最大/最小内存使用量。
有一个解决方案。可以在单独的[Docker container][1]中运行每个JVM。并控制每个容器的资源(内存、CPU、网络、IO)分配。这正是Docker容器的附加值。
[1]JVM不能控制CPU的使用和优先级。但是你可以在一个单独的Docker容器中运行每个JVM。并且控制每个容器的资源分配。这正是Docker容器的附加价值。
7ivaypg93#
Linux操作系统:
taskset -a -c 0,1,2,3 <program>
仅在内核0、1、2和3上运行程序及其子线程。
rur96b6h4#
Docker提供了资源管理选项来限制运行Docker container的cpu访问。在Docker文档中的Limit a container 's resources中,可以查看
docker run
提供的CFS调度程序选项,例如:--cpus=<value>
-指定一个容器可以使用多少可用CPU资源。例如,如果主机有两个CPU,而您设置了--cpus="1.5"
,则容器最多只能使用1.5个CPU。这相当于设置--cpu-period="100000"
和--cpu-quota="150000"
。在Docker 1.13和更高版本中可用。--cpuset-cpus
-限制容器可以使用的特定CPU或核心。如果有多个CPU,则为逗号分隔的列表或连字符分隔的容器可以使用的CPU范围。第一个CPU的编号为0。有效值可能为0-3
(使用第一个、第二个、第三个和第四个CPU)或1,3
(使用第二个和第四个CPU)。当部署Docker swarm / stack时,这些选项也可通过docker-compose获得,如在
resources
下的Compose file version 3参考中所述:**注意:**Docker compose v2中的传统资源选项现在仅限于迁移到v3中的堆栈。
r1zhe5dt5#
对于CPU,你可以试试我的新lib:)。
https://github.com/dyorgio/cpu-watcher
使用示例:
7cwmlq896#
在运行jvm 8或更早版本时,请注意内存和CPU选项。有几篇关于这方面的文章非常不错。请查看:
https://developers.redhat.com/blog/2017/03/14/java-inside-docker/
https://jaxenter.com/nobody-puts-java-container-139373.html
话虽如此,容器化是微服务架构的正确方法,无论堆栈如何,jvm也不例外。然而,注意到警告是很重要的。
rqenqsqc7#
在这种情况下,在移动的模拟器(例如Android)上运行应用程序可能会有所帮助。
有了这个,你可以模拟一个具有特定CPU/内存的移动的设备。所以,你应该得到的性能可以与一个CPU较慢,RAM较少的设备相媲美。
Android / Nokia模拟器是免费,可从Nokia/Google网站的开发人员部分下载。
cclgggtu8#
https://github.com/haosdent/jcgroup jcgroup是您的最佳选择。您可以使用此库来限制CPU共享、磁盘I/O速度、网络带宽等。
jaxagkaj9#
对于资源受限的系统,我曾经发现以下java命令行选项对我的特定用例很有帮助(使用OpenJDK 17测试)。
-Xms
,最大值:-Xmx
)、绝对最大RAM,并且还设置为仅使用串行垃圾收集器,以减少自发的CPU负载突发:java -Xmx512m -Xms128m -XX:MaxRAM=1536m -XX:+UseSerialGC
当然,您必须确定您的应用程序是否仍能使用这些设置。