strace ve lsof ile Linux’ta Hata Bulma

Linux sistemlerde bir uygulama çalışmıyor, sessizce kapanıyor veya başlatılamıyorsa, sorun çoğu zaman doğrudan görülemez. Bu tür problemlerde uygulamanın sistemle olan etkileşimini incelemek, hangi dosya, dizin veya portlara erişmeye çalıştığını anlamak gerekir.
strace Nedir?
strace , bir uygulamanın işletim sistemiyle kurduğu iletişimi ayrıntılı olarak izler. Sistem çağrıları üzerinden uygulamanın yaptığı tüm işlemleri göstererek, hata noktalarının açıkça ortaya çıkmasını sağlar.
Bir uygulamayı strace ./uygulama ile izlediğimizde, tüm sistem çağrıları ekrana yazdırılır. Bu da özellikle kısa sürede teşhis yapılması gereken durumlarda karmaşaya yol açabilir. Bu nedenle yalnızca hata dönen çağrıları izlemek daha doğru bir yaklaşımdır.
strace -e fault=all ./uygulamaBu komut, uygulamanın başarısız olduğu işlemleri hata kodlarıyla birlikte göstererek sorunun kaynağını hızlıca ortaya koyar.
Eksik Dosya Var mı Kontrol Edelim
Uygulama açılmıyorsa en temel nedenlerden biri, gerekli dosyaların eksik olmasıdır. strace ile yalnızca dosya işlemlerini izleyerek bu durumu net şekilde görebiliriz.
strace -e trace=open,openat,access,stat,newfstatat ./uygulamaAşağıdaki örnek satır,
open("/etc/app/config.yml", O_RDONLY) = -1 ENOENTuygulamanın aradığı dosyayı bulamadığını gösterir. Bu durumda dosyanın gerçekten var olup olmadığı ve doğru path ile çağrılıp çağrılmadığı kontrol edilmelidir.
strace Çıktısını Dosyaya Alalım
Gerçek sistemlerde strace çıktısı çok hızlı akar ve önemli satırlar gözden kaçabilir. Bu yüzden tüm çıktıyı bir dosyaya almak, hata ayıklama sürecini daha kontrollü ve anlaşılır hâle getirir.
strace -o hata.log ./uygulamaDosya ve Kütüphane Problemlerini Ortaya Çıkarma
Uygulama çalışmadığında ilk bakılması gereken yer, erişilemeyen dosya ve dizinlerdir. ENOENT hata kodu, uygulamanın olmayan bir kaynağa erişmeye çalıştığını gösterir.
grep -i ENOENT hata.logErişim Yetkisi Hatalarını İnceleme
Dosya mevcut ancak erişim sağlanamıyorsa, strace çıktısında EACCES hata kodu görülür. Bu durum genellikle izin veya güvenlik politikalarından kaynaklanır.
grep -i EACCES hata.logÇalışan Süreçte Donma Durumu
Servis çalışıyor ancak yanıt vermiyorsa, sürecin hangi çağrıda takıldığını görmek gerekir. Bunun için önce PID’yi tespit edelim.
ps aux | grep uygulamaPID belirlendikten sonra çalışan sürece bağlanalım.
strace -p 2451lsof Nedir?
strace, uygulamanın dosya ve ağ erişim denemelerini gösterir ancak bu erişimlerin sistem tarafında karşılık bulup bulmadığını tek başına söylemez. lsof, o anda sistemde hangi dosyaların ve portların aktif olarak kullanıldığını göstererek bu boşluğu doldurur. Özellikle port çakışmaları ve dosya kilitlenmeleri gibi sorunlarda lsof ile strace birlikte kullanıldığında hata çok daha hızlı tespit 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 ile PID üzerinden izleme yaparken neden erişim engelleniyor
Bu hata genellikle sürecin root yetkisiyle çalışmasından kaynaklanır. strace işlemi, hedef sürecin yetkileriyle uyumlu olmalıdır. Çözüm olarak komut sudo ile çalıştırılmalıdır.
strace Docker container içinde neden çalışmıyor olabilir?
Docker container içindeki bir uygulama strace ile izlenebilir ancak bunun için SYS_PTRACE yetkisi zorunludur. Bu yetki verilmediğinde kernel seviyesinde izleme yapılamaz.
Bunun yanında uygulamanın ağ üzerinden başka servislerle iletişim kuramaması gibi durumlar, çoğu zaman container’ın kullandığı network driver veya özel 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.