2017-06-20 110 views
1

我正在使用VirtualBox 5.1運行在具有48個CPU和250GB RAM的主機上 我導入的虛擬機(guest虛擬機)最初有2個CPU和4GB內存。VirtualBox可以有最大數量的cpus嗎?

這臺機器內我正在運行一個Java進程,啓動一個動態數量的線程來執行一些任務。

在我的筆記本電腦的整個過程(2CPUs/4GB RAM)〜11秒

在服務器 虛擬機相同的節目(15個CPU和32GB:

我與下面配置運行它的RAM)〜45秒

在服務器 虛擬機

相同程序(20個CPU和32GB的RAM)〜100+秒

在SER虛擬機相同的節目版本號 (10個CPU和32GB內存)〜5+秒

我首先想到如何從Java管理線程時出現問題,但經過多次測試後,我發現數字之間存在關係虛擬機擁有的cpus及其性能,最大值爲10,此後機器的整體性能變慢(cpu飢餓?)

虛擬機運行Oracle Enterprise Linux 6.7,主機運行Oracle Enterprise Linux 6.9

我在VM文檔中找不到有關CPU數量的任何硬性限制

是否需要設置一個設置來啓用/利用VirtualBox實例中的10多個CPU?

+2

毫無只是「與主機48個CPU「。它有幾個物理CPU包(套接字),因此它是[NUMA系統](https://en.wikipedia.org/wiki/Non-uniform_memory_access)。根據您使用java運行的任務,可能存在限制可伸縮性的效果:如果程序是在沒有計算NUMA效果的情況下製作的,則具有低內存強度的純計算任務可以很好地擴展,並且積極使用內存將不會進行線性擴展。所以,問題可能不在於您的虛擬機解決方案,而在於您的Java動態程序,並且它對任何虛擬機或真正的NUMA都具有有限的可擴展性。 – osgx

+0

另請參見:有沒有VM主機(或其他VM)中的任何用戶進行計時?請描述你的Java任務,而不是虛擬機。 – osgx

+0

它只是我在系統上,沒有其他用戶/進程正在運行 –

回答

0

自從我發佈這個問題發生以來,發生這種情況的時間已經發生,我只是爲了存檔我 會分享我的發現,希望他們能夠幫助節省時間給其他人。

事實證明,性能問題是由於VirtualBox的工作方式 ,特別是操作系統和管理程序之間的關係。

末的虛擬機(來賓操作系統)是單個進程主機和當你修改VM設置什麼,他們會做CPU的數量是改變線程數,這一進程將不得不模仿其他CPU。(至少在VirtualBox中)

話說回來,當我分配10+的CPU給VM我結束了:

  • 與10+螺紋
  • 仿真操作系統上運行數百個單個處理流程
  • 這是創建線程

所有這一切的另一幫我的Java代碼共同造成的設置是飽和主機虛擬機進程,我認爲這是由於主機操作系統如何處理進程的上下文切換

在我的服務器上,硬限制是7虛擬CPU,如果我添加更多,它會慢順着Java軟件

運行虛擬機之外的Java軟件並沒有顯示出任何性能問題的性能,它的工作開箱即用60+孤立線程

相關問題