strace và perf: Bảng tóm tắt hướng dẫn khắc phục sự cố Linux
13 phút đọc - 4 tháng 6, 2026

Khi nào nên sử dụng strace so với perf trên Linux, các lệnh bạn thực sự sẽ chạy, và cách giữ mức tiêu tốn tài nguyên ở mức thấp khi gỡ lỗi một máy chủ sản xuất đang hoạt động nặng.
strace và perf để khắc phục sự cố trên Linux
Khi máy chủ Linux chạy chậm, bị treo hoặc tiêu tốn quá nhiều CPU và nhật ký ứng dụng không giải thích được lý do, hai công cụ này sẽ giúp giải quyết hầu hết các vấn đề. strace cho bạn biết quá trình đang yêu cầu gì từ kernel. perf cho bạn biết CPU đang dành thời gian vào việc gì. Cùng nhau, chúng trả lời các câu hỏi "tại sao nó bị kẹt" và "nó đang làm gì" mà không có công cụ nào khác xử lý được một cách hiệu quả như vậy.
Bài viết này trình bày khi nào nên sử dụng từng công cụ, cách cài đặt chúng, các lệnh bạn sẽ thực sự chạy và cách giữ cho chi phí hệ thống ở mức hợp lý trên máy chủ đang hoạt động.
Khi nào nên sử dụng strace so với perf
Sự phân biệt rất đơn giản. Sử dụng perf khi CPU đang bận rộn và bạn cần biết hàm nào gây ra tình trạng đó. Sử dụng strace khi một quá trình bị treo, gặp sự cố, trả về các lỗi kỳ lạ hoặc hoạt động theo cách mà nhật ký không giải thích được.
perf lấy mẫu các bộ đếm phần cứng của kernel với tần suất có thể cấu hình, do đó chi phí hệ thống thường dưới 1% và an toàn để chạy trong môi trường sản xuất. strace chặn mọi lệnh gọi hệ thống thông qua ptrace, điều này có thể làm chậm quá trình mục tiêu từ 10 đến 100 lần. Hãy sử dụng nó một cách tiết kiệm trên các hệ thống đang hoạt động và luôn kết hợp với bộ lọc.
| Triệu chứng | Bắt đầu với | Tiếp theo |
|---|---|---|
| Sử dụng CPU cao | perf top hoặc perf record -g | strace -c trên quy trình đang hoạt động mạnh |
| Đĩa chậm hoặc chờ I/O | perf stat do lỗi bộ nhớ đệm | strace -e trace=file |
| Quá trình bị treo hoặc lỗi im lặng | strace -e trace=file,network | perf stat để loại trừ áp lực CPU |
| Xung đột khóa hoặc API chậm | strace -c, hãy chú ý đến futex | perf record -g |
Cài đặt strace và perf
Cả hai công cụ này đều có trong kho lưu trữ tiêu chuẩn. strace dựa trên ptrace syscall, vốn đã là một phần của mọi kernel hiện đại trong nhiều năm qua. perf sử dụng giao diện perf_events và cần một gói phần mềm phù hợp với kernel đang chạy của bạn.
sudo apt install strace linux-tools-common linux-tools-$(uname -r)
Trên RHEL, AlmaLinux hoặc Fedora:
sudo dnf install strace perf
Bit $(uname -r) bit rất quan trọng. Một bản nhị phân perf được biên dịch dựa trên một phiên bản nhân khác sẽ tạo ra kết quả đầu ra khó hiểu và có thể bỏ qua các sự kiện mà không báo trước. Hãy xác minh bằng perf --version và strace -V sau khi cài đặt.
Để perf hiển thị tên hàm thay vì địa chỉ hex, bạn cần các biểu tượng gỡ lỗi. Cài đặt tệp -dbg hoặc -debuginfo (ví dụ: libc6-dbg trên Debian), và biên dịch các tệp nhị phân của riêng bạn bằng -g trong GCC.
Trong các container, strace cần --cap-add=SYS_PTRACE và perf cần --cap-add=SYS_ADMIN khi khởi chạy với Docker. Nếu không có các giới hạn này, các công cụ sẽ gặp sự cố trông giống như lỗi.
Theo dõi các lệnh hệ thống bằng strace
Chạy strace command sẽ theo dõi một quá trình từ khi khởi chạy. Để gắn vào một quá trình đang chạy, hãy sử dụng strace -p PID. Đối với bất kỳ quy trình đa luồng hoặc quy trình phân nhánh nào, hãy thêm -f để theo dõi các tiến trình con, nếu không bạn sẽ bỏ lỡ hầu hết các hoạt động.
Các dòng đầu ra kết thúc bằng giá trị trả về. -1 ENOENT có nghĩa là tệp mà quá trình yêu cầu không tồn tại. -1 EACCES có nghĩa là quyền truy cập. Chỉ riêng hai lỗi này đã chiếm một tỷ lệ đáng ngạc nhiên trong các lỗi sản xuất.
Cờ hữu ích nhất là -e trace=GROUP, giúp giới hạn đầu ra vào một danh mục syscall cụ thể và giữ cho lượng thông tin không quá phức tạp.
| Nhóm | Gọi được bao gồm | Tính năng này hữu ích cho |
|---|---|---|
file | openat, stat, read, write | Thiếu cấu hình, lỗi quyền, I/O chậm |
network | socket, connect, bind, recvfrom | Kết nối bị từ chối, lỗi DNS, vấn đề TLS |
process | execve, clone, wait4 | Sự cố, cơn bão fork, thiếu tệp nhị phân |
futex | futex | Xung đột khóa và luồng bị treo |
Trên một máy chủ bận rộn, hãy bắt đầu với strace -c -p PID trong mười hoặc hai mươi giây. Cờ -c cờ này sẽ in ra một bản tóm tắt về số lần gọi hệ thống, tổng thời gian và các lỗi khi bạn ngắt kết nối. Điều đó cho bạn biết danh mục nào đáng được xem xét kỹ hơn mà không làm ngập tràn màn hình. Sau đó, kết nối lại với một bộ lọc hẹp.
Các cờ khác đáng biết: -T ghi lại thời gian dành cho mỗi cuộc gọi, -Z chỉ hiển thị các cuộc gọi thất bại, và -o file ghi vào tệp nhật ký thay vì terminal, điều này nhanh hơn nhiều khi xử lý các quá trình có nhiều hoạt động.
Phân tích hiệu suất CPU bằng perf
perf có bốn lệnh mà bạn sẽ sử dụng thường xuyên nhất.
| Lệnh | Chức năng | Các tùy chọn thường dùng |
|---|---|---|
perf stat | Ảnh chụp nhanh các bộ đếm: chu kỳ, lỗi bộ nhớ đệm, chuyển đổi ngữ cảnh | -e, -p, -a |
perf top | Xem trực tiếp các hàm được gọi nhiều nhất trên hệ thống | --sort comm,dso,symbol |
perf record | Ghi lại mẫu để perf.data phân tích ngoại tuyến | -F, -g, -p |
perf report | Đọc perf.data, xếp hạng các hàm theo tỷ lệ mẫu | --stdio, --sort |
Bắt đầu với perf stat -p PID để có cái nhìn tổng quan nhanh. Các con số cần theo dõi:
- IPC (số lệnh trên mỗi chu kỳ) dưới 1.0: CPU đang bị đình trệ, thường là do truy cập bộ nhớ.
- Tỷ lệ LLC-load-misses cao: tập dữ liệu làm việc không vừa với bộ nhớ đệm, do đó CPU đang chờ RAM.
- Số lần chuyển đổi ngữ cảnh cao: thường gặp trong các tác vụ bị giới hạn bởi I/O, nơi các luồng liên tục bị chặn do đĩa hoặc mạng.
Nếu có gì đó không ổn, hãy kiểm tra thêm perf record -F 99 -g -p PID -- sleep 30. Các -F 99 lấy mẫu ở tần số 99 Hz, đủ để tìm các hàm nóng và tránh đồng bộ hóa với bộ đếm thời gian kernel ở các con số tròn như 100 Hz. Cờ -g cờ này ghi lại đồ thị gọi hàm nên perf report có thể hiển thị cho bạn biết các đường dẫn nào trong hàm là nguyên nhân.
Trong perf report, cột Overhead là tỷ lệ phần trăm trên tổng số mẫu. Chi phí xử lý cao trong _int_malloc hoặc memcpy có nghĩa là việc phân bổ bộ nhớ nặng nề. Chi phí cao trong một trong các hàm của bạn chính là điểm nóng mà bạn đang tìm kiếm.
Nếu bạn thấy địa chỉ hex thay vì tên hàm, tệp nhị phân đã bị loại bỏ thông tin hoặc thiếu các biểu tượng gỡ lỗi. Hãy cài đặt gói -dbg hoặc biên dịch lại tệp nhị phân với -g.
Quy trình làm việc thực tế trên máy chủ đang hoạt động
Đối với một sự cố thực tế trên một máy chủ bận rộn, quy trình thường như sau:
- Trước tiên, hãy xác nhận triệu chứng bằng các công cụ đơn giản:
top,vmstat,iostat. Nếu bạn đang sử dụng máy ảo (VM), hãy kiểm tra cộtstcột (steal). Bất kỳ giá trị nào trên 5% đều có nghĩa là hypervisor là điểm nghẽn, không phải mã của bạn. - Nếu CPU cao, hãy chạy
perf toptrong vài giây, sau đóperf record -F 99 -g -p PID -- sleep 30cho quá trình gây ra sự cố. Việc ghi lại trong 30 giây ở tần số 99 Hz sẽ tạo ra khoảng 1,7 MB dữ liệu. - Nếu quá trình bị treo, chậm hoặc trả về lỗi, hãy chạy
strace -c -p PIDtrong mười giây và đọc bản tóm tắt. Nếu một danh mục syscall chiếm ưu thế, hãy thu hẹp phạm vi bằngstrace -e trace=GROUP -T -p PID. - Khi bạn đã tìm thấy hệ thống gọi hoặc hàm nghi vấn, hãy ngắt kết nối. Đừng để bất kỳ công cụ nào chạy trên môi trường sản xuất lâu hơn mức cần thiết.
Hai lưu ý. strace Kết quả đầu ra có thể bao gồm các biến môi trường, đường dẫn tệp và các byte được đọc từ các socket, vì vậy hãy làm sạch nhật ký trước khi chia sẻ chúng ra ngoài nhóm của bạn. Và nếu bạn định thực hiện việc này thường xuyên, hãy xem bpftrace và bộ công cụ eBPF rộng hơn như bước tiếp theo: cùng loại khả năng hiển thị, chi phí dưới 1%, được xây dựng cho môi trường sản xuất ngay từ đầu.
Nếu bạn chạy các khối lượng công việc mà quyền truy cập chẩn đoán sâu là quan trọng và không thể sử dụng cơ sở hạ tầng dùng chung, hãy xem xét các máy chủ chuyên dụng của chúng tôi.

FDC VPS được trang bị ổ cứng NVMe, bộ xử lý EPYC và băng thông không giới hạn thực sự theo tiêu chuẩn. Sẵn sàng nâng cấp chưa?
Nâng cao hiệu suất ngay bây giờTại sao việc sở hữu một VPS mạnh mẽ và không giới hạn băng thông lại quan trọng
Một VPS không giới hạn băng thông cung cấp băng thông theo gói cố định với tốc độ cổng cố định. Sự khác biệt so với các gói tính theo lưu lượng, khi nào nó mang lại lợi ích và những điều cần kiểm tra trước khi mua.
7 phút đọc - 9 tháng 5, 2025
Quản lý bộ nhớ Linux: Swap, OOM Killer & Cgroups
12 phút đọc - 31 tháng 5, 2026

Bạn có thắc mắc hoặc cần giải pháp tùy chỉnh?
Các tùy chọn linh hoạt
Phạm vi toàn cầu
Triển khai ngay lập tức
Các tùy chọn linh hoạt
Phạm vi toàn cầu
Triển khai ngay lập tức