Direct answer
If the server is smooth until players explore new terrain, run spark while they travel into un-generated chunks. If generation dominates, the most reliable operational fix is to limit uncontrolled exploration or pre-generate the area players will use.
Generation vs loading vs sending
- Generation: creating terrain, structures, features, and lighting for new chunks.
- Loading: reading existing chunk data from disk.
- Sending: transmitting chunk data to clients.
These bottlenecks need different fixes. Fast NVMe storage helps reads/writes, but it does not make a CPU-heavy world generator cheap.
Paper chunk threads
Paper has separate chunk-system I/O and worker thread settings. Its current global configuration can automatically choose worker threads from available physical cores. Do not blindly set very high values; chunk workers still compete with the tick thread, GC, plugins, and the operating system for CPU time.
Reduce live generation pressure
- Pre-generate a sensible world radius before launch or during maintenance.
- Set a world border that matches the area you actually intend to support.
- Avoid making many players generate distant terrain at the same time on limited CPUs.
- Review custom world-generation mods/datapacks if the profiler shows them dominating.
Folia note
Folia's own documentation recommends pre-generating worlds so fewer chunk-system worker resources are needed during normal operation. Folia can parallelize independent regions, but chunk generation is still real CPU work.
References
These sources were checked while preparing this article. Performance behavior and configuration can change between Minecraft/server-software versions, so verify version-specific settings before applying them.
Related articles
Help us improve this article
Tell us what is missing, unclear, outdated, or incorrect. You can also suggest something we should add.