在高使用率的服务器上寻找降低性能的问题

我通过谷歌计算引擎托pipe一个服务器用于各种目的,最着名的是一个Minecraft服务器,它收到大量的stream量和使用量。 我们所说的CPU使用率相当于150%,每秒读写50次,磁盘每秒钟读取10次,networking数据包每秒钟减less600次,因此使用率相当高。

我遇到的问题是,尽pipe服务器完全能够处理这么多的使用,但是延迟和/或处理仍然存在问题。 有很多地方出于蓝色,一个只需要十分之一秒执行的过程需要40秒甚至更长的时间。

以下是我们已经考虑的可能的问题以及我们已经实施的解决scheme:

  • CPU使用率
    • 我们一直使用100-250%的CPU,4个vCPU(所以我们不应该有任何forms的性能限制)。
  • 磁盘IO
    • 我们最多可以达到每秒80次读取和30次写入,但是使用SSD的持续随机IOPS限制为1.5k,所以这也不成问题。
    • 我们最大读取速度为1.6 MB,每秒写入速度为.75 MB,但是使用的SSD的持续吞吐量限制为24 MB / s。
  • networking
    • 我们最多可以接收600个数据包(平均400)和每秒发送1700个数据包(平均800)。 我不确定我们如何能够以任何方式改善这一点,但是当networking供应商是Google的时候,我不明白这会是什么问题。
    • 我们收到28 KB,每秒发送280 KB。 我们的networking速度testing显示,我们有能力处理数千次这个值。
    • 最不可能涉及到这一点,因为大部分遇到的问题涉及服务器端的问题。
    • 我们不能通过拆分用户连接来进行任何forms的负载平衡,因为它们必须全部连接到一台托pipeMinecraft世界的服务器。
  • 内存
    • 我们有5 GB的RAM专用于有困难的进程。 这使我怀疑它的参与,因为我们很less使用它的一半以上。
  • Java的
    • 我们的Minecraft服务器jar是Minecraft,是用Java编写的。 我们正在使用以下Java版本:
      java version "1.7.0_111" OpenJDK Runtime Environment (IcedTea 2.6.7) (7u111-2.6.7-1~deb8u1) OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode) 
    • 我们使用以下参数来执行jar:
       -server -Xmx5G -Xms5G -Xmn2500M -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4 -XX:+AggressiveOpts 
    • 我们已经考虑过Java(特别是Minecraft)的内存pipe理不好的问题,但是如果可以的话,我们也不知道如何解决这个问题。

正如您所看到的,我们采取了各种措施来减less延迟和stream程限制,但是我们只是没有想法。 还有其他的方式,我们错过了我们的stream程,或者这是我们托pipe的软件固有的问题?

有几件事情要考虑:

a)GCE虚拟机具有networking出口吞吐量,如下所述。 PD写入I / O和networkingstream量对这个上限计数。 对于拥有4个内核的虚拟机,上限为8 Gbps。

b) 本文中logging了GCE磁盘的最大持续IOPS。 使用本地SSD可能会提高您的性能,但这些磁盘上的信息并不耐用。 换句话说,只有当您停止或删除VM时, 本地SSD中的数据才会持续存在 。

c) Stackdriver可以帮助您监视项目中的资源并减less瓶颈。