1

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

游戏客户端

java -Xms512m -Xmx1024m -cp etc etc

和游戏服务器

java -Xmx1024M -Xms1024M -jar etc etc

电脑属性:

  • 视窗 7 64 位
  • 8GB 内存
  • CPU i5-2500 @ 3.3GHz
  • 英特尔高清显卡

问题:游戏客户端体验严重滞后。在游戏服务器上,另一个玩家也通过 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。

4

2 回答 2

2

java虚拟机有延迟的问题吗?

可能。您没有提供足够的证据来确定一种或另一种方式。

令人费解的是,在另一台机器上运行的客户端并不滞后。

我是在使用一两个机器实例吗?

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

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

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


延迟可能是由许多原因引起的,包括:

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

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


或者,您可以尝试使用一些完全不科学的“旋钮旋转”来修复:

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

如果我对您当前使用的内容有更多了解,我可能会提供更具体的建议...

于 2013-03-03T01:15:42.610 回答
1

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

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

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

于 2017-03-08T11:49:25.330 回答