我正在使用在具有48个CPU和250GB RAM的主机上运行的VirtualBox 5.1我要导入的虚拟机(来宾)最初具有2个CPU和4GB的RAM。
在这台机器内部,我正在用Java运行一个进程,该进程启动动态数量的线程来执行某些任务。
我使用以下配置运行它:
笔记本电脑上的整个过程(2个CPU / 4GB RAM)〜11秒
服务器中虚拟机中的相同程序(15个CPU和32GB RAM)〜45秒
服务器中虚拟机中的相同程序(20个CPU和32GB RAM)〜100+秒
服务器中虚拟机中的相同程序(10个CPU和32GB RAM)〜5+秒
首先,我认为我从Java管理线程的方式存在问题,但是经过多次测试,我发现虚拟机具有的CPU数量与其性能之间存在关联,最大为10,之后,计算机的整体性能会降低(CPU饥饿?)
虚拟机运行Oracle Enterprise Linux 6.7,而主机运行Oracle Enterprise Linux 6.9
我在虚拟机文档中找不到有关CPU数量的硬限制。
是否需要进行设置才能在VirtualBox实例中启用/利用10个以上的CPU?
自从我发布此问题以来,时间已经过去了,仅是我的档案将分享我的发现,希望它们可以为其他人节省时间。
事实证明,性能问题是由于VirtualBox的工作方式引起的。尤其是操作系统和管理程序之间的关系。
最后的虚拟机(客户机OS)是主机的单个进程,并且当您在虚拟机设置中修改CPU数时,它们将执行的操作是更改线程数。该进程将必须模拟其他CPU。(至少在VirtualBox中)
话虽如此,当我为VM分配10个以上的CPU时,结果是:
所有这些共同导致设置是饱和主机虚拟机进程,我认为这是由于主机操作系统处理进程上下文切换的方式而引起的>]
在我的服务器上,硬限制是7个虚拟CPU,如果我添加的数量超过限制,它将减慢Java软件的性能
在VM外部运行Java软件没有显示任何性能问题,它具有60多个独立线程,开箱即用。
我们的设置几乎与您的设置相同(Virtualbox在2个NUMA节点上的48核计算机上运行。)>
我最初将内核数设置为Virtualbox支持的最大核数(例如32),但很快意识到,当VM处于负载状态时,两个NUMA节点之一始终处于空闲状态,而另一个处于中等负载状态。