TopDev AI Robot TopDev
#Backend & Microservices#DevOps & Cloud

Kinh nghiệm cấu hình Prometheus và Grafana để phát hiện Memory Leak trước khi server sập

Đức Huy (DevOps Specialist)
📖 2 phút đọc 💬 1 phản hồi
⚡ Tóm tắt 30 giây bởi TopDev AI
AI Overview

Dấu hiệu của một "cái chết từ từ" Memory Leak Không có gì tồi tệ hơn việc server chạy mượt mà cả tuần, nhưng cứ mỗi sáng thứ hai lại bị khởi động lại đột ngột do tiến trình OOM Killer của Linux can t…

☰ Mục lục bài viết (4 phần) Mở / Đóng mục lục

Dấu hiệu của một "cái chết từ từ" (Memory Leak)#

Không có gì tồi tệ hơn việc server chạy mượt mà cả tuần, nhưng cứ mỗi sáng thứ hai lại bị khởi động lại đột ngột do tiến trình OOM Killer của Linux can thiệp.

Memory Leak (rò rỉ bộ nhớ) là lỗi cực kỳ khó tìm nếu chỉ kiểm tra bằng mắt thường. Để bắt được thủ phạm, bạn cần hệ thống giám sát thời gian thực với Prometheus và biểu đồ trực quan hóa Grafana.

Các chỉ số (Metrics) cốt lõi cần theo dõi#

Đối với ứng dụng Node.js, hãy cài đặt thư viện prom-client để xuất metrics:

TYPESCRIPT
import express from 'express';
import client from 'prom-client';

const app = express();
// Tự động thu thập các thông số chuẩn của V8 và Node runtime
client.collectDefaultMetrics({ prefix: 'nodejs_app_' });

app.get('/metrics', async (req, res) => {
  res.set('Content-Type', client.register.contentType);
  res.end(await client.register.metrics());
});

Các metrics sống còn trên Grafana:

  1. nodejs_heap_size_used_bytes: Bộ nhớ heap đang thực sự được sử dụng.
  2. nodejs_heap_space_size_used_bytes{space="old"}: Dung lượng Old Space – nếu đồ thị của Old Space có hình răng cưa đi lên liên tục mà không chịu hạ xuống sau mỗi chu kỳ GC, chắc chắn 100% code của bạn đang bị leak memory!
  3. process_resident_memory_bytes (RSS): Tổng bộ nhớ RAM thực tế tiến trình đang chiếm của hệ điều hành.

Thiết lập cảnh báo sớm (Alertmanager Rule)#

Không chờ server cạn RAM mới báo, hãy tạo alert khi tốc độ tăng trưởng bộ nhớ bất thường:

YAML
groups:
  - name: memory_leak_alerts
    rules:
      - alert: NodejsMemoryLeakSuspected
        expr: predict_linear(nodejs_heap_size_used_bytes[4h], 86400) > 1073741824 # Dự báo 24h tới sẽ vượt quá 1GB
        for: 30m
        labels:
          severity: warning
        annotations:
          summary: "Phát hiện nguy cơ rò rỉ bộ nhớ trên {{ $labels.instance }}"
          description: "Bộ nhớ heap đang tăng đều đặn trong 4 giờ qua và dự báo sẽ tràn RAM trong 24h tới."

Góc thảo luận#

Anh em đã từng tìm ra nguyên nhân của một ca Memory Leak kinh điển nào chưa? Thủ phạm thường là do closure, event listener hay biến global cache?


Xem thêm nội dung liên quan:

Chia sẻ thảo luận này:

Thảo luận

1 phản hồi

Ý kiến từ cộng đồng kỹ sư TopDev
💬

Tham gia thảo luận

Cộng đồng mở · Đăng nhập 1-chạm qua Google
  1. Lan Anh (Senior Frontend)
    #1

    Hàm predict_linear() của Prometheus cực kỳ lợi hại! Nó tính toán xu hướng dốc của đường biểu diễn bộ nhớ để hú còi từ trước cả ngày, giúp dev có đủ thời gian bật profiling chụp Heap Snapshot thay vì hoảng loạn khi server đột tử.

Bài liên quan trong #Backend & Microservices

1
TopDev AI Companion
AI
✓ Đã sao chép link