DEV Community

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

Posted on Originally published at technologyspot.vn

Gỡ nghẽn hiệu năng Ubuntu trên Dell XPS: btop, py-spy và Clinic.js

Khi phát triển ứng dụng trên hệ điều hành Ubuntu Linux (như dòng laptop Dell XPS), việc hệ thống phản hồi chậm thường xuất phát từ nghẽn tài nguyên tiến trình hoặc rò rỉ bộ nhớ. Việc giám sát thời gian thực giúp định vị chính xác vị trí phát sinh sự cố trong quá trình thực thi mã nguồn thay vì chạy các bài kiểm thử định lượng.

Công cụ giám sát tài nguyên và phân tích tiến trình realtime

Để theo dõi trạng thái hệ thống trên môi trường Linux khi phát sinh hiện tượng chậm, các công cụ dòng lệnh cho phép quan sát trực quan từng chỉ số:

  • btop: Theo dõi tổng quan tần suất phần trăm sử dụng CPU, dung lượng RAM và trạng thái các tiến trình ngầm.
  btop
Enter fullscreen mode Exit fullscreen mode
  • iotop: Giám sát lưu lượng đọc/ghi đĩa I/O theo thời gian thực của từng tiến trình để phát hiện tắc nghẽn ổ đĩa.
  sudo iotop -o
Enter fullscreen mode Exit fullscreen mode

Đối với việc phân tích chi tiết mã nguồn (profiling) trong lúc ứng dụng hoạt động:

  • py-spy: Ghi lại luồng thực thi (call stack) của ứng dụng Python đang chạy trực tiếp trên hệ thống mà không cần sửa đổi mã nguồn.
  sudo py-spy record -o profile.svg --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, hỗ trợ xác định điểm nghẽn Event Loop và thao tác I/O.
  npx clinic doctor -- node server.js
Enter fullscreen mode Exit fullscreen mode

Phân tích rò rỉ bộ nhớ Node.js trên máy 16GB RAM

Trên cấu hình máy dev có 16GB RAM, sự cố rò rỉ bộ nhớ (memory leak) trong ứng dụng Node.js thường không làm cạn kiệt RAM ngay lập tức mà khiến chu kỳ dọn rác (Garbage Collection) kéo dài, gây gián đoạn luồng xử lý Event Loop.

Quy trình định vị đối tượng gây rò rỉ bộ nhớ thực hiện như sau:

  1. Kích hoạt giao thức chẩn đoán khi khởi chạy tiến trình Node.js:
   node --inspect server.js
Enter fullscreen mode Exit fullscreen mode
  1. Mở trình duyệt Chrome, truy cập đường dẫn chrome://inspect để kết nối tới tiến trình ứng dụng.
  2. Trong giao diện Chrome DevTools, chọn thẻ Memory và tiến hành tạo bản chụp Take Heap Snapshot tại hai thời điểm: lúc vừa khởi động và sau khi thực thi 1.000 lượt yêu cầu.
  3. Chuyển sang chế độ Comparison để so sánh hai bản snapshot, tập trung vào sự chênh lệch số lượng đối tượng (Objects Count) và dung lượng chiếm dụng (Shallow Size).

Việc so sánh trực quan này giúp xác định các biến toàn cục hoặc liên kết đóng (closure) giữ lại tham chiếu ngoài ý muốn. Bên cạnh việc tối ưu mã nguồn, quá trình chẩn đoán các sự cố hệ thống liên quan tới phần cứng và driver trên Ubuntu Linux có thể tham khảo chi tiết tại trang TechnologySpot.

Top comments (0)