declarative relay deployment on hetzner relay-eval.waow.tech
atproto relay
14
fork

Configure Feed

Select the types of activity you want to include in your feed.

dashboard: add malloc mmap_bytes to malloc breakdown panel

the metric was exposed by the endpoint but not graphed, hiding a major
component of memory usage.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

zzstoatzz d0787337 3677439c

+137
+137
deploy/zlay-dashboard.json
··· 285 285 "refId": "A" 286 286 } 287 287 ] 288 + }, 289 + { 290 + "title": "malloc breakdown", 291 + "type": "timeseries", 292 + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 32 }, 293 + "datasource": { "type": "prometheus", "uid": "prometheus" }, 294 + "fieldConfig": { 295 + "defaults": { 296 + "unit": "bytes", 297 + "color": { "mode": "palette-classic" }, 298 + "custom": { 299 + "fillOpacity": 15, 300 + "lineWidth": 2, 301 + "spanNulls": false 302 + } 303 + }, 304 + "overrides": [] 305 + }, 306 + "targets": [ 307 + { 308 + "expr": "max(relay_malloc_arena_bytes{job=\"zlay\"})", 309 + "legendFormat": "arena (claimed from OS)", 310 + "refId": "A" 311 + }, 312 + { 313 + "expr": "max(relay_malloc_in_use_bytes{job=\"zlay\"})", 314 + "legendFormat": "in-use (allocated)", 315 + "refId": "B" 316 + }, 317 + { 318 + "expr": "max(relay_malloc_free_bytes{job=\"zlay\"})", 319 + "legendFormat": "free (fragmentation)", 320 + "refId": "C" 321 + }, 322 + { 323 + "expr": "max(relay_malloc_mmap_bytes{job=\"zlay\"})", 324 + "legendFormat": "mmap (large blocks)", 325 + "refId": "D" 326 + } 327 + ] 328 + }, 329 + { 330 + "title": "rss breakdown", 331 + "type": "timeseries", 332 + "gridPos": { "h": 8, "w": 12, "x": 12, "y": 32 }, 333 + "datasource": { "type": "prometheus", "uid": "prometheus" }, 334 + "fieldConfig": { 335 + "defaults": { 336 + "unit": "bytes", 337 + "color": { "mode": "palette-classic" }, 338 + "custom": { 339 + "fillOpacity": 15, 340 + "lineWidth": 2, 341 + "spanNulls": false 342 + } 343 + }, 344 + "overrides": [] 345 + }, 346 + "targets": [ 347 + { 348 + "expr": "max(relay_process_rss_bytes{job=\"zlay\"})", 349 + "legendFormat": "RSS total", 350 + "refId": "A" 351 + }, 352 + { 353 + "expr": "max(relay_rss_anon_kb{job=\"zlay\"}) * 1024", 354 + "legendFormat": "RssAnon (heap+stack)", 355 + "refId": "B" 356 + }, 357 + { 358 + "expr": "max(relay_vm_hwm_kb{job=\"zlay\"}) * 1024", 359 + "legendFormat": "VmHWM (peak RSS)", 360 + "refId": "C" 361 + } 362 + ] 363 + }, 364 + { 365 + "title": "disk used %", 366 + "type": "gauge", 367 + "gridPos": { "h": 8, "w": 8, "x": 0, "y": 40 }, 368 + "datasource": { "type": "prometheus", "uid": "prometheus" }, 369 + "fieldConfig": { 370 + "defaults": { 371 + "unit": "percentunit", 372 + "min": 0, 373 + "max": 1, 374 + "color": { "mode": "thresholds" }, 375 + "thresholds": { 376 + "steps": [ 377 + { "color": "green", "value": null }, 378 + { "color": "yellow", "value": 0.7 }, 379 + { "color": "red", "value": 0.85 } 380 + ] 381 + } 382 + }, 383 + "overrides": [] 384 + }, 385 + "options": { 386 + "reduceOptions": { "calcs": ["lastNotNull"] } 387 + }, 388 + "targets": [ 389 + { 390 + "expr": "max(1 - (relay_disk_available_bytes{job=\"zlay\"} / relay_disk_total_bytes{job=\"zlay\"}))", 391 + "legendFormat": "used", 392 + "refId": "A" 393 + } 394 + ] 395 + }, 396 + { 397 + "title": "disk usage", 398 + "type": "timeseries", 399 + "gridPos": { "h": 8, "w": 16, "x": 8, "y": 40 }, 400 + "datasource": { "type": "prometheus", "uid": "prometheus" }, 401 + "fieldConfig": { 402 + "defaults": { 403 + "unit": "bytes", 404 + "color": { "mode": "palette-classic" }, 405 + "custom": { 406 + "fillOpacity": 15, 407 + "lineWidth": 2, 408 + "spanNulls": false 409 + } 410 + }, 411 + "overrides": [] 412 + }, 413 + "targets": [ 414 + { 415 + "expr": "max(relay_disk_total_bytes{job=\"zlay\"})", 416 + "legendFormat": "total", 417 + "refId": "A" 418 + }, 419 + { 420 + "expr": "max(relay_disk_total_bytes{job=\"zlay\"}) - max(relay_disk_available_bytes{job=\"zlay\"})", 421 + "legendFormat": "used", 422 + "refId": "B" 423 + } 424 + ] 288 425 } 289 426 ], 290 427 "schemaVersion": 39,