Linux Sistemleri

      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 ./uygulama

      Bu 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 ./uygulama

      Aşağıdaki örnek satır,

      open("/etc/app/config.yml", O_RDONLY) = -1 ENOENT

      uygulamanı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 ./uygulama

      Dosya 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.log

      Eriş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 uygulama

      PID belirlendikten sonra çalışan sürece bağlanalım.

      strace -p 2451

      lsof 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 -P

      Eğer belirli bir portu kimin kullandığını öğrenmek istiyorsak şu komut yeterlidir.

      lsof -i :8080 -n -P

      Port 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 lsof

      Kurulu değillerse yükleyelim.

      apt install strace lsof -y

      Uygulamayı strace ile başlatalım.

      strace -ff -o trace ./uygulama

      Hata 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 +L1

      Gerekli düzeltmeleri yaptıktan sonra servisi yeniden başlatalım.

      systemctl restart uygulama

      Sı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.

      Hi, I’m Spesifik

      Bir yanıt yazın

      E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir