我使用的是VirtualBox 5.1,运行在一个拥有48 CPU和250 4GB内存的主机上,这是我最初导入的虚拟机(来宾),最初有2 CPU和4GB内存。
在这台机器中,我正在使用Java运行一个进程,它启动一个动态的线程数来执行一些任务。
我运行它的配置如下:
在我的笔记本电脑中的整个过程(2 CPU/4GB RAM) ~ 11秒
服务器中虚拟机中相同的程序(15 CPU和32 45 )~45秒
服务器中虚拟机中相同的程序(20 CPU和32 of内存)~ 100+秒
服务器中虚拟机中相同的程序(10 CPU和32 5+内存)~5+秒
首先,我认为在如何管理Java线程方面存在问题,但经过多次测试后,我发现虚拟机拥有的CPU数量与其性能(最大值为10 )之间存在着某种关系,在此之后,机器的总体性能会减慢(CPU饥饿吗?)
虚拟机运行Oracle Enterprise Linux 6.7,主机运行Oracle Enterprise Linux 6.9
我在虚拟机文档中找不到CPU数量的任何硬限制。
是否需要设置一个设置来启用/利用VirtualBox实例中的10多个CPU?
发布于 2017-11-28 21:26:25
自从我贴出这个问题以来,时间已经过去了,只是为了存档,我会分享我的发现,希望它们能为其他人节省时间。
结果表明,性能问题是由于VirtualBox的工作方式造成的。特别是操作系统和系统管理程序之间的关系。
最后的虚拟机(客户操作系统)是主机和的一个单一进程,当您在虚拟机设置中修改CPU数量时,它们将更改进程所需的线程数,以便模仿其他CPU的.(至少在VirtualBox中)。
话虽如此,当我将10+ CPU分配给VM时,我得到了以下结果:
所有这些都导致安装程序饱和主机虚拟机进程,我认为这是由于主机OS处理进程上下文切换的方式
在我的服务器上,的硬限制是7个虚拟CPU,如果我添加了更多的虚拟CPU,就会降低软件的性能
在VM之外运行Java软件并没有显示任何性能问题,它使用60+隔离的线程开箱即用。
发布于 2018-08-15 13:51:52
我们的设置与您的几乎相同(Virtualbox运行在一个48核计算机上,跨越2个NUMA节点)。
我最初将内核数量设置为Virtualbox中支持的最大数量(例如32),但很快就意识到,两个NUMA节点中的一个总是空闲,而另一个节点在VM处于负载下时处于中等负载状态。
长话短说,a process can only be assigned to a single NUMA node和Virtualbox使用多个线程运行一个用户进程.这意味着我们仅限于使用24个核心(考虑到这是一个具有超线程的12核cpu,在实践中甚至更少)。
https://stackoverflow.com/questions/44642207
复制相似问题