假設我有一段可以在OS上正常運行的代碼。現在,如果我在虛擬機(服務器虛擬化)上安裝該操作系統並在該虛擬機上運行該代碼,那麼代碼的行爲有可能不同嗎?在虛擬化服務器上運行時,可執行文件的行爲可能會有所不同嗎?
如果是這樣,那麼有什麼先決條件?例如,是否必須編譯機器代碼(換句話說,解釋型語言是安全的?)?它是否必須是某些操作系統指令?特定的虛擬化技術(Xen,KVM,VMware ..)?
此外,有什麼可能的不同行爲?
假設我有一段可以在OS上正常運行的代碼。現在,如果我在虛擬機(服務器虛擬化)上安裝該操作系統並在該虛擬機上運行該代碼,那麼代碼的行爲有可能不同嗎?在虛擬化服務器上運行時,可執行文件的行爲可能會有所不同嗎?
如果是這樣,那麼有什麼先決條件?例如,是否必須編譯機器代碼(換句話說,解釋型語言是安全的?)?它是否必須是某些操作系統指令?特定的虛擬化技術(Xen,KVM,VMware ..)?
此外,有什麼可能的不同行爲?
是的。像任何機器一樣,虛擬機只是另一臺計算機(用軟件而不是硬件實現)。
其一,大量的商業應用程序將炸燬當你運行它們的虛擬機上,由於:
其次,虛擬機只是另一臺計算機組成的硬件,而不是電路/染料/微碼/魔法。這意味着VM必須通過直通或仿真來提供仿真硬件。硬件非常多樣的事實會導致各種不同的行爲。還要注意可能缺少驅動程序或加速模擬硬件。
但是當然,典型的商業應用程序例如幾乎不可能依賴於任何硬件細節,因爲它只是調用一些GUI API。
如果解釋語言向某些本地代碼發出調用,所有這些都可能再次發生,那麼解釋型語言只有在「解釋」的範圍內纔是安全的。
有關檢測虛擬機運行情況的示例,請查看this,它只是幾千種檢測虛擬機的方法之一。
理論上,程序的運行方式應該與物理機器上的完全相同。
然而在實踐中,有可能是由於
機器配置的差異與您在任何不同的物理機器之間看到的差異類似。根據應用程序對最終用戶的重要程度,您應該運行相同的一組測試,以確定環境是否可以使用。
根據虛擬化技術的不同,主機可能不具備在特定時間保證客戶端資源的能力。這可能會導致客戶端上的怪異行爲。由於IO超時而導致內存不足,可能會出現更多的應用程序錯誤。
要成功虛擬化生產應用程序,您需要做一些工作來了解application \ client和虛擬主機的資源配置文件。