Fre*_*rez 6 cpu virtualization multithreading virtualbox starvation
我正在使用运行在具有48个CPU和250GB RAM的主机上的VirtualBox 5.1,我正在导入的虚拟机(来宾)最初有2个CPU和4GB RAM.
在这台机器内部,我正在运行一个带有Java的进程,它启动动态数量的线程来执行某些任务.
我使用以下配置运行它:
在我的笔记本电脑的整个过程(2CPU/4GB RAM)~11秒
服务器虚拟机中的相同程序(15个CPU和32GB RAM)~45秒
服务器虚拟机中的相同程序(20个CPU和32GB RAM)~100+秒
服务器虚拟机中的相同程序(10个CPU和32GB RAM)〜5秒以上
我首先想到我是如何从Java管理线程的,但经过多次测试后,我发现虚拟机的cpus数量和性能之间存在关联,最大值为10,之后机器的整体性能下降(cpu饥饿?)
虚拟机运行Oracle Enterprise Linux 6.7,主机运行Oracle Enterprise Linux 6.9
我在VM文档中找不到有关CPU数量的任何硬限制
是否需要设置一个设置以启用/利用VirtualBox实例中的10个以上的CPU?
自从我发布这个问题以来,时间已经过去了,仅就存档而言,我将分享我的发现,希望它们可以为其他人节省时间。
事实证明,性能问题归因于VirtualBox的工作方式。尤其是操作系统和管理程序之间的关系。
最后,虚拟机(来宾OS)是主机的单个进程,当您在虚拟机设置中修改CPU的数量时,它们将执行的操作是更改该进程必须模仿其他线程的线程数。CPU的。(至少在VirtualBox中)
话虽如此,当我为VM分配10个以上的CPU时,我最终得到了:
所有这些共同导致设置使主机虚拟机进程饱和,我认为这是由于主机OS处理进程上下文切换的方式所致
在我的服务器上,硬限制是7个虚拟CPU,如果我添加的数量超过限制,它将降低Java软件的性能
在VM外部运行Java软件没有显示任何性能问题,它具有60多个独立线程,开箱即用。
| 归档时间: |
|
| 查看次数: |
3733 次 |
| 最近记录: |