我是服务器和pipe理新手,我想了解RAM和JVM之间的关系。 说,我有一个有16 GB的物理内存(RAM)的服务器。 我有一个在Websphere运行的应用程序。 Websphere中有4个应用程序服务器,每个都运行相同的应用程序。 我们已经在4个应用程序服务器的每一个中分配了2 GB的JVM。 我假设,应用程序使用8 GB的RAM作为JVM,其余8 GB是空闲的。 在这种情况下,免费的8 GB用于其他用途? 现在可以添加5个新的应用程序服务器,每个分配2个JVM。 换句话说,RAM和JVM之间的关系是什么。 JVM的总和可以超过内存吗?
PS我是一个新手,请原谅,如果我的问题没有意义。 我想了解应用程序如何利用服务器内存(分配为JVM)。
在这种情况下,免费的8 GB用于其他用途?
如果可能,是的。 使RAM免费是操作系统的一个纯粹的成本 – 它只是使它再次使用才能使用它。 除非操作系统没有select,否则它会将RAM用于其他目的。 最常见的用途是最近从磁盘读取或写入磁盘的数据。 通过将其保存在内存中,操作系统避免了为了再次使用而使其免费的麻烦,并且如果需要相同的数据,则节省了磁盘读取操作。
现在可以添加5个新的应用程序服务器,每个分配2个JVM。 换句话说,RAM和JVM之间的关系是什么。 JVM的总和可以超过内存吗?
当然。 JVM正在分配虚拟内存,而不是物理内存。 操作系统将根据需要将物理内存分配给虚拟内存。 现代操作系统可以允许虚拟内存消耗显着超过物理内存。 这可能会导致性能下降,这取决于工作集大小 – 大概有多less虚拟内存实际上被访问。
我们已经在4个应用程序服务器的每一个中分配了2 GB的JVM。
我假设你将每个应用程序服务器的最大堆大小设置为2 GB? 在这种情况下,java进程的大小实际上会更大,因为java进程将由堆大小2 GB + java进程需要的本地内存量组成。 Java进程所需的本机内存的RAM数量取决于应用程序,而不幸的是,不能真正调整。 因此,如果您的应用程序达到2 GB的最大堆,则Java进程的大小可能在2.5到3.5 GB之间,可能更高。
因此,如果您必须在您的AIX机器上分配额外的JVM,请记住这一点,以便它不会耗尽物理内存并开始分页。