【发布时间】:2009-11-03 04:22:56
【问题描述】:
我看到许多部署中,IT 团队只在虚拟机(vmware 和 c)实例中运行 JVM 应用程序堆栈。
我想我认为 JVM 是一个正式的 VM:在另一个 VM 中运行您的 Java 应用程序堆栈有什么真正的好处?
【问题讨论】:
标签: operating-system jvm vmware sysadmin
我看到许多部署中,IT 团队只在虚拟机(vmware 和 c)实例中运行 JVM 应用程序堆栈。
我想我认为 JVM 是一个正式的 VM:在另一个 VM 中运行您的 Java 应用程序堆栈有什么真正的好处?
【问题讨论】:
标签: operating-system jvm vmware sysadmin
同一台(真实或虚拟)机器中的两个 JVM 实例不会彼此完全隔离:它们不能都有侦听同一个已知编号端口的套接字,如果它们可能会相互干扰两者都写在同一个文件系统中,依此类推。
使用操作系统级别的虚拟机(vmware 或其他)确实可以保证您在物理上独立的系统上获得尽可能多的隔离,这是完全不同的主张。
【讨论】:
这实际上是两个不同的术语,不幸的是使用相同的英文单词,但只有相当抽象的联系。
IBM 首先使用了“虚拟机”这个词,所以我想我们不能把它重命名为“虚拟服务器”什么的。
太糟糕了,“软件框架”的首字母没有 VM。如果您以这种方式考虑 JVM,那么很明显您实际上只是在 VM 中运行一个框架,而不是同类事物中的一个事物...
所以一个真正的虚拟机可以随便放弃超级用户 shell 帐户、ssh 访问、软件安装权限......
【讨论】:
在另一个 VM 中运行您的 Java 应用程序堆栈有什么真正的好处?
通过这样做,您的 JVM 将在虚拟化硬件上运行,您可以修改并与其他虚拟机并行运行。这是将大型服务器分割成“共享”的好方法,您可以按需分配。
(编辑:我在此答案中直接回答 OP 的评论)
我明白你的意思,但为什么不能像主机操作系统上的单独进程一样做同样的事情?
我可以提到来宾可能会运行另一个操作系统,但这不是最重要的部分。正如另一个答案所指出的,最大的区别在于虚拟机与其他虚拟机隔离,它是真正的专用环境。端口的东西是一个很好的例子,但我更喜欢这样说明:另一个进程不会占用 "your" CPU 周期。这是一个非常重要的区别,尤其是对于通常不喜欢共享资源的 IT 团队而言。相反,您可以根据需要(可能是动态地)精确调整虚拟机的大小,并根据 IT 团队的实际使用情况计费。这就是 IMO 使资源相互化成为可能的原因(从而降低了成本)。
【讨论】: