For now, Ignite has not build-in profiling tool for user's operations and internal processes. Such a tool will be able to collect performance statistics and create a human-readable report. It will help to analyze load and to tune applications.
Example of similar tools in other products: AWR (Oracle); pgbadger, pgmetrics, powa (PostgresSQL).
We should provide a way to execute cluster profiling. Consider the following scenario:
The Ignite will provide public facade to manage profiling mode:
ignite.profiling().enable(); // Turns on profiling mode.
ignite.profiling().disable(); // Turns off profiling mode.ignite.profiling().isEnabled(); // Is profiling mode turn on?
Profiling mode can be managed from CLI (And JMX):
control.sh --profiling // Prints current profiling mode status.
control.sh --profiling enable // Turns on profiling mode.
control.sh --profiling disable // Turns off profiling mode.
The Ignite will provide the public SPI interface (ProfilingSpi
) to log statistics. It describes follow methods:
The internal processor (ProfilingProcessor)
will be used to manage profiling whole cluster. It will be availible from KernalContext
.
The new ignite-profiling
module will contain:
LogProfilingSpiImpl
) based on async logging to the configured file. report.sh(bat)
The performance report will be in a human-readable text format and should contain:
Additional investigation required to gather following statistics:
The new interface will be added: ProfilingSpi
.
The new ignite facade will be added: ignite.profiling()
.
The new module will be created: ignite-profiling
.
Node left will not affect to the cluster profiling mode.
Joining node will set up profiling mode from DiscoveryDataBag
provided by the cluster.
Enabled profiling mode could cause performance degradation.
// Links to discussions on the devlist, if applicable.
// Links or report with relevant JIRA tickets.