
PerformanceAnalyzer
Monitor your server in real-time, find the source of lag spikes in seconds, and keep your players happy — all from a single, lightweight plugin.
Why PerformanceAnalyzer?
Most monitoring plugins tell you that your server is lagging. PerformanceAnalyzer tells you why.
When a TPS drop or MSPT spike occurs, the plugin automatically captures a full snapshot of your server state — loaded chunks, entity counts, player activity, suspect plugins — so you can diagnose the problem instantly instead of guessing.
⚡ New in v3.0.0
- AntiCheat is now its own plugin. PerformanceAnalyzer is now a focused, pure performance monitor. The XRay/Movement detection lives on in the standalone BSAntiCheat plugin — install it alongside PerformanceAnalyzer and the GUI will link the two together automatically.
- Per-second drop detection — performance drops are now sampled every second (decoupled from the database logging interval), so short-lived spikes are no longer missed.
- REST API is live — JSON endpoints for Grafana/Prometheus dashboards.
- Developer API — other plugins can read live TPS/MSPT/heap/entity data.
Key Features
Real-Time Performance Monitoring
- TPS, MSPT & Heap tracking with historical data and ASCII sparklines
- Spark Integration for highly accurate TPS (10s/1m/5m), MSPT (avg/p95/max), and CPU data
- ProtocolLib Integration for packet analysis and flood detection
- Database Logging (SQLite or MySQL) with async batch writes via HikariCP
- Fallback File Logging — if the database goes down, metrics are written to a file instead of being lost
Automatic Lag Diagnosis
- Performance Drop Detection — triggers automatically when TPS drops or MSPT spikes, sampled every second
- Full Server Snapshots — captures chunks, entities, memory, and player locations at the moment of the drop
- Accurate Low/High Tracking — reports the actual worst TPS/MSPT seen during the drop window
- Lag Source Analysis — identifies the players and plugins most likely responsible
- Problematic Chunk Detection — finds chunks overloaded with tile entities or redstone
- Chunk Thrashing Detection — spots chunks that load/unload too frequently
- Throttled & quiet — the expensive deep analysis is rate-limited and stays out of the console unless debug mode is on, so the diagnostics never make the lag worse
Interactive GUI System
- Performance Dashboard — live TPS, MSPT, heap with auto-refresh
- Lag Analysis Page — top 5 active players and suspect plugins with risk scores
- Performance Drops Page — browse up to 21 recent drops, click for detailed reports
- Config GUI — toggle settings without touching files
- Companion detection — shows BSAntiCheat status when the AntiCheat plugin is installed
- Multi-page navigation, color-coded items, intuitive design
Silent Mode / Streamer Mode
/perfsilent— mute all alert notifications in chat/perfsilent performance— mute just the performance alert category/perfsilent list— view your current preferences/perfsilent reset— receive all alerts again- Persistent across server restarts
- Perfect for streamers, builders, or admins who don't need constant notifications
Discord Webhook Integration
- Automatic notifications for TPS drops, high MSPT, heap warnings, and packet floods
- Color-coded embeds per alert type
- Configurable: choose exactly which events get reported
- Async, rate-limited HTTP requests — zero performance impact
- SSRF-protected: only valid Discord webhook URLs are accepted
Auto Entity Cleaner
- Priority-based removal: items > projectiles > monsters > animals
- Protects named entities, tamed animals, villagers, and boss mobs
- Per-world and per-chunk limits
- Dry-run mode for safe testing before enabling
Additional Tools
- World Statistics (
/worldstats) — entities, chunks, density, trend analysis per world - Entity Analysis (
/entitystats) — breakdown by category, hotspot detection - Chunk Statistics (
/chunkstats) — load tracking, problematic chunks, thrashing - REST API — JSON endpoints for Grafana/Prometheus dashboards with API key auth
- Developer API —
PerformanceAPIfor other plugins to read live metrics - Auto Database Cleanup — configurable retention (default: 30 days)
- Multi-Language — English & German, easily extensible
Commands
| Command | Description | Permission |
|---|---|---|
/perfstatus | Live TPS, MSPT, heap data | performance.status |
/perfhistory [min] | Historical MSPT sparkline & stats | performance.history |
/perfgui | Open the interactive GUI | performance.gui |
/perfreload | Reload plugin configuration | performance.admin |
/perfsilent [type] | Toggle alert notifications (streamer mode) | performance.admin |
/perfdrops [#] | View/analyze performance drops | performance.admin |
/worldstats [world] | Per-world statistics (alias /ws) | performance.admin |
/entitystats [world] | Entity analysis & hotspots (alias /es) | performance.admin |
/chunkstats [sub] | Chunk load tracking & problems (alias /cs) | performance.admin |
Permissions
| Permission | Description | Default |
|---|---|---|
performance.status | Use /perfstatus | Everyone |
performance.history | Use /perfhistory | Everyone |
performance.gui | Use /perfgui | Everyone |
performance.admin | Admin commands & alert notifications | OP |
performance.silent | Use silent mode to mute alerts | OP |
Configuration Highlights
Database (SQLite or MySQL)
database:
type: sqlite # or 'mysql'
sqlite_file: "plugins/PerformanceAnalyzer/perf.db"
retention_days: 30 # Auto-cleanup (0 = disabled)
fallback_file_logging: true # Log to file if the DB is unavailable
fallback_log_file: "plugins/PerformanceAnalyzer/fallback.log"
pool:
max_pool_size: 10
minimum_idle: 2
Performance Thresholds
thresholds:
mspt: 50.0 # MSPT warning (ms)
heap_usage_percent: 80.0 # Heap warning (%)
tps_drop: 19.0 # TPS drop warning
packet_flood_per_tick: 1000.0 # Packet flood detection
Lag Analysis Thresholds
All thresholds are adjustable for your hardware:
lag_analysis:
player_tracking: true
plugin_analysis: true
chunk_analysis_timeout_ms: 5000
# Chunk thresholds (Standard | Powerful | Weak)
chunk_tile_entities_threshold: 10 # 10 | 20-30 | 5-8
chunk_redstone_threshold: 30 # 30 | 50-100 | 15-20
chunk_entity_warning: 50 # 50 | 80-100 | 30-40
chunk_entity_critical: 100 # 100 | 150-200 | 60-80
# World thresholds
world_entity_warning: 5000
world_entity_critical: 10000
Discord Webhook
discord:
enabled: false
webhook_url: ""
alert_types:
high_mspt: true
tps_drop: true
high_heap: true
packet_flood: true
REST API
api:
enabled: false
port: 8080
key: "changeme" # IMPORTANT: Set a secure key! The server won't start otherwise.
Endpoints: /api/health, /api/metrics, /api/worlds, /api/trends
Authentication: Authorization: Bearer <key>
Auto Entity Cleaner
entity_cleaner:
enabled: false
interval_seconds: 300
world_limit: 5000
chunk_limit: 100
dry_run: true # Test mode (logs only, no removal)
protect_villagers: true
protect_item_frames: true
blacklist: ["ENDER_DRAGON", "WITHER", "WARDEN"]
world_whitelist: [] # Worlds that are never cleaned
Developer API
Other plugins can read live performance data directly:
PerformanceAPI api = (PerformanceAPI) Bukkit.getPluginManager().getPlugin("PerformanceAnalyzer");
double tps = api.getCurrentTPS();
double mspt = api.getCurrentMSPT();
double heap = api.getHeapUsagePercent();
int entities = api.getTotalEntityCount();
Language Support
English and German are included. Language files live in plugins/PerformanceAnalyzer/lang/ and are fully customizable.
Adding a new language:
- Copy
en.ymlto your language code (e.g.fr.yml) - Translate all messages
- Set
language: frinconfig.yml - Run
/perfreload
Looking for AntiCheat?
As of v3.0.0, the XRay and Movement detection has moved into its own dedicated plugin: BSAntiCheat. Install both side by side — PerformanceAnalyzer handles performance and lag diagnosis, BSAntiCheat handles cheat detection, and the GUI links them together.
Optional Dependencies
| Plugin | Benefit |
|---|---|
| spark | Accurate TPS (10s/1m/5m), MSPT (avg/p95/max), CPU monitoring |
| ProtocolLib | Packet analysis & flood detection |
| BSAntiCheat | Companion AntiCheat plugin (XRay & movement detection) |
All integrations are optional — the plugin works fully standalone.
Requirements
- Java 21
- Paper 1.21.4 – 1.21.x
- Thread-safe, async operations, minimal performance overhead
Config Auto-Migration
When updating, your existing config is never overwritten. New settings are automatically added with sensible defaults. Just replace the JAR and restart.
Special Thanks
To ELITEK3V for testing.
