代码之家  ›  专栏  ›  技术社区  ›  ring bearer

应用服务器(Java):应该向每个服务器添加RAM取决于每个域的Xmx值吗?

  •  1
  • ring bearer  · 技术社区  · 14 年前

    我们有glassfish应用服务器在Linux服务器上运行。 每个Glassfish安装托管3个域。每个域都有一个JVM配置,如-xms 1GB和-xmx 2GB。这意味着,如果这三个域都以最大内存运行,那么服务器应该能够为JVM分配总共6GB的空间。

    通过这种计算,我们的每台服务器都有8GB的RAM(2GB的缓冲区) 首先,这是一个好方法吗?我不这么认为,因为在过去的几个月里,当我们分析这台服务器上的内存利用率时,它只有1GB;

    现在有人请求向这些服务器添加一个额外的域—这是否意味着要添加额外的2GB RAM以确保安全,或者根据趋势,继续使用服务器拥有的内存?

    1 回复  |  直到 14 年前
        1
  •  1
  •   alex    14 年前

    一些经验法则:

    • 您真的希望Xmx和RAM的总和低于您的物理RAM,这是您需要在设备上持续运行的应用程序(包括操作系统)所需的总和。否则,一些东西将被交换到磁盘上,当这个“某物”需要运行时,事情将急剧减速。如果事情不断地进出交换,什么都做不到。

    • 可以 能够在某些应用服务器上使用较低的XMX(您的问题似乎意味着某些JVM分配了太多的RAM)。我相信Tomcat可以从64MB的xmx开始,但使用这种设置,许多应用程序将很快耗尽内存。调整内存分配和垃圾收集器可能是值得的。坦率地说,我最近对GC性能不是很了解(我在4-5年内不需要调整任何东西来获得良好的性能),所以我不知道这有多重要。GC收集暂停过去很糟糕,而较大的堆意味着较长的暂停…

    • 你留下的记忆不会被“浪费”。操作系统将把它用于磁盘缓存,这可能是一个好处。

    无论如何,答案通常是…您需要运行测试。能够运行压力测试是非常宝贵的,我建议您花一些时间编写和运行压力测试。它将允许你在这件事上做出有教育意义的决定。