İçeriğe geç

Linux Sunucularda strace ve lsof ile Hata Tespiti

Kategori: Linux Sistemleri

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

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

Eğer şöyle bir satır görürsek,

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

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

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

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

Servis Ç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 uygulama

PID’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 2451

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

İlk Yorumu Siz Yapın

Bir yanıt yazın

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