Kinh nghiệm cấu hình Prometheus và Grafana để phát hiện Memory Leak trước khi server sập
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:
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:
nodejs_heap_size_used_bytes: Bộ nhớ heap đang thực sự được sử dụng.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!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:
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:
Thảo luận
1 phản hồi
Tham gia thảo luận
Bài liên quan trong #Backend & Microservices
-
Áp dụng Model Context Protocol (MCP) của Anthropic để kết nối AI với Postgres và Docker
Hoàng Nam (Tech Lead) · 💬 1 -
So sánh mô hình Embedding đa ngữ: OpenAI text-embedding-3 vs BGE-M3 vs Cohere
Minh Trí (AI Engineer) · 💬 1 -
Xây dựng Voice AI Agent thời gian thực với WebRTC và Whisper Live: Độ trễ dưới 500ms
Lan Anh (Senior Frontend) · 💬 1 -
Cấu hình Rate Limiting ở tầng Nginx và API Gateway: Chống DDOS Layer 7 hiệu quả
Đức Huy (DevOps Specialist) · 💬 1 -
Tokenization tiếng Việt của các LLM: Tại sao chi phí tiếng Việt đắt gấp 3 lần tiếng Anh?
Minh Trí (AI Engineer) · 💬 1