strace ve perf: Linux sorun giderme hile sayfası
13 dakikalık okuma - 4 Haziran 2026

Linux'ta strace ve perf'in ne zaman kullanılacağı, gerçekten çalıştıracağınız komutlar ve yoğun bir üretim sunucusunda hata ayıklarken ek yükün nasıl düşük tutulacağı.
Linux sorun giderme için strace ve perf
Bir Linux sunucusu yavaşladığında, çöktüğünde veya CPU'yu aşırı yüklediğinde ve uygulama günlükleri bunun nedenini açıklamadığında, iki araç bu boşluğu büyük ölçüde doldurur. strace size bir işlemin çekirdeğe ne istediğini söyler. perf CPU'nun zamanını nerede harcadığını gösterir. Bu iki araç birlikte, başka hiçbir şeyin bu kadar ucuza cevap veremediği "neden takıldı" ve "ne yapıyor" sorularını yanıtlar.
Bu yazıda, her bir araca ne zaman başvurmanız gerektiği, bunların nasıl kurulacağı, gerçekten çalıştıracağınız komutlar ve canlı bir sunucuda ek yükü yönetilebilir tutmanın yolları ele alınmaktadır.
Strace ve perf ne zaman kullanılmalı
Aradaki fark basittir. perf CPU meşgul olduğunda ve hangi işlevin sorumlu olduğunu bilmeniz gerektiğinde kullanın. strace perf
perf , çekirdeğin donanım sayaçlarını yapılandırılabilir bir sıklıkta örnekler, bu nedenle ek yük genellikle %1'in altındadır ve üretim ortamında çalıştırmak güvenlidir. strace , ptrace, bu da hedef işlemi 10 ila 100 kat yavaşlatabilir. Canlı sistemlerde bunu nadiren kullanın ve her zaman filtrelerle birlikte kullanın.
| Belirti | Şu komutla başlayın | Şunlarla devam edin |
|---|---|---|
| Yüksek CPU kullanımı | perf top veya perf record -g | strace -c sıcak işlemde |
| Yavaş disk veya I/O bekleme | perf stat önbellek kaçırmaları için | strace -e trace=file |
| İşlem kilitlenmesi veya sessiz hata | strace -e trace=file,network | perf stat CPU yükünü dışlamak için |
| Kilit çekişmesi veya yavaş API | strace -c, şunlara dikkat edin futex | perf record -g |
strace ve perf'i yükleme
Her iki araç da standart depolarda bulunmaktadır. strace, ptrace syscall'a dayanır ve yıllardır tüm modern çekirdeklerin bir parçasıdır. perf ise perf_events arayüzünü kullanır ve çalıştırdığınız çekirdeğe uygun bir pakete ihtiyaç duyar.
sudo apt install strace linux-tools-common linux-tools-$(uname -r)
RHEL, AlmaLinux veya Fedora'da:
sudo dnf install strace perf
Bit $(uname -r) bit önemlidir. Farklı bir çekirdek sürümüne göre derlenmiş bir perf ikili dosyası kafa karıştırıcı çıktı üretir ve olayları sessizce atlayabilir. perf --version ve strace -V komutlarıyla doğrulayın.
Perf'in onaltılık adresler yerine işlev adlarını göstermesi için hata ayıklama sembollerine ihtiyacınız vardır. İlgili -dbg veya -debuginfo paketini (örneğin, libc6-dbg Debian'da) yükleyin ve kendi ikili dosyalarınızı -g ile kendi ikili dosyalarınızı derleyin.
Konteynerlerin içinde, strace için --cap-add=SYS_PTRACE ve perf gerekir --cap-add=SYS_ADMIN Docker ile başlatılırken. Bu sınırlamalar olmadan araçlar, hatalar gibi görünen şekillerde başarısız olur.
Strace ile sistem çağrılarını izleme
strace strace command komutunu çalıştırmak, bir işlemi başlatıldığından itibaren izler. Çalışan bir işleme bağlanmak için strace -p PIDkomutunu kullanın. Çok iş parçacıklı veya çatallanan herhangi bir şey için -f komutunu ekleyin; aksi takdirde etkinliklerin çoğunu kaçıracaksınız.
Çıktı satırları bir dönüş değeriyle biter. -1 ENOENT , işlemin istediği dosyanın bulunmadığı anlamına gelir. -1 EACCES , izinlerle ilgilidir. Bu iki hata, tek başına üretim hatalarının şaşırtıcı bir kısmını oluşturur.
En kullanışlı bayrak -e trace=GROUP'dir; bu, çıktıyı adlandırılmış bir sistem çağrısı kategorisiyle sınırlar ve gereksiz bilgileri yönetilebilir tutar.
| Grup | Çağrıları dahil | Ne için kullanışlıdır |
|---|---|---|
file | openat, stat, read, write | Eksik yapılandırmalar, izin hataları, yavaş G/Ç |
network | socket, connect, bind, recvfrom | Bağlantı reddedildi, DNS hataları, TLS sorunları |
process | execve, clone, wait4 | Çökmeler, fork fırtınaları, eksik ikili dosyalar |
futex | futex | Kilit çekişmesi ve iş parçacığı durmaları |
Yoğun bir sunucuda, strace -c -p PID ile on veya yirmi saniye boyunca başlayın. -c bayrağı, bağlantıyı kestiğinizde sistem çağrısı sayılarının, toplam sürenin ve hataların bir özetini yazdırır. Bu, terminali aşırı yüklemeden hangi kategoriye daha yakından bakmanız gerektiğini gösterir. Ardından dar bir filtreyle yeniden bağlanın.
Bilmeniz gereken diğer bayraklar: -T her çağrıda harcanan süreyi günlüğe kaydeder, -Z sadece başarısız çağrıları gösterir ve -o file terminale değil bir günlüğe yazar; bu, gürültülü bir işlemde çok daha hızlıdır.
Perf ile CPU Profili Oluşturma
perf'te çoğu zaman kullanacağınız dört komut vardır.
| Komut | Ne Yapar | Yaygın bayraklar |
|---|---|---|
perf stat | Sayaçların anlık görüntüsü: döngüler, önbellek kaçırmaları, bağlam geçişleri | -e, -p, -a |
perf top | Sistemdeki en yoğun işlevlerin canlı görünümü | --sort comm,dso,symbol |
perf record | Çevrimdışı analiz için perf.data çevrimdışı analiz için | -F, -g, -p |
perf report | Okuma perf.data, fonksiyonları örnek payına göre sıralar | --stdio, --sort |
Hızlı bir genel bakış için perf stat -p PID ile başlayın. Dikkat edilmesi gereken rakamlar:
- 1,0'ın altındaki IPC (döngü başına komut sayısı): CPU, genellikle bellek erişiminde durmaktadır.
- Yüksek LLC yük kaçırma sayısı: çalışma kümesi önbelleğe sığmıyor, bu nedenle CPU RAM'i bekliyor.
- Yüksek bağlam değiştirme sayısı: iş parçacıklarının disk veya ağda sürekli tıkanmaya neden olduğu I/O sınırlı iş yükleri için klasik bir durumdur.
Bir şey ters görünüyorsa, perf record -F 99 -g -p PID -- sleep 30. -F 99 99 Hz'de örnekleme yapar; bu, yoğun işlevleri bulmak için yeterlidir ve 100 Hz gibi yuvarlak sayılarda çekirdek zamanlayıcıyla senkronizasyonu önler. -g bayrağı çağrı grafiklerini yakalar, böylece perf report size bir işlevin hangi yollarının sorumlu olduğunu gösterebilir.
"Overhead" perf report, Ek Yük sütunu toplam örneklerin payını gösterir. _int_malloc veya memcpy , yoğun kaynak tahsisi anlamına gelir. Kendi işlevlerinizden birinde yüksek ek yük, aradığınız sıcak noktadır.
İşlev adları yerine onaltılık adresler görüyorsanız, ikili dosya soyulmuştur veya hata ayıklama sembolleri eksiktir. Eşleşen -dbg paketi yükleyin veya ikili dosyayı -g.
Canlı bir sunucuda pratik bir iş akışı
Yoğun bir sunucuda meydana gelen gerçek bir olay için rutin şu şekildedir:
- Öncelikle ucuz araçlarla sorunu doğrulayın:
top,vmstat,iostat. Bir VM kullanıyorsanız,st(steal) sütununu kontrol edin. %5'in üzerindeki değerler, darboğazın kodunuz değil, hipervizör olduğunu gösterir. - CPU yükü yüksekse,
perf topkomutunu çalıştırın, ardındanperf record -F 99 -g -p PID -- sleep 30sorunlu işlem için çalıştırın. 99 Hz'de 30 saniyelik bir yakalama yaklaşık 1,7 MB veri üretir. - İşlem kilitlenmişse, yavaşsa veya hata veriyorsa,
strace -c -p PIDkomutunu on saniye çalıştırın ve özeti okuyun. Bir syscall kategorisi baskınsa,strace -e trace=GROUP -T -p PID. - Şüpheli sistem çağrısını veya işlevi bulduğunuzda, bağlantıyı kesin. Her iki aracı da gerekenden daha uzun süre üretim ortamında çalışır durumda bırakmayın.
İki uyarı. strace çıktısı ortam değişkenlerini, dosya yollarını ve soketlerden okunan baytları içerebilir, bu nedenle günlükleri ekibinizin dışına paylaşmadan önce temizleyin. Ve bunu düzenli olarak yapacaksanız, bir sonraki adım olarak bpftrace ve daha kapsamlı eBPF araç setini bir sonraki adım olarak değerlendirin: aynı tür görünürlük, %1'in altında ek yük, baştan itibaren üretim ortamı için tasarlanmış.
Derin tanılama erişiminin önemli olduğu ve paylaşımlı altyapının bir seçenek olmadığı iş yükleri çalıştırıyorsanız, özel sunucularımıza bir göz atın.

FDC VPS standart olarak NVMe sürücüler, EPYC işlemciler ve gerçekten ölçülmemiş bant genişliği ile birlikte gelir. Yükseltmeye hazır mısınız?
Performansın kilidini şimdi açınGüçlü ve ölçülmemiş bir VPS'ye sahip olmak neden önemlidir?
Ölçülmemiş bir VPS, sabit bir bağlantı noktası hızında sabit oranlı bant genişliği sağlar. Ölçülü planlardan farkı nedir, ne zaman işe yarar ve satın almadan önce neleri kontrol etmelisiniz.
7 dakikalık okuma - 9 Mayıs 2025
Linux Bellek Yönetimi: Swap, OOM Killer & Cgroups
12 dakikalık okuma - 31 Mayıs 2026

Sorularınız mı var veya özel bir çözüme mi ihtiyacınız var?
Esnek seçenekler
Küresel erişim
Anında dağıtım
Esnek seçenekler
Küresel erişim
Anında dağıtım