strace και perf: Φύλλο αντιγραφής προβλημάτων Linux
13 λεπτά ανάγνωσης - 4 Ιουνίου 2026

Πότε να χρησιμοποιήσετε το strace vs perf στο Linux, τις εντολές που θα εκτελέσετε στην πραγματικότητα και πώς να διατηρήσετε χαμηλά τα γενικά έξοδα κατά την αποσφαλμάτωση ενός πολυάσχολου διακομιστή παραγωγής.
strace και perf για την αντιμετώπιση προβλημάτων στο Linux
Όταν ένας διακομιστής Linux είναι αργός, διακόπτεται ή υπερφορτώνει την CPU και τα αρχεία καταγραφής της εφαρμογής δεν εξηγούν το λόγο, δύο εργαλεία καλύπτουν το μεγαλύτερο μέρος του κενού. strace Σας λέει τι ζητά μια διαδικασία από τον πυρήνα. perf σας λέει πού ξοδεύει το χρόνο της η CPU. Μαζί απαντούν στις ερωτήσεις «γιατί έχει κολλήσει» και «τι κάνει», τις οποίες τίποτα άλλο δεν χειρίζεται τόσο οικονομικά.
Αυτή η ανάρτηση καλύπτει πότε να χρησιμοποιήσετε κάθε εργαλείο, πώς να τα εγκαταστήσετε, τις εντολές που θα εκτελέσετε στην πράξη και πώς να διατηρήσετε το φόρτο εργασίας σε διαχειρίσιμα επίπεδα σε έναν ενεργό διακομιστή.
Πότε να χρησιμοποιείτε το strace και πότε το perf
Η διαφορά είναι απλή. Χρησιμοποιήστε το perf όταν η CPU είναι απασχολημένη και πρέπει να μάθετε ποια λειτουργία ευθύνεται. Χρησιμοποιήστε το strace όταν μια διαδικασία κολλάει, διακόπτεται, επιστρέφει παράξενα σφάλματα ή συμπεριφέρεται με τρόπο που τα αρχεία καταγραφής δεν εξηγούν.
perf Το strace λαμβάνει δείγματα από τους μετρητές υλικού του πυρήνα σε μια ρυθμιζόμενη συχνότητα, οπότε το επιπλέον φορτίο είναι συνήθως κάτω από 1% και είναι ασφαλές να εκτελεστεί σε περιβάλλον παραγωγής. strace Το ptrace, κάτι που μπορεί να επιβραδύνει τη διαδικασία-στόχο κατά 10 έως 100 φορές. Χρησιμοποιήστε το με φειδώ σε ζωντανά συστήματα και πάντα με φίλτρα.
| Σύμπτωμα | Ξεκινήστε με | Συνεχίστε με |
|---|---|---|
| Υψηλή χρήση CPU | perf top ή perf record -g | strace -c στη διαδικασία που καταλαμβάνει πολλούς πόρους |
| Αργός δίσκος ή αναμονή I/O | perf stat για αστοχίες cache | strace -e trace=file |
| Διακοπή λειτουργίας της διεργασίας ή σιωπηλό σφάλμα | strace -e trace=file,network | perf stat για να αποκλειστεί η πίεση της CPU |
| Διαμάχη κλειδώματος ή αργό API | strace -c, προσέξτε για futex | perf record -g |
Εγκατάσταση των strace και perf
Και τα δύο εργαλεία βρίσκονται στα τυπικά αποθετήρια. Το strace βασίζεται στο ptrace syscall, το οποίο αποτελεί μέρος κάθε σύγχρονου πυρήνα εδώ και χρόνια. Το perf χρησιμοποιεί τη perf_events διεπαφή και χρειάζεται ένα πακέτο που να ταιριάζει με τον πυρήνα που χρησιμοποιείτε.
sudo apt install strace linux-tools-common linux-tools-$(uname -r)
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, η οποία περιορίζει την έξοδο σε μια κατηγορία συστημικών κλήσεων με όνομα και διατηρεί τον θόρυβο σε διαχειρίσιμα επίπεδα.
| Ομάδα | Περιλαμβάνονται κλήσεις | Γιατί είναι χρήσιμο |
|---|---|---|
file | openat, stat, read, write | Λείπουν ρυθμίσεις, σφάλματα δικαιωμάτων, αργή είσοδος/έξοδος |
network | socket, connect, bind, recvfrom | Απόρριψη σύνδεσης, αποτυχίες DNS, προβλήματα TLS |
process | execve, clone, wait4 | Σφάλματα, καταιγίδες fork, ελλείποντα εκτελέσιμα |
futex | futex | Διαμάχες κλειδώματος και καθυστερήσεις νημάτων |
Σε έναν πολυάσχολο διακομιστή, ξεκινήστε με 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.
Μια πρακτική ροή εργασιών σε έναν ενεργό διακομιστή
Για ένα πραγματικό συμβάν σε ένα πολυάσχολο κουτί, η ρουτίνα έχει ως εξής:
- Επιβεβαιώστε πρώτα το σύμπτωμα με φθηνά εργαλεία:
top,vmstat,iostat. Εάν χρησιμοποιείτε VM, ελέγξτε τηstστήλη (steal). Οτιδήποτε πάνω από 5% σημαίνει ότι ο υπερ-επιτηρητής είναι το σημείο συμφόρησης, όχι ο κώδικάς σας. - Εάν η χρήση της CPU είναι υψηλή, εκτελέστε
perf topγια λίγα δευτερόλεπτα και, στη συνέχεια,perf record -F 99 -g -p PID -- sleep 30για τη διαδικασία που προκαλεί το πρόβλημα. Μια καταγραφή 30 δευτερολέπτων στα 99 Hz παράγει περίπου 1,7 MB δεδομένων. - Εάν η διαδικασία έχει κολλήσει, είναι αργή ή επιστρέφει σφάλματα, εκτελέστε
strace -c -p PIDγια δέκα δευτερόλεπτα και διαβάστε τη σύνοψη. Εάν κυριαρχεί μία κατηγορία syscall, περιορίστε την αναζήτηση μεstrace -e trace=GROUP -T -p PID. - Όταν εντοπίσετε την ύποπτη κλήση συστήματος ή συνάρτηση, αποσυνδέστε. Μην αφήνετε κανένα από τα εργαλεία να εκτελείται στο περιβάλλον παραγωγής περισσότερο από όσο χρειάζεται.
Δύο προειδοποιήσεις. strace Η έξοδος μπορεί να περιλαμβάνει μεταβλητές περιβάλλοντος, διαδρομές αρχείων και byte που διαβάζονται από sockets, οπότε καθαρίστε τα αρχεία καταγραφής πριν τα μοιραστείτε εκτός της ομάδας σας. Και αν σκοπεύετε να το κάνετε αυτό τακτικά, εξετάστε bpftrace και το ευρύτερο εργαλείο eBPF ως το επόμενο βήμα: ίδιο είδος ορατότητας, επιβάρυνση κάτω του 1%, κατασκευασμένο για παραγωγή από την αρχή.
Εάν εκτελείτε φόρτους εργασίας όπου η βαθιά διαγνωστική πρόσβαση έχει σημασία και η κοινόχρηστη υποδομή δεν αποτελεί επιλογή, ρίξτε μια ματιά στους αποκλειστικούς διακομιστές μας.

Τα VPS της FDC διαθέτουν στάνταρ δίσκους NVMe, επεξεργαστές EPYC και πραγματικά μη μετρήσιμο εύρος ζώνης. Έτοιμοι για αναβάθμιση
Ξεκλειδώστε την απόδοση τώραΓιατί είναι σημαντικό να έχετε ένα ισχυρό και unmetered VPS
Ένα unmetered VPS παρέχει σταθερό εύρος ζώνης σε σταθερή ταχύτητα θύρας. Πώς διαφέρει από τα μετρούμενα πακέτα, πότε αποδίδει και τι πρέπει να ελέγξετε πριν από την αγορά.
7 λεπτά ανάγνωσης - 9 Μαΐου 2025
Διαχείριση μνήμης Linux: Swap, OOM Killer & Cgroups
12 λεπτά ανάγνωσης - 31 Μαΐου 2026

Έχετε ερωτήσεις ή χρειάζεστε μια προσαρμοσμένη λύση
Ευέλικτες επιλογές
Παγκόσμια εμβέλεια
Άμεση ανάπτυξη
Ευέλικτες επιλογές
Παγκόσμια εμβέλεια
Άμεση ανάπτυξη