Trong những lần xử lý sự cố server bị treo cứng mà không rõ nguyên nhân, perf chính là phương án giúp mình soi chiếu chính xác từng chu kỳ CPU để tìm ra hàm xử lý đang gây nghẽn. Việc đọc hiểu các thông số từ công cụ này đã giúp mình tối ưu hóa hiệu suất hệ thống một cách khoa học và chính xác nhất. Trong bài viết này, mình sẽ tổng hợp lại những câu lệnh perf quan trọng giúp bạn ứng dụng công cụ này hiệu quả hơn.
Những điểm chính
Đối với mình, việc phân tích hiệu năng hệ thống trên Linux không chỉ giúp phát hiện bottleneck mà còn là nền tảng để tối ưu ứng dụng và tài nguyên một cách chính xác. Để giúp bạn hiểu rõ hơn về lệnh perf trong quá trình sử dụng thực tế, bài viết dưới đây sẽ cung cấp các thông tin gồm:
- Khái niệm: Hiểu rõ perf là công cụ dòng lệnh phân tích hiệu suất mạnh mẽ, giúp nhận biết vai trò của nó trong việc khám phá sâu cách ứng dụng và kernel sử dụng tài nguyên hệ thống.
- Yêu cầu cài đặt: Nắm vững các bước cài đặt trên các bản phân phối Linux phổ biến, giúp bạn chuẩn bị môi trường sẵn sàng để bắt đầu sử dụng công cụ.
- Các lệnh cơ bản: Nắm được các lệnh cốt lõi từ đo lường tổng quan, hiển thị sự kiện đến lấy mẫu chi tiết, giúp bạn thực hiện các tác vụ phân tích hiệu suất hàng ngày.
- Xử lý lỗi: Nhận biết và khắc phục các lỗi phổ biến như quyền truy cập bị từ chối hoặc thiếu file dữ liệu, giúp giải quyết nhanh các sự cố thường gặp.
- Câu hỏi thường gặp: Giải đáp các thắc mắc liên quan đến perf trong Linux.
Lệnh perf trong Linux là gì?
Lệnh perf là công cụ phân tích hiệu suất mạnh mẽ, miễn phí trên Linux, hỗ trợ nhà phát triển và quản trị viên hệ thống khám phá sâu cách ứng dụng cùng kernel sử dụng CPU, bộ nhớ và sự kiện phần cứng, Qua đó, nó giúp xác định nguyên nhân gây chậm, tối ưu hóa code và khắc phục vấn đề hiệu năng chi tiết qua giao diện dòng lệnh. Perf dựa trên Performance Monitoring Counters và Kernel Events của Linux cho phép đếm các sự kiện như chu kỳ CPU, lỗi Cache Miss, nhánh rẽ sai, cùng sự kiện phần mềm như Context Switch.
Perf khắc phục hạn chế của các công cụ giám sát cơ bản như top hay iostat, vốn chỉ cung cấp cái nhìn tổng quan về tình trạng hệ thống. Thay vì dừng ở mức số liệu bề mặt, perf thu thập dữ liệu chi tiết đến cấp vi xử lý, giúp bạn phân tích trực tiếp các nút thắt hiệu năng bên trong CPU và ứng dụng.

Yêu cầu cài đặt lệnh perf
Lệnh perf thường nằm trong gói kernel source và yêu cầu biên dịch phù hợp với kernel đang chạy trên hệ thống. Để tạo trên Debian/Ubuntu thì bạn cần sử dụng lệnh:
apt update
apt install linux-tools-$(uname -r)Trên CentOS/RHEL, bạn sử dụng lệnh sau:
yum install perfĐể kiểm tra hoạt động sau khi tải perf thì bạn cần sử dụng lệnh sau:
perf listCách lệnh cơ bản trong perf
Lệnh 1: Đo lường tổng quan
Lệnh perf giúp đo lường tổng quan và cung cấp cái nhìn nhanh về hiệu năng cơ bản của một lệnh cụ thể. Ví dụ đo số chu kỳ CPU và sự kiện Context Switch khi chạy lệnh ls thì bạn có thể áp dụng lệnh sau:
perf stat ls -laR /etc
Giải thích:
- perf stat chạy lệnh và hiển thị thống kê tổng hợp các sự kiện mặc định.
- ls -laR /etc là lệnh cần đo lường. Kết quả bao gồm CPU cycles, instructions, Cache references/misses, Context switches, thời gian thực thi.
Lệnh 2: Hiển thị sự kiện khả dụng
Hiển thị sự kiện khả dụng sẽ liệt kê các sự kiện phần cứng, phần mềm và Tracepoint có thể theo dõi trên hệ thống hiện tại với lệnh:
perf list
Giải thích:
- Sự kiện được phân loại rõ ràng (hardware, software, tracepoint, pmu/event).
- Ví dụ: cache-misses (hardware), cpu-clock (software), syscalls:sys_enter_open (tracepoint).
Lệnh 3: Lấy mẫu chi tiết
Lấy mẫu chi tiết sẽ giúp thu thập mẫu để xác định hàm và địa chỉ lệnh tiêu tốn nhiều CPU nhất. Bạn có thể sử dụng lệnh:
perf record -g -o perf.data my_application_binaryGiải thích:
- perf record ghi dữ liệu hiệu năng vào file.
- -g (call-graph) ghi stack trace để theo dõi lịch sử gọi hàm. -o perf.data lưu kết quả vào file.
Lệnh 4: Phân tích kết quả
Đọc và phân tích file perf.data từ bước lấy mẫu trước đó. Bạn có thể sử dụng lệnh:
perf report -i perf.dataGiải thích:
- perf report mở giao diện tương tác phân tích dữ liệu.
- TUI hiển thị hàm sắp xếp theo tỷ lệ % thời gian CPU sử dụng.
Lệnh 5: Cú pháp nâng cao
| Kịch bản | Cú pháp lệnh | Giải thích Logic |
| Theo dõi Cache Misses | perf stat -e cache-misses,cache-references my_app | Theo dõi hai sự kiện cache chính để tính tỷ lệ Hit/Miss. |
| Phân tích PID đang chạy | perf record -p 1234 -o my_running_app.data sleep 30 | Lấy mẫu process ID 1234 trong 30 giây. |
| Phân tích Context Switch | perf record -e context-switches,sched:sched_switch -a sleep 10 | Ghi sự kiện context switch toàn hệ thống trong 10 giây. |
| Kiểm tra Branch Miss | perf stat -e branches,branch-misses -r 5 my_app | Theo dõi nhánh rẽ, lặp 5 lần lấy trung bình. |
| Gắn cờ System Calls | perf record -e syscalls:sys_enter_open -a | Ghi mỗi lần gọi system call open(). |
Cách xử lý một số lỗi phổ biến
Trong quá trình sử dụng perf, bạn có thể gặp một số lỗi thường gặp liên quan đến quyền truy cập kernel, file dữ liệu hoặc môi trường cài đặt công cụ. Bảng dưới đây tổng hợp một vài lỗi phổ biến, nguyên nhân và cách khắc phục tương ứng để bạn tra cứu nhanh khi cần:
| Lỗi phổ biến | Nguyên nhân | Khắc phục |
| sys_perf_event_open() syscall returned with 1 (Operation not permitted) | Kernel hạn chế quyền truy cập PMC. | Chạy lệnh sudo sysctl kernel.perf_event_paranoid=1 hoặc 0 |
| Cannot parse map entry. File perf.data not found. | Thiếu file đầu vào cho perf report. | Chỉ định đúng đường dẫn file bằng -i [TÊN_FILE] |
| Hàm hiển thị [unknown] hoặc địa chỉ hex | Thiếu debugging symbols. | Cài debugging symbols cho kernel/ứng dụng với flag -g |
| perf: command not found | Gói linux-tools chưa cài hoặc không khớp kernel. | Cài linux-tools-$(uname -r). |
Đối với mình, xử lý lỗi khi dùng perf không chỉ là sửa sự cố mà còn giúp bạn hiểu rõ hơn về hệ thống. Phần lớn lỗi thường đến từ quyền kernel, môi trường hoặc thiếu dữ liệu, nên nếu nắm đúng nguyên nhân thì xử lý sẽ rất nhanh.
Thay vì “fix cho chạy”, bạn nên hiểu bản chất từng lỗi để tránh lặp lại. Đồng thời, việc chuẩn bị sẵn môi trường (quyền truy cập, linux-tools, file dữ liệu) sẽ giúp hạn chế gần như toàn bộ lỗi phổ biến khi làm việc thực tế.
Câu hỏi thường gặp
Lệnh perf cần quyền root để chạy không?
Perf thường yêu cầu quyền root hoặc điều chỉnh kernel parameter do hạn chế bảo mật PMC. Khắc phục bằng lệnh sudo sysctl kernel.perf_event_paranoid=1 để cho phép root truy cập sự kiện chung.
Làm thế nào để xem danh sách sự kiện perf hỗ trợ?
Bạn cần chạy perf list để liệt kê tất cả sự kiện phần cứng (cpu-cycles, cache-misses), phần mềm (context-switches), và tracepoint có sẵn trên hệ thống.
Lệnh perf là công cụ phân tích hiệu suất Linux mạnh mẽ, giúp xác định và khắc phục vấn đề hiệu năng từ cấp độ CPU đến ứng dụng thực tế. Việc sử dụng perf thường xuyên sẽ nâng cao khả năng tối ưu hóa hệ thống một cách chuyên sâu và hiệu quả. Cảm ơn bạn đã theo dõi bài viết!




