Skip to main content
Version: Next

Performance and profiling

Measure a representative production build before changing worker counts or caches. Record Node/Watt/framework versions, CPU quota, memory limit, worker count, throughput, latency percentiles, error rate, and workload. Compare one change at a time.

CPU profiling​

Use Watt-native profiling on an authorized running instance:

wattpm ps
wattpm applications my-app
wattpm pprof start my-app api
# Exercise the representative workload.
wattpm pprof stop my-app api

The stop command saves a pprof .pb profile. Use the returned filename rather than guessing it. If there is only one runtime/application, the CLI can infer IDs; otherwise specify both. Read wattpm help pprof for the installed release's options.

With an installed @platformatic/flame tool:

flame generate profile.pb
flame generate --md-format=detailed profile.pb

Use flame run for standalone Node scripts, not as a replacement for Watt's worker-aware profiling. Inspect application frames, allocation pressure, synchronous work, slow dependencies, and cache misses before attributing cost to the runtime.

Memory​

wattpm heap-snapshot my-app api

Heap snapshots can pause a worker and need substantial memory. Choose the target and collection window deliberately. Treat snapshots and profiles as potentially sensitive artifacts and keep them out of source control. Compare retained objects across repeated workloads rather than diagnosing a leak from one RSS value.

Workers and replicas​

A standalone capability uses runtime.workers. In a multi-app root, set workers on each application entry or use a root default. Do not use a map keyed by app ID.

{
"applications": [
{ "id": "frontend", "path": "./web/frontend", "workers": 2 },
{ "id": "api", "path": "./web/api", "workers": 1 }
]
}

Budget per-worker heaps, database pools, cache clients, and framework memory. More workers do not guarantee better latency under a fixed CPU quota. Observe CPU throttling, event-loop delay, and downstream saturation as well as aggregate CPU utilization.

Caching and deployment​

For Next.js, inspect the installed capability's Valkey/Redis and Cache Components support. Verify invalidation across workers and replicas. Keep cache namespaces and deployment identity consistent; avoid reusing incompatible entries between releases.

Preserve framework build output and required assets. Load-test through the public gateway, including redirects, compression, authentication, and realistic cache hit rates. Report measured results and limitations rather than universal performance percentages.

See Next.js, observability, and Kubernetes.