Linux sistemlerde bir uygulama beklenmedik şekilde kapanıyor veya başlatılamıyorsa, sorun sadece log dosyalarında görünmeyebilir. Bu gibi durumlarda uygulamanın işletim sistemiyle kurduğu iletişimi ve erişmeye çalıştığı dosya ya da portları izlemek gerekir.
strace Nedir? Ne İşe Yarar?
strace, bir sürecin çekirdek ile yaptığı sistem çağrılarını ve bu çağrılara verilen yanıtları izler. Uygulamanın hangi dosyayı açmaya çalıştığını, hangi bağlantıyı kurduğunu veya hangi hata koduyla geri döndüğünü net şekilde gösterir.
Ancak strace ./uygulama komutu genellikle çok fazla çıktı üretir. Bu yüzden iki temel yaklaşım vardır ya çıktıyı bir dosyaya alıp sonradan analiz ederiz ya da yalnızca belirli çağrılara odaklanırız.
strace -e fault=all ./uygulamaBu komut, ekranda yalnızca hata kodu satırlarını bırakır. Uygulamanın tam olarak nerede başarısız olduğunu gösterir.
Dosya Sorunu Var mı Kontrol Edelim
Uygulama açılmıyorsa en sık sebep, bir dosyaya veya kütüphaneye erişememesidir.
strace -e trace=open,openat,access,stat,newfstatat ./uygulamaEğer şöyle bir satır görürsek,
open("/etc/app/config.yml", O_RDONLY) = -1 ENOENTbu, uygulamanın beklediği dosyanın sistemde bulunmadığını gösterir. Bu durumda dosya yolu, yapılandırma dosyası veya servis kullanıcısının çalışma dizini kontrol edilmelidir.
strace Çıktısını Dosyaya Alarak Analiz Edelim
Uzun çıktılarla çalışırken terminal yerine dosya kullanmak analiz sürecini ciddi şekilde kolaylaştırır.
strace -o hata.log ./uygulamaEksik Dosya ve Kütüphane Hatalarını Bulma
Uygulama çalışmıyorsa ilk bakmamız gereken şey erişilemeyen dosyalardır. ENOENT hata kodu, uygulamanın var olmayan bir dosya veya dizine erişmeye çalıştığını gösterir.
grep -i ENOENT hata.logYetki Problemlerini Tespit Etme
Dosya sisteminde mevcut olan bir dosyaya erişim sağlanamıyorsa, sorun büyük ihtimalle yetkilerle ilgilidir. strace bu durumu EACCES hata kodu ile açıkça gösterir.
grep -i EACCES hata.logServis Çalışıyor Ama Cevap Vermiyorsa
Bazı durumlarda servis çalışıyor gibi görünür ama bağlantı kurulamaz.
Önce sürecin PID’sini bulalım.
ps aux | grep uygulamaPID’yi bulduktan sonra strace ile sürece bağlanalım. Bu noktada ekrana gelen satırlara bakalım. Aynı çağrı sürekli tekrar ediyorsa, uygulama bir noktada bekliyor demektir
strace -p 2451lsof Nedir? Neden strace ile Birlikte Kullanılır?
strace, uygulamanın ne yapmaya çalıştığını gösterir. lsof ise sistemde o anda hangi dosyaların ve portların gerçekten kullanıldığını gösterir. Bu iki araç birlikte kullanıldığında sorun çok daha net ortaya çıkar.
Ö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 Sorulan Sorular
Çalışan servise strace bağlayamıyorum izin hatası alıyorum
Çoğu süreç root yetkisiyle çalıştığı için strace -p PID komutu sudo olmadan çalışmaz. Komut mutlaka sudo strace -p PID şeklinde kullanılmalıdır.
strace ile Docker container içindeki bir uygulamayı izleyebilir miyim?
Docker container içindeki bir uygulama strace ile izlenebilir ancak container’ın SYS_PTRACE yetkisine sahip olması gerekir. Bu yetki verilmediği sürece kernel seviyesinde izleme engellenir.
Ayrıca bağlantı hataları çoğu zaman container’ın ağ yapılandırmasıyla ilişkilidir. Bu nedenle Docker ağ yapısının nasıl çalıştığını bilmek önemlidir
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.
