
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.
Сервер для плагина PerformanceAnalyzer - как у профи
Плагин PerformanceAnalyzer создан для серверов: на своём сервере вы настраиваете его под себя и решаете, кому играть. Создать сервер с плагином PerformanceAnalyzer для друзей можно за пару минут - BungeeHost всё уже подготовил.
