Giter Club home page Giter Club logo

spark's Introduction

spark

spark is a performance profiler for Minecraft clients, servers and proxies.

Useful Links

What does spark do?

spark is made up of three separate components:

  • CPU Profiler: Diagnose performance issues.
  • Memory Inspection: Diagnose memory issues.
  • Server Health Reporting: Keep track of overall server health.

⚡ CPU Profiler

spark's profiler can be used to diagnose performance issues: "lag", low tick rate, high CPU usage, etc.

It is:

  • Lightweight - can be ran in production with minimal impact.
  • Easy to use - no configuration or setup necessary, just install the plugin/mod.
  • Quick to produce results - running for just ~30 seconds is enough to produce useful insights into problematic areas for performance.
  • Customisable - can be tuned to target specific threads, sample at a specific interval, record only "laggy" periods, etc
  • Highly readable - simple tree structure lends itself to easy analysis and interpretation. The viewer can also apply deobfuscation mappings.

It works by sampling statistical data about the systems activity, and constructing a call graph based on this data. The call graph is then displayed in an online viewer for further analysis by the user.

There are two different profiler engines:

  • Native AsyncGetCallTrace + perf_events - uses async-profiler (only available on Linux x86_64 systems)
  • Built-in Java ThreadMXBean - an improved version of the popular WarmRoast profiler by sk89q.

⚡ Memory Inspection

spark includes a number of tools which are useful for diagnosing memory issues with a server.

  • Heap Summary - take & analyse a basic snapshot of the servers memory
    • A simple view of the JVM's heap, see memory usage and instance counts for each class
    • Not intended to be a full replacement of proper memory analysis tools. (see next item)
  • Heap Dump - take a full (HPROF) snapshot of the servers memory
    • Dumps (& optionally compresses) a full snapshot of JVM's heap.
    • This snapshot can then be inspected using conventional analysis tools.
  • GC Monitoring - monitor garbage collection activity on the server
    • Allows the user to relate GC activity to game server hangs, and easily see how long they are taking & how much memory is being free'd.
    • Observe frequency/duration of young/old generation garbage collections to inform which GC tuning flags to use

⚡ Server Health Reporting

spark can report a number of metrics summarising the servers overall health.

These metrics include:

  • TPS - ticks per second, to a more accurate degree indicated by the /tps command
  • Tick Durations - how long each tick is taking (min, max and average)
  • CPU Usage - how much of the CPU is being used by the process, and by the overall system
  • Memory Usage - how much memory is being used by the process
  • Disk Usage - how much disk space is free/being used by the system

As well as providing tick rate averages, spark can also monitor individual ticks - sending a report whenever a single tick's duration exceeds a certain threshold. This can be used to identify trends and the nature of performance issues, relative to other system or game events.

For a comparison between spark, WarmRoast, Minecraft timings and other profiles, see this page in the spark docs.

License

spark is free & open source. It is released under the terms of the GNU GPLv3 license. Please see LICENSE.txt for more information.

The spark API submodule is released under the terms of the more permissive MIT license. Please see spark-api/LICENSE.txt for more information.

spark is a fork of WarmRoast, which was also licensed using the GPLv3.

spark's People

Contributors

44trent3 avatar astei avatar avaruus1 avatar darkere avatar davidmayr avatar draradech avatar drexhd avatar extclp avatar ishland avatar james58899 avatar kenroukoro avatar liach avatar literallyfiro avatar llamalad7 avatar lucko avatar lukeeey avatar mdcfe avatar moritzr200 avatar paintninja avatar phit avatar potatopresident avatar powercasgamer avatar pschichtel avatar scrayos avatar semenishchev avatar sk89q avatar theomega24 avatar therealryguy avatar titaniumtown avatar vaperion avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spark's Issues

[Feature] Add more information to stack trace elements

Providing more information about stack trace element, like line (if present) and jar file name will help faster to find and eliminate the issue. Line information will help to search faster, without looking for entire classes when finding needed method. There are plugins, which contains some classes of other plugins to replace. In that case we may go into a trap, finding issue in wrong place.

Question about spark on waterdall

Im looking for what is causing lag on waterfall and im using
/sparkb sampler --thread * --combine-all

but im not sure if thats the proper way to find it. After some time my waterfall is using 70% of cpu and starts lagging a lot. What should be proper flags to find what is causing that?

Spark with flags i've used doesnt say much:
https://sparkprofiler.github.io/#af1UqnDE1j

TPS Graph

A TPS graph which shows a graph of tps history during the profiling

java.lang.NoSuchMethodError: org.bukkit.Server.getMinecraftVersion()Ljava/lang/String;

[23:05:26 INFO]: LaotouY issued server command: /spark:spark sampler --stop
[23:05:26 INFO]: [⚡] The active sampling operation has been stopped! Uploading results...
[23:05:27 WARN]: [spark] Plugin spark v1.4.2 generated an exception while executing task 35093684
java.lang.NoSuchMethodError: org.bukkit.Server.getMinecraftVersion()Ljava/lang/String;
at me.lucko.spark.bukkit.BukkitPlatformInfo.getMinecraftVersion(BukkitPlatformInfo.java:50) ~[?:?]
at me.lucko.spark.common.platform.PlatformInfo.toData(PlatformInfo.java:43) ~[?:?]
at me.lucko.spark.common.sampler.Sampler.toProto(Sampler.java:167) ~[?:?]
at me.lucko.spark.common.sampler.Sampler.formCompressedDataPayload(Sampler.java:192) ~[?:?]
at me.lucko.spark.common.command.modules.SamplerModule.lambda$handleUpload$5(SamplerModule.java:270) ~[?:?]
at org.bukkit.craftbukkit.v1_15_R1.scheduler.CraftTask.run(CraftTask.java:81) ~[spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
at org.bukkit.craftbukkit.v1_15_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54) [spigot-1.15.2.jar:git-Spigot-800b93f-8160e29]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_251]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_251]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_251]

Line numbers

Would it be possible to show line numbers instead of method names like massivelag?

[1.16.1] /tps crashes session, player logged out

[13:01:26] [Server thread/INFO]: mrfloris issued server command: /tps
[13:01:26] [Server thread/INFO]: mrfloris lost connection: Disconnected
[13:01:26] [Server thread/INFO]: [DiscordSRV] Player mrfloris quit with silent quitting permission, not sending a quit message
[13:01:26] [Server thread/INFO]: 11/07/20 13:01:26 Inventory saved with id: 5781
>tps
[13:02:06] [Server thread/INFO]: [⚡] TPS from last 5s, 10s, 1m, 5m, 15m:
[13:02:06] [Server thread/INFO]: [⚡]  *20.0, *20.0, *20.0, *20.0, *20.0
[13:02:06] [Server thread/INFO]: [⚡]
[13:02:06] [Server thread/INFO]: [⚡] CPU usage from last 10s, 1m, 15m:
[13:02:06] [Server thread/INFO]: [⚡]  16%, 25%, 28%  (system)
[13:02:06] [Server thread/INFO]: [⚡]  4%, 6%, 6%  (process)
[13:02:08] [User Authenticator #2/INFO]: UUID of player mrfloris is 631e3896-da2a-4077-974b-d047859d76bc
[13:02:08] [Server thread/INFO]: [DiscordSRV] Player mrfloris joined with silent joining permission, not sending a join message
[13:02:08] [Server thread/INFO]: mrfloris[/127.0.0.1:57271] logged in with entity id 20237 at ([pvp]34.06864175636525, 36.79787905151586, -835.5741209429926)
[13:02:08] [Craft Scheduler Thread - 66/INFO]: Failed to check for TradeMe update on spigot web page.
[13:02:10] [Server thread/INFO]: mrfloris issued server command: /tps
[13:02:10] [Server thread/INFO]: mrfloris lost connection: Disconnected
[13:02:10] [Server thread/INFO]: [DiscordSRV] Player mrfloris quit with silent quitting permission, not sending a quit message
[13:02:10] [Server thread/INFO]: 11/07/20 13:02:10 Inventory saved with id: 5782
[13:02:11] [Craft Scheduler Thread - 62/INFO]: [mcMMO] Aborting profile loading recovery for mrfloris - player logged out
[13:02:21] [User Authenticator #3/INFO]: UUID of player mrfloris is 631e3896-da2a-4077-974b-d047859d76bc
[13:02:21] [Server thread/INFO]: [DiscordSRV] Player mrfloris joined with silent joining permission, not sending a join message
[13:02:21] [Server thread/INFO]: mrfloris[/127.0.0.1:57278] logged in with entity id 20238 at ([pvp]34.06864175636525, 36.79787905151586, -835.5741209429926)
[13:02:24] [Server thread/INFO]: mrfloris issued server command: /cmi tps
>ver spark
[13:02:46] [Server thread/INFO]: spark version 1.4.2
[13:02:46] [Server thread/INFO]: spark is a performance profiling plugin based on sk89q's WarmRoast profiler
[13:02:46] [Server thread/INFO]: Authors: Luck and sk89q
>ver
[13:02:48] [Server thread/INFO]: This server is running CraftBukkit version git-Spigot-c3a49df-b0c6dfe (MC: 1.16.1) (Implementing API version 1.16.1-R0.1-SNAPSHOT)
[13:02:48] [Server thread/INFO]: Checking version, please wait...
[13:02:48] [Thread-264/INFO]: You are running the latest version
>

Screenshot 2020-07-11 at 13 04 13

In the console i can do spark tps and tps and spark healthreport fine. in-game it crashes the session or whatever it is called, you get logged out and get the msg as in the screenshot.

403 Forbidden when uploading results

Hi there,

We are getting 403 forbidden when uploading results:

[14:34:58 INFO]: [⚡] The active sampling operation has been stopped! Uploading results...
[14:35:00 WARN]: [spark] Plugin spark v1.3.2 generated an exception while executing task 15274897
java.lang.RuntimeException: Request was unsuccessful: 403 - Forbidden
        at me.lucko.spark.common.util.AbstractHttpClient.makeHttpRequest(AbstractHttpClient.java:41) ~[?:?]
        at me.lucko.spark.common.util.BytebinClient.postContent(BytebinClient.java:84) ~[?:?]
        at me.lucko.spark.common.command.modules.SamplerModule.lambda$handleUpload$5(SamplerModule.java:261) ~[?:?]
        at me.lucko.spark.common.command.modules.SamplerModule$$Lambda$5947.0000000000000000.run(Unknown Source) ~[?:?]
        at org.bukkit.craftbukkit.v1_15_R1.scheduler.CraftTask.run(CraftTask.java:84) ~[patched_1.15.2.jar:git-Paper-"7bd0b6ab"]
        at org.bukkit.craftbukkit.v1_15_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54) ~[patched_1.15.2.jar:git-Paper-"7bd0b6ab"]
        at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[patched_1.15.2.jar:git-Paper-"7bd0b6ab"]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_232]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_232]
        at java.lang.Thread.run(Thread.java:819) [?:1.8.0_232]

Anything we can do to solve this?

Thank you in advance.

Add the ability to see the methods the CPU is spending the most time on

The current state of spark's profiling allows for a quite comprehensive look into the call stack but it is lacking when it comes to actually interpreting the data presented. Adding the ability to see the methods the CPU is spending the most time on will allow for developers to optimize hot spots in their code that they simply didn't know was lagging because of how spread-out the calls are throughout the stack.

NoSuchMethod getMinecraftVersion

Build 141 and above.
image
Java 8
Paper 1.8.8 latest

As far as I can tell, this function isn't present in any version of Spigot.

Steps to recreate:

  1. Start profiling with /spark profiler
  2. Stop profiling with /spark profiler --stop or /spark sampler --stop

Find the Chunk that caused the lag

I am sorry to post this issue here, as I have not found your discord channel.
I wonder if spark could find out which chunk are in lag, if not, whether similar features can be added?

spark-forge tab completion problems

When using tab complete on any --options it will delete the previous inputs.

For example typing /spark sampler --time then tab-complete reverts to /spark --timeout.

spark-forge

Sampling operation failed unexpectedly

Noticed this exception when stopping sampler

spark sampler --stop
[16:44:39 INFO]: [⚡] The active sampling operation has been stopped! Uploading results...
[16:44:39 INFO]: [⚡] Sampling operation failed unexpectedly. Error: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@5b1860eb rejected from java.util.concurrent.ScheduledThreadPoolExecutor@55df95f8[Shutting down, pool size = 1, active threads = 1, queued tasks = 0, completed tasks = 175036]
[16:44:39 WARN]: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@5b1860eb rejected from java.util.concurrent.ScheduledThreadPoolExecutor@55df95f8[Shutting down, pool size = 1, active threads = 1, queued tasks = 0, completed tasks = 175036]
[16:44:39 WARN]: at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)
[16:44:39 WARN]: at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
[16:44:39 WARN]: at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:326)
[16:44:39 WARN]: at java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:533)
[16:44:39 WARN]: at java.util.concurrent.ScheduledThreadPoolExecutor.execute(ScheduledThreadPoolExecutor.java:622)
[16:44:39 WARN]: at me.lucko.spark.common.sampler.Sampler.run(Sampler.java:134)
[16:44:39 WARN]: at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[16:44:39 WARN]: at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
[16:44:39 WARN]: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
[16:44:39 WARN]: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
[16:44:39 WARN]: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[16:44:39 WARN]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[16:44:39 WARN]: at java.lang.Thread.run(Thread.java:748)
[16:44:39 INFO]: [⚡] Sampling results:
[16:44:39 INFO]: https://sparkprofiler.github.io/#z42eF6Swf

Command used: spark sampler --only-ticks-over 500

Paper 1.13.2 build 650
Spark build 95

1.7.10 version

Hey. Is there a 1.7.10-compatible version of spark?
The file itself injects into the classpath, but no command in-game is available.

[Bug] Player /spark cause "java.lang.NoClassDefFoundError"

Reproduce:

  1. Run /spark command in-game.

Resources:

  • spark b52
  • Spigot 1.14 b2225
  • Java 11.0.2 (Oracle JDK)

Versions affected: b52

[14:21:21] [Server thread/INFO]: i0xHeX issued server command: /spark
[14:21:21] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 'spark' in plugin spark v1.3.0
	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149) ~[spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at org.bukkit.craftbukkit.v1_14_R1.CraftServer.dispatchCommand(CraftServer.java:707) ~[spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.PlayerConnection.handleCommand(PlayerConnection.java:1666) ~[spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.PlayerConnection.a(PlayerConnection.java:1506) ~[spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.PacketPlayInChat.a(PacketPlayInChat.java:47) ~[spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.PacketPlayInChat.a(PacketPlayInChat.java:1) ~[spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:13) ~[spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.TickTask.run(SourceFile:18) [spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.IAsyncTaskHandler.executeTask(SourceFile:135) [spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.IAsyncTaskHandlerReentrant.executeTask(SourceFile:23) [spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.IAsyncTaskHandler.executeNext(SourceFile:114) [spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.MinecraftServer.aW(MinecraftServer.java:892) [spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.MinecraftServer.executeNext(MinecraftServer.java:885) [spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.IAsyncTaskHandler.awaitTasks(SourceFile:123) [spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.MinecraftServer.sleepForTick(MinecraftServer.java:869) [spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.MinecraftServer.run(MinecraftServer.java:802) [spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: java.lang.NoClassDefFoundError: Could not initialize class me.lucko.spark.common.command.CommandResponseHandler
	at me.lucko.spark.common.SparkPlatform.executeCommand(SparkPlatform.java:108) ~[?:?]
	at me.lucko.spark.bukkit.SparkBukkitPlugin.onCommand(SparkBukkitPlugin.java:80) ~[?:?]
	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	... 17 more

Add statistical context

Heya! I know that Spark is meant to replace Warmroast to its most 'feature full' extent, but often enough, I end up using a timings or a /gc printout as well because spark on its own doesn't necessarily provide enough context to properly analyze the logging.

Indeed, stats like playercount would help know if normal scheduling tasks like worldsave are to be taken seriously - as its strain would vastly depend on whether playercount is high or low. Average TPS would help as well, as it would tell you whether the server is or isn't observing TPS loss. Additional items like chunk count or entity count might help big modded servers as well, for similar reasons as the playercount.

Of course, this is a suggestion and it is by no need necessary, but I thought I might as well input on what, to me, is 'missing' to fully make sense of a spark read.

[suggestion] tickmonitoring

Currently the only way to stop the tickmonitoring after you start it is to put the threashold higher than what it is reporting. Woud like an option to simply --stop it

Forge Mod Does not work

> 18:34:10 [INFO] Starting minecraft server version 1.6.4
> 18:34:10 [INFO] Attempting early MinecraftForge initialization
> 18:34:10 [INFO] MinecraftForge v
> 18:34:10 [INFO] 9.11.1.965
> 18:34:10 [INFO] Initialized
> 18:34:10 [INFO] MinecraftForge v9.11.1.965 Initialized
> 18:34:11 [INFO] Replaced 111 ore recipies
> 18:34:11 [INFO] Completed early MinecraftForge initialization
> 18:34:11 [INFO] Reading custom logging properties from /home/container/config/logging.properties
> 18:34:11 [OFF] Logging level for ForgeModLoader logging is set to ALL
> > > > > > > 18:34:11 [INFO] Searching /home/container/mods for mods
> > > > > > > > > > > > 18:34:11 [SEVERE] Unable to read a class file correctly
java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at cpw.mods.fml.common.discovery.asm.ASMModParser.<init>(ASMModParser.java:52)
at cpw.mods.fml.common.discovery.JarDiscoverer.discover(JarDiscoverer.java:72)
at cpw.mods.fml.common.discovery.ContainerType.findMods(ContainerType.java:42)
at cpw.mods.fml.common.discovery.ModCandidate.explore(ModCandidate.java:71)
at cpw.mods.fml.common.discovery.ModDiscoverer.identifyMods(ModDiscoverer.java:134)
at cpw.mods.fml.common.Loader.identifyMods(Loader.java:341)
at cpw.mods.fml.common.Loader.loadMods(Loader.java:472)
at cpw.mods.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:94)
at cpw.mods.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:366)
at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:93)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:637)
at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:583)
> 18:34:11 [SEVERE] There was a problem reading the entry me/lucko/spark/forge/ForgeServerSparkPlugin.class in the jar /home/container/mods/spark-forge.jar - probably a corrupt zip
cpw.mods.fml.common.LoaderException: java.lang.IllegalArgumentException
at cpw.mods.fml.common.discovery.asm.ASMModParser.<init>(ASMModParser.java:58)
at cpw.mods.fml.common.discovery.JarDiscoverer.discover(JarDiscoverer.java:72)
at cpw.mods.fml.common.discovery.ContainerType.findMods(ContainerType.java:42)
at cpw.mods.fml.common.discovery.ModCandidate.explore(ModCandidate.java:71)
at cpw.mods.fml.common.discovery.ModDiscoverer.identifyMods(ModDiscoverer.java:134)
at cpw.mods.fml.common.Loader.identifyMods(Loader.java:341)
at cpw.mods.fml.common.Loader.loadMods(Loader.java:472)
at cpw.mods.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:94)
at cpw.mods.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:366)
at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:93)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:637)
at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:583)
Caused by: java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at cpw.mods.fml.common.discovery.asm.ASMModParser.<init>(ASMModParser.java:52)
... 11 more
> 18:34:11 [WARNING] Zip file spark-forge.jar failed to read properly, it will be ignored
cpw.mods.fml.common.LoaderException: java.lang.IllegalArgumentException
at cpw.mods.fml.common.discovery.asm.ASMModParser.<init>(ASMModParser.java:58)
at cpw.mods.fml.common.discovery.JarDiscoverer.discover(JarDiscoverer.java:72)
at cpw.mods.fml.common.discovery.ContainerType.findMods(ContainerType.java:42)
at cpw.mods.fml.common.discovery.ModCandidate.explore(ModCandidate.java:71)
at cpw.mods.fml.common.discovery.ModDiscoverer.identifyMods(ModDiscoverer.java:134)
at cpw.mods.fml.common.Loader.identifyMods(Loader.java:341)
at cpw.mods.fml.common.Loader.loadMods(Loader.java:472)
at cpw.mods.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:94)
at cpw.mods.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:366)
at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:93)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:637)
at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:583)
Caused by: java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at org.objectweb.asm.ClassReader.<init>(Unknown Source)
at cpw.mods.fml.common.discovery.asm.ASMModParser.<init>(ASMModParser.java:52)
... 11 more
> 18:34:11 [INFO] Forge Mod Loader has identified 4 mods to load
> > > > > > > > 18:34:11 [INFO] Activating mod mcp
> > 18:34:11 [INFO] Activating mod FML
> > > 18:34:12 [INFO] Activating mod Forge

heapsummary ArrayIndexOutOfBoundsException

Just after downloading and installing the plugin, /spark heapsummary throws this error. I was able to heapdump just fine though.

[21:21:18 INFO]: [⚡] Creating a new heap dump summary, please wait...
[21:21:18 INFO]: [⚡] An error occurred whilst inspecting the heap.
[21:21:18 WARN]: java.lang.ArrayIndexOutOfBoundsException: 30
[21:21:18 WARN]: at me.lucko.spark.common.util.TypeDescriptors.getJavaType(TypeDescriptors.java:72)
[21:21:18 WARN]: at me.lucko.spark.common.util.TypeDescriptors.getJavaType(TypeDescriptors.java:65)
[21:21:18 WARN]: at me.lucko.spark.common.util.TypeDescriptors.getJavaType(TypeDescriptors.java:35)
[21:21:18 WARN]: at me.lucko.spark.common.heapdump.HeapDumpSummary.lambda$createNew$0(HeapDumpSummary.java:97)
[21:21:18 WARN]: at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
[21:21:18 WARN]: at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
[21:21:18 WARN]: at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
[21:21:18 WARN]: at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
[21:21:18 WARN]: at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
[21:21:18 WARN]: at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
[21:21:18 WARN]: at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
[21:21:18 WARN]: at me.lucko.spark.common.heapdump.HeapDumpSummary.createNew(HeapDumpSummary.java:101)
[21:21:18 WARN]: at me.lucko.spark.common.command.modules.MemoryModule.lambda$null$0(MemoryModule.java:61)
[21:21:18 WARN]: at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftTask.run(CraftTask.java:59)
[21:21:18 WARN]: at org.bukkit.craftbukkit.v1_8_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:53)
[21:21:18 WARN]: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[21:21:18 WARN]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[21:21:18 WARN]: at java.lang.Thread.run(Thread.java:748)

[Bug] /spark healthreport newline not working

What behaviour is expected:
the newline works the same on other commands
What behaviour is observed:
Screenshot_1

How to reproduce:
Type /spark healthreport

Server info:
Server Software: Thermos-1.7.10-1614
Mods and plugins: https://pastebin.com/XfmkN2sY
Plugin version: spark v1.3.0
Note: The plugin works perfectly, just this command that has this problem.

[Feature] Add used memory after GC to memory reports

Problem:
Used memory at the time we send for example /spark health includes garbage memory, that will be collected soon. When looking for lag source (or for memory leak) checking used memory may confuse, at the moment it could be like 80%, and the next time GC will collect everything so usage become 47%:
https://i.imgur.com/MIdEkcl.png

This forces to send command again and again to see the approximate memory usage excluding garbage.

Solution:
We can calculate used memory without GC, lets assume we check it every tick:

  • Record current memory usage to current_mem_usage
  • If there is prev_mem_usage recorded, then compare. If current_mem_usage < prev_mem_usage, then we assign no_garbage_mem_usage = current_mem_usage, else do nothing.
  • Assign prev_mem_usage = current_mem_usage

So briefly if we see that GC collected garbage, we update so called no_garbage_mem_usage to current memory usage. This will produce us "stable" memory usage. I think it would be much better to use some GC listeners if possible. I never worked with this, but searching fast I found something:
https://docs.oracle.com/javase/7/docs/jre/api/management/extension/com/sun/management/GarbageCollectionNotificationInfo.html

Don't include spark/warmroast threads in the profiler output.

When running /profiler start --thread * all threads are included, even the profiler threads. This causes a huge list of spark worker threads in the output which I don't need.
capture
Looking at the scroll bar you can see how long the list is beyond the image, at the bottom there are only 3 threads that are actually useful.

Privacy issues

As i was reading the spark-web project is just a reader-data from another storage provider. Would be possible to set own-storage provider?

heapsummary crashed the server

downloaded spark, put the plugin in the server and rebooted. after a while i went to do /spark heapsummary but my server crashed.

i have 4 players on at the time (if it matter)
here is the console log from the crash:
2020-03-17-3.log

server running mc version 1.15.2
6GB memory 3vCores 40Gb Disk space.

thanks.

Tabcompletion

A default user without any spark related permission can see the commands:

  • spark
  • tps

Is it possible to suggest these commands only if a player has any permission for spark?

[Bug] Console /spark cause "IllegalStateException: content must be set"

Reproduce:

  1. Run spark command withing console.

Resources:

  • spark b52
  • Spigot 1.14 b2225
  • Java 11.0.2 (Oracle JDK)

Versions affected: b52

[14:20:59] [Server thread/WARN]: Unexpected exception while parsing console command "spark"
org.bukkit.command.CommandException: Unhandled exception executing command 'spark' in plugin spark v1.3.0
	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:149) ~[spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at org.bukkit.craftbukkit.v1_14_R1.CraftServer.dispatchCommand(CraftServer.java:707) ~[spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at org.bukkit.craftbukkit.v1_14_R1.CraftServer.dispatchServerCommand(CraftServer.java:692) [spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.DedicatedServer.handleCommandQueue(DedicatedServer.java:433) [spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.DedicatedServer.b(DedicatedServer.java:397) [spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.MinecraftServer.a(MinecraftServer.java:953) [spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at net.minecraft.server.v1_14_R1.MinecraftServer.run(MinecraftServer.java:798) [spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	at java.lang.Thread.run(Thread.java:834) [?:?]
Caused by: java.lang.ExceptionInInitializerError
	at me.lucko.spark.common.SparkPlatform.executeCommand(SparkPlatform.java:108) ~[?:?]
	at me.lucko.spark.bukkit.SparkBukkitPlugin.onCommand(SparkBukkitPlugin.java:80) ~[?:?]
	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	... 8 more
Caused by: java.lang.IllegalStateException: content must be set
	at net.kyori.text.TextComponent$Builder.build(TextComponent.java:291) ~[?:?]
	at me.lucko.spark.common.command.CommandResponseHandler.<clinit>(CommandResponseHandler.java:41) ~[?:?]
	at me.lucko.spark.common.SparkPlatform.executeCommand(SparkPlatform.java:108) ~[?:?]
	at me.lucko.spark.bukkit.SparkBukkitPlugin.onCommand(SparkBukkitPlugin.java:80) ~[?:?]
	at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[spigot-1.14.jar:git-Spigot-4d24e36-5193f76]
	... 8 more

[Feature] Add exact duration threshold to tickmonitoring

Something like --only-ticks-over <ms> in profiler feature.

This will add an ability to monitor spikes for example at the moment you make a sampling with given threshold and wanna know how much spikes occurred during recording and if this is enough for some or another situation, without spamming /spark tps command.

I don't find percentage threshold clear enough, as average TPS during 6 seconds may vary and there should be something more "stable" to monitor.

[Suggestion] Compress heap dumps

In my experience, heap dump (.hprof files) file size can be cut down atleast by 3-4x by using LZMA. Compressing them makes heap dumps more easily downloadable as smaller files take less time to download.

Of course this should be configurable, via command argument preferably.

Flag --ignore-sleeping does not work?

I just tried to test new flags, and as I understood, --ignore-sleeping should ignore time, when server sleeps for tick and this means if tick took 25 ms, sampler should not record this, if threshold is 50ms.

My commands:
/spark profiler --start --ignore-sleeping --only-ticks-over 50
/spark profiler --stop --order-by-time

Expected behaviour:
Empty logs.

Actual output:
https://spark.lucko.me/#yKgkSTTzBC
Command /spark tps shows that the maximum tick duration during a minute was 23.3ms, but logs show some data recorded.

[Feature Request] Automatic profiling on lag spike

We are currently being plagued by some specific bug which randomly causes the server to freeze until the watchdog causes it to crash.

As it's crashing it's not possible to generate a spark report about it making it very difficult to figure out what's causing it.

My request would be a feature where an automatic profiling can start if a tick takes longer than.. 5 min or so.

Add some server information to profiler reports

It would be useful for easier debugging and stuff if profiler reports would include some information about the server software and version used and that to be visible on the web page too.

Spam Warning in console when completing /spark sampler (during run and stop process)

The following warnings spammed the console when running and stopping /spark sampler to get the link and review timings.

_[20:31:38] [Server thread/INFO]: [⚡] There isn't an active sampling task running.
[20:32:07] [Server thread/INFO]: EchocallingEarth issued server command: /spark sampler
[20:32:07] [Server thread/INFO]: [⚡] Initializing a new profiler, please wait...
[20:32:07] [Server thread/INFO]: [⚡] Profiler now active!
[20:32:07] [Server thread/INFO]: [⚡] Use '/spark sampler --stop' to stop profiling and upload the results.
[20:35:16] [Craft Scheduler Thread - 22/WARN]: java.util.ConcurrentModificationException
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.HashMap$HashIterator.nextNode(HashMap.java:1445)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.HashMap$EntryIterator.next(HashMap.java:1479)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.HashMap$EntryIterator.next(HashMap.java:1477)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.HashMap.putMapEntries(HashMap.java:512)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.HashMap.<init>(HashMap.java:490)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at com.songoda.epicfarming.farming.levels.modules.ModuleAutoCollect.collectLivestock(ModuleAutoCollect.java:122)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at com.songoda.epicfarming.farming.levels.modules.ModuleAutoCollect.runFinal(ModuleAutoCollect.java:49)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at com.songoda.epicfarming.farming.levels.modules.Module.run(Module.java:47)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at com.songoda.epicfarming.tasks.FarmTask.lambda$run$3(FarmTask.java:107)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:485)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at com.songoda.epicfarming.tasks.FarmTask.run(FarmTask.java:105)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at org.bukkit.craftbukkit.v1_15_R1.scheduler.CraftTask.run(CraftTask.java:84)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at org.bukkit.craftbukkit.v1_15_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[20:35:16] [Craft Scheduler Thread - 22/WARN]: 	at java.lang.Thread.run(Thread.java:748)
[20:37:44] [Server thread/INFO]: EchocallingEarth is now AFK
[20:44:06] [Server thread/INFO]: [⚡] TPS from last 5s, 10s, 1m, 5m, 15m:
[20:44:06] [Server thread/INFO]: [⚡]  *20.0, *20.0, *20.0, 20.0, 19.89
[20:44:06] [Server thread/INFO]: [⚡] 
[20:44:06] [Server thread/INFO]: [⚡] Tick durations (avg/min/max ms) from last 5s, 10s, 1m:
[20:44:06] [Server thread/INFO]: [⚡]  13.0/11.1/18.2, 13.1/10.5/21.8, 13.0/9.8/122.2
[20:44:06] [Server thread/INFO]: [⚡] 
[20:44:06] [Server thread/INFO]: [⚡] CPU usage from last 10s, 1m, 15m:
[20:44:06] [Server thread/INFO]: [⚡]  12%, 12%, 19%  (system)
[20:44:06] [Server thread/INFO]: [⚡]  16%, 16%, 23%  (process)
[20:52:40] [Server thread/INFO]: EchocallingEarth is no longer AFK
[20:54:27] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 6568ms or 131 ticks behind
[20:54:34] [Server thread/INFO]: EchocallingEarth issued server command: /gms
[20:54:37] [Server thread/INFO]: EchocallingEarth issued server command: /fly
[20:55:27] [Server thread/INFO]: EchocallingEarth issued server command: /ah
[20:56:13] [Server thread/INFO]: EchocallingEarth issued server command: /spark sampler --stop
[20:56:13] [Server thread/INFO]: [⚡] The active sampling operation has been stopped! Uploading results...
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.comphenix.protocol.injector.netty.EventLoopProxy from ProtocolLib v4.5.0 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class net.goldtreeservers.worldguardextraflags.listeners.WorldListener from WorldGuardExtraFlags v4.1.4 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.sk89q.worldguard.protection.managers.RegionManager from WorldGuard v7.0.2-SNAPSHOT;bf2593e which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class nl.pim16aap2.bigDoors.handlers.ChunkUnloadHandler from BigDoors vAlpha 0.1.8.18 (b436) which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.imdanix.caves.mobs.MobsManager from DangerousCaves v2.2.2;16 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.lucko.luckperms.bukkit.inject.permissible.LuckPermsPermissible from LuckPerms v5.1.46 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.sk89q.worldedit.bukkit.BukkitWorld from WorldEdit v7.1.0;8e55131 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.morelaid.AcceptTheRules.Event.Events from AcceptTheRules v2.5 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class DqnTRLiLuUyhkGRHw3Oq3bDufmzmJWPLA3OCehjlT5Vosl4nyo4AaVxAbQKFPsaftaKz4ndYRIUgPlWUB4hWhBtaSBnB7itsBCpgblXONsh6UsMIxsAoR5Rxc2wiXHCjwxHp44sDRravbEU2MkyGfZofOm2Jj8AyoB3CcSmUuJ from leakBanking v0.9.4 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.bergerkiller.bukkit.mw.MWListener from My_Worlds v1.15.2-v1 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.bergerkiller.bukkit.common.MaterialProperty from BKCommonLib v1.15.2-v4 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.konsolas.aac.bY from AAC v4.3.12 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.Zrips.CMI.Modules.FlightCharge.FlightListener from CMI v8.6.26.9 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class n3kas.ae.enchanthandler.effects.WebWalkerEffect from AdvancedEnchantments v7.6.14 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class xzot1k.plugins.ds.core.Listeners from DisplayShops v1.5 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.gamingmesh.jobs.listeners.JobsListener from Jobs v4.15.11 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.ryanhamshire.GPFlags.listener.PlayerListener from GriefPreventionFlags v5.9.0 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.songoda.epicspawners.listeners.InteractListeners from EpicSpawners v6.3.15 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.phil14052.CustomCobbleGen.Events.PlayerEvents from CustomCobbleGen v1.4.0 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class org.mineacademy.chatcontrol.lib.fo.model.p from ChatControl v8.6.6 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.griefcraft.listeners.LWCBlockListener from LWC v2.2.5-cdffea1 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.songoda.epicfarming.listeners.InteractListeners from EpicFarming v3.0.19 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.rockyhawk.commandPanels.utils from CommandPanels v3.1.1 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:14] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.ryanhamshire.GriefPrevention.PlayerEventHandler from GriefPrevention v16.13.0 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.songoda.epicanchors.core.gui.GuiManager$GuiListener from EpicAnchors v1.4.8 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.songoda.epichoppers.core.gui.GuiManager$GuiListener from EpicHoppers v4.6.7 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.songoda.epiclevels.core.gui.GuiManager$GuiListener from EpicLevels vmaven-version-number which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.songoda.ultimatecatcher.core.gui.GuiManager$GuiListener from UltimateCatcher v1.3.6 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.songoda.ultimatefishing.core.gui.GuiManager$GuiListener from UltimateFishing v1.2.6 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.songoda.ultimatekits.core.gui.GuiManager$GuiListener from UltimateKits v2.6.5 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.songoda.ultimaterepairing.core.gui.GuiManager$GuiListener from UltimateRepairing v1.3.4 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.arcaniax.hdb.listener.InventoryListener from HeadDatabase v4.12.3 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.wolfyscript.utilities.api.inventory.InventoryAPI from WolfyUtilities v1.5.6.19 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.wolfyscript.customcrafting.listeners.AnvilListener from CustomCrafting v1.5.5.0 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.xanium.noplugin.ui.MenuListener from NoPlugins v7.2 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.vomarek.MessagesGUI.Events.GUIClickListener from MessagesGUI v3.0 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class sh99.iteminchat.Listener.AsyncInventoryChatListener from ItemInChatFree v1.9.3 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class fr.moribus.imageonmap.image.MapInitEvent from ImageOnMap v4.0-pre2 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.rabbitcompany.admingui.listeners.InventoryClickListener from AdminGUI-Premium v4.1.2 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.qKing12.AuctionMaster.meniu.MeniuEvents2 from AuctionMaster v2.2 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.songoda.ultimatetimber.manager.TreeFallManager from UltimateTimber v2.0.6 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.mylogo.chestlock.listeners.PlayerListener from ChestLockGui v3.0.0 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.ebonjaeger.perworldinventory.listener.player.PlayerGameModeChangeListener from PerWorldInventory v2.3.2 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class me.hexedhero.lp.listeners.Stopper from LimitPillagers v2.12.0 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.gmail.filoghost.holographicdisplays.listener.MainListener from HolographicDisplays v2.4.2 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:15] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.songoda.ultimatestacker.listeners.EntityListeners from UltimateStacker v1.11.14 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:16] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.divisionind.bprm.events.BackpackTrackEvents from BackpacksRemastered v2020.0.4 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:16] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.songoda.epicfurnaces.tasks.FurnaceTask from EpicFurnaces v4.5.7 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:16] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.songoda.epicheads.listeners.DeathListeners from EpicHeads v3.2.10 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:16] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.froobworld.avl.tasks.MainTask from VillagerOptimiser v1.1.2 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:16] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.haroldstudios.infoheads.bukkit.Metrics from InfoHeads v2.2.21 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:16] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class ca.tweetzy.cosmicvaults.core.inventory.TInventoryEventListener from CosmicVaults v2.0.3 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:17] [Craft Scheduler Thread - 74/WARN]: [spark] Loaded class com.flodoerr.item_chest_sorter.Listener from Item-Chest-Sorter v1.5.1 which is not a depend, softdepend or loadbefore of this plugin.
[20:56:19] [Craft Scheduler Thread - 74/INFO]: [⚡] Sampling results:
[20:56:19] [Craft Scheduler Thread - 74/INFO]: https://spark.lucko.me/#SjOU8xYiHh_

I am unsure if this is a Bug or what so I am reporting it and hoping that you will know the answer and a fix so we do not have a spammed console when using Spark. Thanks, I'll await your reply for further info etc.

web page unresponsive and glitchy

often have to wait a few seconds for things to happen, I am using chrome, like I will click on a expand button a few times, then nothing will happen then it will suddenly expand and contract a ton of times very quickly

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.