多个java实例-Xms -Xmx

时间:2013-03-02 23:05:58

标签: java performance jvm

我在同一台计算机上运行java游戏服务器和游戏客户端

游戏客户端

java -Xms512m -Xmx1024m -cp etc etc

和游戏服务器

java -Xmx1024M -Xms1024M -jar etc etc

计算机属性:

  • Windows 7 64位
  • 8GB RAM
  • CPU i5-2500 @ 3.3GHz
  • Intel HD Graphics

问题:游戏客户体验严重滞后。在游戏服务器也通过LAN连接另一个没有滞后问题的玩家!

有没有使用java虚拟机做任何事情的滞后问题?我使用一台或两台机器吗?

我可以设置不同的东西以优化性能吗?

我在想这个问题与一台机器正在运行并且它的最大内存对两个实例都不够,但我真的不知道如何解决这个问题。

编辑:没有应用内存不足。


解决方案

1: 从以下版本更新了Java版本:

java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b05)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)

java version "1.7.0_15"
Java(TM) SE Runtime Environment (build 1.7.0_15-b03)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)

2: 更改服务器属性以最小化要求,这似乎是主要原因。

3: 增加记忆力: java -Xms1024m -Xmx1024m -cp etc etc游戏客户端 和游戏服务器java -Xmx2048M -Xms2048M -jar etc etc 服务器现在运行大约700MB。

2 个答案:

答案 0 :(得分:2)

  

有没有使用java虚拟机做任何事情的滞后问题?

可能。你没有提供足够的证据证明这种或那种方式。

令人费解的是,在不同机器上运行的客户端并不迟钝。

  

我使用一台或两台机器吗?

您正在运行两个java副本,然后您将拥有两个JVM。

  

我可以设置不同的东西以优化性能吗?

答案可能是肯定的。但是你没有提供足够的信息来让我们提出可靠的建议。


滞后可能由许多因素引起,包括:

  • 具有高延迟的网络。
  • 堆积太小的JVM。
  • 生成大量垃圾并触发过多垃圾回收的应用程序。
  • 竞争资源的各种应用程序;例如物理内存,CPU时间或光盘或网络I / O时间。

如果您要找到问题的根本原因,您需要进行一些监控,以确定上述哪个是可能出现的问题。使用任务管理器或其他任何东西检查系统是否受CPU限制,内存不足,执行大量磁盘或网络操作等。使用VisualVM查看JVM内部的情况。


或者,您可以尝试使用一些完全不科学的“旋钮”来解决问题:

  • 尝试使-Xms和-Xmx参数相同(这可能会减少开始时的松弛......)
  • 尝试增加JVM堆的大小;例如让他们2gb而不是1gb
  • 尝试使用更新版本的Java
  • 尝试使用64位JVM,以便进一步增加堆大小
  • 尝试启用CMS或G1收集器(取决于您使用的JVM版本)。

如果我对您目前使用的内容了解得更多,我可以提出更具体的建议......

答案 1 :(得分:1)

您在同一台计算机上使用两个Java应用程序,导致运行2个JVM。 对于具有8GB RAM的64位系统,建议使用最大2GB(25%的物理内存或75%的可用物理内存,最大2 GB)以获得更好的性能。

您可能需要查看JVM大小调整。为了获得更好的性能,Xms和Xmx的大小可以保持相同,最大尺寸括号。

将内存大小分配给Heap并不是唯一需要考虑的方面。 JVM使用的内存不仅仅是Heap。其他内存区域如线程堆栈,方法区域,类加载器子系统,本机方法堆栈等。 虽然两个应用程序(游戏服务器,游戏客户端)都在运行,但两个应用程序之间的操作系统内存管理存在问题,导致速度缓慢。 在这种情况下,客户端应用程序可以部署在另一个核心(如果可用)。