strace και perf: Φύλλο αντιγραφής προβλημάτων Linux

13 λεπτά ανάγνωσης - 4 Ιουνίου 2026

hero section cover
Πίνακας περιεχομένων
  • strace και perf για την αντιμετώπιση προβλημάτων στο Linux
  • Πότε να χρησιμοποιείτε το strace και πότε το perf
  • Εγκατάσταση των strace και perf
  • Εντοπισμός κλήσεων συστήματος με το strace
  • Δημιουργία προφίλ CPU με το perf
  • Μια πρακτική ροή εργασιών σε έναν ενεργό διακομιστή
Κοινοποίηση

Πότε να χρησιμοποιήσετε το strace vs perf στο Linux, τις εντολές που θα εκτελέσετε στην πραγματικότητα και πώς να διατηρήσετε χαμηλά τα γενικά έξοδα κατά την αποσφαλμάτωση ενός πολυάσχολου διακομιστή παραγωγής.

strace και perf για την αντιμετώπιση προβλημάτων στο Linux

Όταν ένας διακομιστής Linux είναι αργός, διακόπτεται ή υπερφορτώνει την CPU και τα αρχεία καταγραφής της εφαρμογής δεν εξηγούν το λόγο, δύο εργαλεία καλύπτουν το μεγαλύτερο μέρος του κενού. strace Σας λέει τι ζητά μια διαδικασία από τον πυρήνα. perf σας λέει πού ξοδεύει το χρόνο της η CPU. Μαζί απαντούν στις ερωτήσεις «γιατί έχει κολλήσει» και «τι κάνει», τις οποίες τίποτα άλλο δεν χειρίζεται τόσο οικονομικά.

Αυτή η ανάρτηση καλύπτει πότε να χρησιμοποιήσετε κάθε εργαλείο, πώς να τα εγκαταστήσετε, τις εντολές που θα εκτελέσετε στην πράξη και πώς να διατηρήσετε το φόρτο εργασίας σε διαχειρίσιμα επίπεδα σε έναν ενεργό διακομιστή.


 

Πότε να χρησιμοποιείτε το strace και πότε το perf

Η διαφορά είναι απλή. Χρησιμοποιήστε το perf όταν η CPU είναι απασχολημένη και πρέπει να μάθετε ποια λειτουργία ευθύνεται. Χρησιμοποιήστε το strace όταν μια διαδικασία κολλάει, διακόπτεται, επιστρέφει παράξενα σφάλματα ή συμπεριφέρεται με τρόπο που τα αρχεία καταγραφής δεν εξηγούν.

perf Το strace λαμβάνει δείγματα από τους μετρητές υλικού του πυρήνα σε μια ρυθμιζόμενη συχνότητα, οπότε το επιπλέον φορτίο είναι συνήθως κάτω από 1% και είναι ασφαλές να εκτελεστεί σε περιβάλλον παραγωγής. strace Το ptrace, κάτι που μπορεί να επιβραδύνει τη διαδικασία-στόχο κατά 10 έως 100 φορές. Χρησιμοποιήστε το με φειδώ σε ζωντανά συστήματα και πάντα με φίλτρα.

ΣύμπτωμαΞεκινήστε μεΣυνεχίστε με
Υψηλή χρήση CPUperf top ή perf record -gstrace -c στη διαδικασία που καταλαμβάνει πολλούς πόρους
Αργός δίσκος ή αναμονή I/Operf stat για αστοχίες cachestrace -e trace=file
Διακοπή λειτουργίας της διεργασίας ή σιωπηλό σφάλμαstrace -e trace=file,networkperf stat για να αποκλειστεί η πίεση της CPU
Διαμάχη κλειδώματος ή αργό APIstrace -c, προσέξτε για futexperf record -g

Εγκατάσταση των strace και perf

Και τα δύο εργαλεία βρίσκονται στα τυπικά αποθετήρια. Το strace βασίζεται στο ptrace syscall, το οποίο αποτελεί μέρος κάθε σύγχρονου πυρήνα εδώ και χρόνια. Το perf χρησιμοποιεί τη perf_events διεπαφή και χρειάζεται ένα πακέτο που να ταιριάζει με τον πυρήνα που χρησιμοποιείτε.

Σε Ubuntu ή Debian:

sudo apt install strace linux-tools-common linux-tools-$(uname -r)

Σε RHEL, AlmaLinux ή Fedora:

sudo dnf install strace perf

Το $(uname -r) bit έχει σημασία. Ένα εκτελέσιμο perf που έχει δημιουργηθεί για διαφορετική έκδοση πυρήνα παράγει σύγχυση στην έξοδο και μπορεί να παραλείψει σιωπηλά συμβάντα. Επαληθεύστε με perf --version και strace -V μετά την εγκατάσταση.

Για να εμφανίζει το perf ονόματα συναρτήσεων αντί για δεκαεξαδικές διευθύνσεις, χρειάζεστε σύμβολα εντοπισμού σφαλμάτων. Εγκαταστήστε το σχετικό -dbg ή -debuginfo πακέτο (για παράδειγμα, libc6-dbg στο Debian) και μεταγλωττίστε τα δικά σας εκτελέσιμα με -g στο GCC.

Μέσα στα containers, strace χρειάζεται --cap-add=SYS_PTRACE και perf απαιτείται --cap-add=SYS_ADMIN κατά την εκκίνηση με το Docker. Χωρίς αυτά τα όρια, τα εργαλεία παρουσιάζουν σφάλματα που μοιάζουν με bugs.

Εντοπισμός κλήσεων συστήματος με το strace

Η εκτέλεση strace command εντοπίζει μια διαδικασία από την εκκίνηση. Για να συνδεθείτε σε μια διαδικασία που εκτελείται, χρησιμοποιήστε strace -p PID. Για οτιδήποτε είναι πολυνηματικό ή δημιουργεί διακλαδώσεις, προσθέστε -f για να παρακολουθήσετε τα παιδιά, αλλιώς θα χάσετε το μεγαλύτερο μέρος της δραστηριότητας.

Οι γραμμές εξόδου τελειώνουν με μια τιμή επιστροφής. -1 ENOENT σημαίνει ότι το αρχείο που ζήτησε η διαδικασία δεν υπάρχει. -1 EACCES σημαίνει δικαιώματα. Αυτά τα δύο σφάλματα αποτελούν από μόνα τους ένα εκπληκτικό ποσοστό των σφαλμάτων παραγωγής.

Η πιο χρήσιμη επιλογή είναι -e trace=GROUP, η οποία περιορίζει την έξοδο σε μια κατηγορία συστημικών κλήσεων με όνομα και διατηρεί τον θόρυβο σε διαχειρίσιμα επίπεδα.

ΟμάδαΠεριλαμβάνονται κλήσειςΓιατί είναι χρήσιμο
fileopenat, stat, read, writeΛείπουν ρυθμίσεις, σφάλματα δικαιωμάτων, αργή είσοδος/έξοδος
networksocket, connect, bind, recvfromΑπόρριψη σύνδεσης, αποτυχίες DNS, προβλήματα TLS
processexecve, clone, wait4Σφάλματα, καταιγίδες fork, ελλείποντα εκτελέσιμα
futexfutexΔιαμάχες κλειδώματος και καθυστερήσεις νημάτων

Σε έναν πολυάσχολο διακομιστή, ξεκινήστε με strace -c -p PID για δέκα ή είκοσι δευτερόλεπτα. Η -c επιλογή εμφανίζει μια σύνοψη του αριθμού των syscall, του συνολικού χρόνου και των σφαλμάτων όταν αποσυνδέεστε. Αυτό σας δείχνει ποια κατηγορία αξίζει να εξετάσετε πιο προσεκτικά χωρίς να πλημμυρίζει το τερματικό. Στη συνέχεια, επανασυνδεθείτε με ένα στενό φίλτρο.

Άλλες σημαίες που αξίζει να γνωρίζετε: -T καταγράφει τον χρόνο που αφιερώνεται σε κάθε κλήση, -Z εμφανίζει μόνο τις αποτυχημένες κλήσεις και -o file γράφει σε ένα αρχείο καταγραφής αντί για το τερματικό, κάτι που είναι πολύ πιο γρήγορο σε μια διαδικασία με έντονη δραστηριότητα.

Δημιουργία προφίλ CPU με το perf

Το perf διαθέτει τέσσερις εντολές που θα χρησιμοποιείτε τις περισσότερες φορές.

ΕντολήΤι κάνειΣυνηθισμένες επιλογές
perf statΣτιγμιότυπο μετρητών: κύκλοι, αστοχίες cache, αλλαγές περιβάλλοντος-e, -p, -a
perf topΖωντανή προβολή των πιο ενεργών συναρτήσεων στο σύστημα--sort comm,dso,symbol
perf recordΣυλλέγει δείγματα perf.data για ανάλυση εκτός σύνδεσης-F, -g, -p
perf reportΔιαβάζει perf.data, κατατάσσει τις συναρτήσεις βάσει του μεριδίου δειγμάτων--stdio, --sort

Ξεκινήστε με perf stat -p PID για μια γρήγορη επισκόπηση. Οι αριθμοί που πρέπει να προσέξετε:

  • IPC (εντολές ανά κύκλο) κάτω από 1,0: η CPU καθυστερεί, συνήθως κατά την πρόσβαση στη μνήμη.
  • Υψηλές απώλειες φόρτωσης LLC: το σύνολο εργασίας δεν χωράει στην κρυφή μνήμη, οπότε η CPU περιμένει τη μνήμη RAM.
  • Υψηλός αριθμός αλλαγών περιβάλλοντος: κλασικό για φόρτους εργασίας που εξαρτώνται από την είσοδο/έξοδο, όπου τα νήματα συνεχίζουν να μπλοκάρουν στο δίσκο ή στο δίκτυο.

Αν κάτι φαίνεται περίεργο, συνεχίστε με perf record -F 99 -g -p PID -- sleep 30. Τα -F 99 δειγματοληπτεί στα 99 Hz, κάτι που είναι αρκετό για να εντοπίσει τις συχνά χρησιμοποιούμενες συναρτήσεις και αποφεύγει τον συγχρονισμό με το χρονιστή του πυρήνα σε στρογγυλά νούμερα όπως τα 100 Hz. Η -g σημαία καταγράφει γραφήματα κλήσεων, οπότε perf report να σας δείξει ποιες διαδρομές σε μια συνάρτηση είναι υπεύθυνες.

Στη perf report, η στήλη Overhead είναι το ποσοστό επί του συνόλου των δειγμάτων. Υψηλό overhead στο _int_malloc ή memcpy σημαίνει βαριά κατανομή. Υψηλό overhead σε μία από τις δικές σας συναρτήσεις είναι το hotspot που ψάχνατε.

Αν βλέπετε δεκαεξαδικές διευθύνσεις αντί για ονόματα συναρτήσεων, το δυαδικό αρχείο είναι απογυμνωμένο ή λείπουν τα σύμβολα εντοπισμού σφαλμάτων. Εγκαταστήστε το αντίστοιχο -dbg πακέτο ή ξαναφτιάξτε το δυαδικό αρχείο με -g.

Μια πρακτική ροή εργασιών σε έναν ενεργό διακομιστή

Για ένα πραγματικό συμβάν σε ένα πολυάσχολο κουτί, η ρουτίνα έχει ως εξής:

  1. Επιβεβαιώστε πρώτα το σύμπτωμα με φθηνά εργαλεία: top, vmstat, iostat. Εάν χρησιμοποιείτε VM, ελέγξτε τη st στήλη (steal). Οτιδήποτε πάνω από 5% σημαίνει ότι ο υπερ-επιτηρητής είναι το σημείο συμφόρησης, όχι ο κώδικάς σας.
  2. Εάν η χρήση της CPU είναι υψηλή, εκτελέστε perf top για λίγα δευτερόλεπτα και, στη συνέχεια, perf record -F 99 -g -p PID -- sleep 30 για τη διαδικασία που προκαλεί το πρόβλημα. Μια καταγραφή 30 δευτερολέπτων στα 99 Hz παράγει περίπου 1,7 MB δεδομένων.
  3. Εάν η διαδικασία έχει κολλήσει, είναι αργή ή επιστρέφει σφάλματα, εκτελέστε strace -c -p PID για δέκα δευτερόλεπτα και διαβάστε τη σύνοψη. Εάν κυριαρχεί μία κατηγορία syscall, περιορίστε την αναζήτηση με strace -e trace=GROUP -T -p PID.
  4. Όταν εντοπίσετε την ύποπτη κλήση συστήματος ή συνάρτηση, αποσυνδέστε. Μην αφήνετε κανένα από τα εργαλεία να εκτελείται στο περιβάλλον παραγωγής περισσότερο από όσο χρειάζεται.

Δύο προειδοποιήσεις. strace Η έξοδος μπορεί να περιλαμβάνει μεταβλητές περιβάλλοντος, διαδρομές αρχείων και byte που διαβάζονται από sockets, οπότε καθαρίστε τα αρχεία καταγραφής πριν τα μοιραστείτε εκτός της ομάδας σας. Και αν σκοπεύετε να το κάνετε αυτό τακτικά, εξετάστε bpftrace και το ευρύτερο εργαλείο eBPF ως το επόμενο βήμα: ίδιο είδος ορατότητας, επιβάρυνση κάτω του 1%, κατασκευασμένο για παραγωγή από την αρχή.

Εάν εκτελείτε φόρτους εργασίας όπου η βαθιά διαγνωστική πρόσβαση έχει σημασία και η κοινόχρηστη υποδομή δεν αποτελεί επιλογή, ρίξτε μια ματιά στους αποκλειστικούς διακομιστές μας.

background image
Είναι ο VPS σας ικανός για τη δουλειά

Τα VPS της FDC διαθέτουν στάνταρ δίσκους NVMe, επεξεργαστές EPYC και πραγματικά μη μετρήσιμο εύρος ζώνης. Έτοιμοι για αναβάθμιση

Ξεκλειδώστε την απόδοση τώρα

Blog

Προτεινόμενα αυτή την εβδομάδα

Περισσότερα άρθρα
Γιατί είναι σημαντικό να έχετε ένα ισχυρό και unmetered VPS

Γιατί είναι σημαντικό να έχετε ένα ισχυρό και unmetered VPS

Ένα unmetered VPS παρέχει σταθερό εύρος ζώνης σε σταθερή ταχύτητα θύρας. Πώς διαφέρει από τα μετρούμενα πακέτα, πότε αποδίδει και τι πρέπει να ελέγξετε πριν από την αγορά.

7 λεπτά ανάγνωσης - 9 Μαΐου 2025

Διαχείριση μνήμης Linux: Swap, OOM Killer & Cgroups

12 λεπτά ανάγνωσης - 31 Μαΐου 2026

Περισσότερα άρθρα
background image

Έχετε ερωτήσεις ή χρειάζεστε μια προσαρμοσμένη λύση

icon

Ευέλικτες επιλογές

icon

Παγκόσμια εμβέλεια

icon

Άμεση ανάπτυξη

icon

Ευέλικτες επιλογές

icon

Παγκόσμια εμβέλεια

icon

Άμεση ανάπτυξη