虛擬機(jī)主要是什么原理?
要了解虛擬機(jī)的原理,要從多個(gè)角度去思考。
虛擬機(jī)運(yùn)行:
是指在完全隔離的環(huán)境中運(yùn)行、具有完整硬件系統(tǒng)功能的軟件模擬的完整計(jì)算機(jī)系統(tǒng)。
原理:
最初創(chuàng)建的Java源文件(.Java文件)中。Java文件首先通過前端編譯器(javac或ECJ)編譯為Java字節(jié)代碼文件。
JRE接著加載Java字節(jié)代碼文件,加載系統(tǒng)分配給JVM的內(nèi)存區(qū)域,運(yùn)行引擎解釋或編譯類文件,然后實(shí)時(shí)編譯器將字節(jié)代碼轉(zhuǎn)換為機(jī)器代碼。
虛擬機(jī)資源包括CPU、內(nèi)存、網(wǎng)絡(luò)和磁盤等多個(gè)方面。規(guī)劃虛擬機(jī)時(shí),應(yīng)考慮這些資源之間的關(guān)系。否則,分配的資源可能不適當(dāng),這會(huì)降低虛擬機(jī)內(nèi)應(yīng)用程序的性能。
CPU:
虛擬機(jī)只在一個(gè)物理核心上運(yùn)行每個(gè)vCPU,因此CPU頻率越高,虛擬機(jī)運(yùn)行速度越快,vCPU數(shù)量越多,有助于提高應(yīng)用程序的性能。
更復(fù)雜的因素之一是,在ESXi服務(wù)器中,所有虛擬機(jī)共享物理CPU。ESXi服務(wù)器中的內(nèi)核數(shù)越多,每個(gè)vCPU的內(nèi)核份額就越大,因此多核的性能比內(nèi)核頻率高,但數(shù)量比較少時(shí)更好。
如果虛擬機(jī)使用大量CPU時(shí)間,建議為虛擬機(jī)分配第二個(gè)vCPU,但由于只有多線程應(yīng)用程序才能有效使用多個(gè)vCPU,因此為虛擬機(jī)分配多個(gè)vCPU并不意味著應(yīng)用程序運(yùn)行得更快。
RAM:
在ESXi服務(wù)器中,RAM資源通常是有限的,在將RAM分配給虛擬機(jī)時(shí)需要特別小心。VMkernel在處理RAM時(shí)非常聰明。允許虛擬機(jī)使用ESXi服務(wù)器上的所有物理內(nèi)存,并且不使用物理內(nèi)存。
完全使用物理內(nèi)存后,VMkernel必須確定哪些虛擬機(jī)可以保留物理內(nèi)存,哪些虛擬機(jī)可以保留物理內(nèi)存。這稱為“內(nèi)存回收”。回收虛擬機(jī)使用的物理內(nèi)存存在影響虛擬機(jī)性能的風(fēng)險(xiǎn)。虛擬機(jī)回收的內(nèi)存越多,產(chǎn)生的風(fēng)險(xiǎn)就越大。
最明智的做法是僅向虛擬機(jī)分配完成操作所需的內(nèi)存。額外分配內(nèi)存會(huì)增加回收風(fēng)險(xiǎn)。另一方面,在虛擬機(jī)操作系統(tǒng)中使用未使用的內(nèi)存作為磁盤緩存時(shí),這是一個(gè)折衷點(diǎn),因?yàn)閷Υ疟P系統(tǒng)的性能要求會(huì)大大降低。
對于數(shù)據(jù)庫服務(wù)器和VDI臺(tái)式機(jī),向虛擬機(jī)分配更多內(nèi)存通常比不購買高性能磁盤陣列而在一臺(tái)ESXi服務(wù)器上運(yùn)行更少的虛擬機(jī)更經(jīng)濟(jì)高效。關(guān)鍵是在虛擬機(jī)的負(fù)載中分配足夠的內(nèi)存,沒有浪費(fèi)。