DEV Community

Laptop Hưng Phát
Laptop Hưng Phát

Posted on • Originally published at technologyspot.vn

Khoanh vùng nghẽn hiệu năng app web bằng bộ công cụ profiling

Khi ứng dụng xử lý dữ liệu hoặc kết xuất hình ảnh gặp hiện tượng phản hồi chậm trong quá trình phát triển, việc đoán mò nguyên nhân thường gây lãng phí thời gian. Thay vì chạy benchmark tổng thể, kỹ sư cần giám sát tài nguyên ở thời điểm thực để xác định chính xác vị trí nghẽn tại CPU, I/O hay bộ nhớ trong.

Đối với hệ thống xử lý tác vụ đầu vào như ứng dụng mô tả trong bài gốc, việc tải ảnh chân dung và phân tích dữ liệu dễ tạo ra áp lực tài nguyên ngắt quãng lên máy chủ.

Bộ công cụ giám sát tài nguyên hệ thống theo thời gian thực

Để có cái nhìn tổng quan về mức độ tiêu thụ tài nguyên phần cứng khi tiến trình đang thực thi, hệ thống Linux cung cấp các công cụ CLI trực quan:

  • btop: Theo dõi phân bổ CPU, RAM và danh sách tiến trình theo thời gian thực.
btop
Enter fullscreen mode Exit fullscreen mode
  • iotop: Phát hiện các tiến trình đang chiếm dụng băng thông đọc/ghi ổ đĩa (Disk I/O).
sudo iotop -o
Enter fullscreen mode Exit fullscreen mode
  • py-spy: Công cụ sampling profiler cho ứng dụng Python, cho phép xem stack trace mà không cần dừng tiến trình hoặc sửa mã nguồn.
py-spy top --pid <PID>
Enter fullscreen mode Exit fullscreen mode
  • clinic.js: Bộ công cụ chẩn đoán hiệu năng chuyên sâu cho Node.js, giúp phân tích nghẽn I/O và độ trễ trong event loop.
npx clinic doctor -- node server.js
Enter fullscreen mode Exit fullscreen mode

Case study: Khoanh vùng memory leak Node.js trên máy 16GB RAM

Trong môi trường thử nghiệm trên máy phát triển 16GB RAM, một dịch vụ Node.js xử lý bộ đệm (buffer) hình ảnh xuất hiện hiện tượng dung lượng RAM tăng liên tục sau mỗi lượt request. Mặc dù tổng RAM 16GB chưa vượt ngưỡng giới hạn của hệ điều hành, tiến trình V8 bị tràn heap size dẫn đến sập ứng dụng (OOM).

Để khoanh vùng vị trí rò rỉ bộ nhớ, khởi chạy Node.js với cờ inspect:

node --inspect server.js
Enter fullscreen mode Exit fullscreen mode

Sau đó, truy cập chrome://inspect trên Chrome DevTools, mở tab Memory và thực hiện quy trình:

  1. Chụp Heap Snapshot 1 ngay khi ứng dụng vừa khởi động.
  2. Giả lập tải bằng cách gửi 50 yêu cầu xử lý ảnh buffer.
  3. Chụp Heap Snapshot 2 và chọn chế độ so sánh (Comparison).

Kết quả phân tích delta cho thấy các đối tượng Buffer từ thư viện xử lý ảnh vẫn giữ tham chiếu trong mảng global. Việc xóa bỏ tham chiếu dư thừa giúp tiến trình thu gom rác (Garbage Collector) giải phóng bộ nhớ triệt để, đưa độ trễ phản hồi về mức ổn định.

Top comments (0)