Geyser icon indicating copy to clipboard operation
Geyser copied to clipboard

High IO-Wait by Geyser Standalone

Open nicolube opened this issue 1 year ago • 8 comments

Describe the bug

Hello I'm running Geyser-Standalone, and as soon a a few players are online we're seeing high IOWait times with in Prometheus Node Exporter.

Also I looked with htop, well there the Cores have almost no usage, but the process it self shows also high CPU usage.

Here is also a Spark Profil, I do not rly know how to read those, if there're not from Bukkit.

https://spark.lucko.me/yMxnwNbxzD Edit: New Instance https://spark.lucko.me/NaF3BYcM6v

To Reproduce

Well we're starting the server, and after a while, Promethouse NodeExporter Shows 70-90% IOWait usage.

Expected behaviour

Well I would expect almost no IOWait times.

Screenshots / Videos

grafik

Screenshot of CPU usage from Node Exporter

grafik

Screenshot of Geyser htop processes.

Server Version and Plugins

Does not apply we're running standalone

Extensions installed:

  • Spark-Geyser

Geyser Dump

https://dump.geysermc.org/hqThbdIPXVvSG6SBW905mVrZ1ctIjujH

Geyser Version

[07:52:53 INFO] This server is running Geyser version 2.4.3-b679 (git-master-7af5bac) (Java: 1.21, Bedrock: 1.20.80/1.20.81 - 1.21.30)

Minecraft: Bedrock Edition Device/Version

Not applicable

Additional Context

We're currently running on an Advance-3 Gen 2 from OVH. HW Specs:

CPU

  • AMD Ryzen 9 5900X - 12c/24t - 3.7 GHz/4.8 GHz

RAM

  • 128 GB ECC 2666 MHz

Storage:

  • 2×960 GB SSD NVMe
  • Soft RAID

We're running the latest geyser-version, it will get updated every day at 4am.

We're running ur geyser standalone and has an resourcepack. Everything else is basically vanilla.

And just added geyser-spark to it.

Also it does not seam to be disk write / read opterations, since they are mostly lower then 500kB/s

nicolube avatar Sep 20 '24 06:09 nicolube

the spark is invalid

PedroMPagani avatar Sep 20 '24 11:09 PedroMPagani

Here a new Sparkprofile, this time as an export. TIZJ2TNISo.zip

nicolube avatar Sep 20 '24 18:09 nicolube

Maybe try adding -Dio.netty.transport.noNative=true temporarily and see if that solves the CPU load issues. This may be an IO_Uring issue.

Camotoy avatar Sep 20 '24 22:09 Camotoy

@Camotoy That indeed helps...

nicolube avatar Sep 21 '24 05:09 nicolube

All right. Three options I can think of:

  • You can recompile Geyser-Standalone without the Netty IO_Uring dependency (probably a more temporary thing).
  • Try updating your kernel version.
  • Try updating the IO_Uring dependency, and if it fixes your issue, you can PR our way.

Camotoy avatar Sep 21 '24 05:09 Camotoy

https://github.com/GeyserMC/Geyser/blob/7af5bac9057a65c299d8328d9b5711df42b84be1/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java#L435 io_uring should currently already be opt-in

onebeastchris avatar Sep 21 '24 05:09 onebeastchris

@Camotoy I updated kernel from 5.15 to 6.8.0-45-generic, but the issue still persists.

Does geyser require the packege liburing2 to be installed?

nicolube avatar Sep 21 '24 13:09 nicolube

(Chris's comment about IO_Uring is only applicable to the Bedrock connection side and doesn't affect if the Java connections use it)

I don't see anything that says Netty's dependency requires that.

Camotoy avatar Sep 21 '24 17:09 Camotoy

io_uring from netty/incubator is no longer bundled with Geyser-Standalone - once we re-include io_uring transport, it'll be properly opt-in via a system property (for both the bedrock and java end). Thanks for reporting the issue!

onebeastchris avatar May 29 '25 20:05 onebeastchris