Linux sistemlerde çalışan bir uygulama aniden kapanıyor ya da hiç başlatılamıyorsa, problemin kaynağı her zaman uygulama loglarında yer almayabilir. Bu gibi senaryolarda uygulamanın arka planda sistemle nasıl etkileşim kurduğunu ve hangi kaynaklara erişmeye çalıştığını doğrudan gözlemlemek gerekir.
strace Ne İşe Yarar?
strace, bir uygulamanın işletim sistemiyle gerçekleştirdiği tüm sistem çağrılarını kaydeder ve görüntüler. Dosya erişimleri, ağ bağlantıları ve hata dönüşleri strace çıktısında açıkça görülebilir. Bu da uygulamanın hangi aşamada başarısız olduğunu anlamayı mümkün kılar.
strace ./uygulama komutu uygulamanın yaptığı tüm sistem çağrılarını listeler ve bu da çoğu zaman gereğinden fazla bilgi üretir. Bu nedenle doğrudan tüm çıktıyı incelemek yerine, hata ile sonuçlanan çağrılara odaklanmak daha verimli bir yaklaşımdır.
strace -e fault=all ./uygulamaBu komut sayesinde yalnızca hata kodu dönen satırlar görüntülenir ve uygulamanın başarısız olduğu nokta hızlıca tespit edilebilir.
Dosya Erişimlerini İnceleyelim
Bir uygulama açılmıyorsa sorun çoğu zaman eksik veya yanlış konumlandırılmış bir dosyadan kaynaklanır. strace ile sadece dosya erişim çağrılarını izleyerek bu durumu hızlıca tespit edebiliriz.
strace -e trace=open,openat,access,stat,newfstatat ./uygulamaAşağıdaki örnek çıktıda görüldüğü gibi,
open("/etc/app/config.yml", O_RDONLY) = -1 ENOENTENOENT hatası, uygulamanın beklediği dosyayı bulamadığını ifade eder. Bu genellikle eksik konfigürasyon dosyaları veya yanlış tanımlanmış dosya yollarından kaynaklanır.
strace Çıktısını Dosyaya Kaydedelim
Uzun ve detaylı strace çıktıları terminal ekranında kaybolabilir. Çıktıyı bir dosyaya yönlendirmek, özellikle hata kodlarını ve tekrar eden çağrıları tespit ederken çok daha pratik bir yaklaşım sağlar.
strace -o hata.log ./uygulamaEksik Dosya ve Kütüphane Kaynaklı Hataları İnceleyelim
Uygulamanın başlatılamaması çoğu zaman ihtiyaç duyduğu bir dosyaya erişememesiyle ilgilidir. ENOENT hata kodu, uygulamanın beklediği dosyanın sistemde bulunmadığını ifade eder.
grep -i ENOENT hata.logYetki Kaynaklı Sorunları Kontrol Edelim
Dosya mevcut olmasına rağmen erişilemiyorsa, bu durum genellikle izin problemlerine işaret eder. strace çıktısındaki EACCES hataları bu tür sorunları net şekilde ortaya koyar.
grep -i EACCES hata.logÇalışan Serviste Takılma Durumları
Servis aktif görünmesine rağmen cevap vermiyorsa, sürecin bir noktada beklediği anlaşılır. Bunun için önce PID bilgisini tespit edelim.
ps aux | grep uygulamaArdından çalışan sürece bağlanarak anlık sistem çağrılarını izleyelim.
strace -p 2451lsof Nedir? strace ile Birlikte Neden Kullanılır?
strace, uygulamanın niyetini gösterir; yani hangi dosyaya veya porta erişmeye çalıştığını izlememizi sağlar. lsof ise bu erişimlerin sistem tarafında karşılığı olup olmadığını gösterir. Bir port gerçekten açık mı, bir dosya başka bir süreç tarafından mı kullanılıyor gibi sorular lsof ile netleşir. Bu nedenle hata ayıklama sürecinde strace ve lsof birlikte kullanıldığında çok daha sağlıklı sonuçlar elde edilir.
Önce sistemdeki açık bağlantıları görelim
lsof -i -n -PEğer belirli bir portu kimin kullandığını öğrenmek istiyorsak şu komut yeterlidir.
lsof -i :8080 -n -PPort dolu mu, kim kullanıyor sorusu burada netleşir.

strace ve lsof’un Birlikte Kullanımı
Önce lsof ile port veya dosya durumu kontrol edilir. Ardından strace ile uygulamanın bu kaynağa erişirken nerede hata aldığı görülür. Bu şekilde sorun tahminle değil, doğrudan gözle görülerek çözülür.
Önce araçlar kurulu mu bakalım.
which strace<br>which lsofKurulu değillerse yükleyelim.
apt install strace lsof -yUygulamayı strace ile başlatalım.
strace -ff -o trace ./uygulamaHata satırlarını ayıklayalım.
grep -i enoent trace.*<br>grep -i eacces trace.*<br>grep -i refused trace.*Port ve dosya durumunu kontrol edelim.
lsof -i -n -P<br>lsof +L1Gerekli düzeltmeleri yaptıktan sonra servisi yeniden başlatalım.
systemctl restart uygulamaSık Sorular Sorular
strace -p PID komutu çalışmıyor hata veriyor
strace, kernel seviyesinde izleme yaptığı için yeterli yetki gerektirir. Hata alınmasının en yaygın nedeni komutun sudo olmadan çalıştırılmasıdır. Komut mutlaka root yetkisiyle kullanılmalıdır.
Docker container içindeki uygulamalarda strace kullanımı mümkün mü?
Docker container içindeki bir uygulama strace ile izlenebilir ancak bunun için container’a SYS_PTRACE yetkisi verilmiş olması gerekir. Varsayılan Docker güvenlik ayarlarında bu yetki kapalıdır ve kernel seviyesinde izleme engellenir.
Ayrıca uygulamanın bağlantı kuramaması gibi sorunlar çoğu zaman container ağ yapılandırmasından kaynaklanır.
strace mi lsof mu önce kullanılmalı?
Port veya dosya çakışması şüphesi varsa önce lsof kullanılmalıdır. Uygulamanın neden başarısız olduğunu görmek gerekiyorsa strace tercih edilir.
lsof portu gösteriyor ama strace connect çağrısı başarısız
Bu genellikle yanlış IP’ye bağlanma, IPv4/IPv6 uyumsuzluğu veya firewall kuralı nedeniyle olur. lsof yalnızca portun açık olduğunu gösterir, bağlantının kabul edileceğini garanti etmez.