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

hero section cover
Mục lục
  • strace và perf để khắc phục sự cố trên Linux
  • Khi nào nên sử dụng strace so với perf
  • Cài đặt strace và perf
  • Theo dõi các lệnh hệ thống bằng strace
  • Phân tích hiệu suất CPU bằng perf
  • Quy trình làm việc thực tế trên máy chủ đang hoạt động
Chia sẻ

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ứngBắt đầu vớiTiếp theo
Sử dụng CPU caoperf top hoặc perf record -gstrace -c trên quy trình đang hoạt động mạnh
Đĩa chậm hoặc chờ I/Operf stat do lỗi bộ nhớ đệmstrace -e trace=file
Quá trình bị treo hoặc lỗi im lặngstrace -e trace=file,networkperf stat để loại trừ áp lực CPU
Xung đột khóa hoặc API chậmstrace -c, hãy chú ý đến futexperf 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.

Trên Ubuntu hoặc Debian:

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 --versionstrace -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_PTRACEperf 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ómGọi được bao gồmTính năng này hữu ích cho
fileopenat, stat, read, writeThiếu cấu hình, lỗi quyền, I/O chậm
networksocket, connect, bind, recvfromKết nối bị từ chối, lỗi DNS, vấn đề TLS
processexecve, clone, wait4Sự cố, cơn bão fork, thiếu tệp nhị phân
futexfutexXung độ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ệnhChức năngCá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 topXem 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 recordGhi 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:

  1. 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ột st cộ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.
  2. Nếu CPU cao, hãy chạy perf top trong vài giây, sau đó perf record -F 99 -g -p PID -- sleep 30 cho 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.
  3. Nếu quá trình bị treo, chậm hoặc trả về lỗi, hãy chạy strace -c -p PID trong 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ằng strace -e trace=GROUP -T -p PID.
  4. 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.

background image
VPS của bạn có đáp ứng được yêu cầu không?

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ờ

Blog

Nổi bật trong tuần

Các bài viết khác
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

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

Các bài viết khác
background image

Bạn có thắc mắc hoặc cần giải pháp tùy chỉnh?

icon

Các tùy chọn linh hoạt

icon

Phạm vi toàn cầu

icon

Triển khai ngay lập tức

icon

Các tùy chọn linh hoạt

icon

Phạm vi toàn cầu

icon

Triển khai ngay lập tức