Dosya tanımlayıcı sızıntısı nasıl izlenir?


11

Dosya tanımlayıcıları sızdırıyor bir java işlemi (Glassfish) var. Bunu biliyorum çünkü yararlı bir java.io.IOException: Too many open filesistisna alıyorum . Ben de bakabilirsiniz /proc/PID#/fdve tüm açık dosya tanımlayıcıları bkz. Ben lsof kullandığımda böyle çok sayıda giriş olsun:

Java 18510 kök 8811u çorap 0,4 1576079 protokolü tanımlayamıyor
Java 18510 kök 8812u çorap 0,4 1576111 protokolü tanımlayamıyor
Java 18510 kök 8813u çorap 0,4 1576150 protokolü tanımlayamıyor

Dakikada 12 yeni ürün görüyorum. Lsof üzerinde hangi seçenekleri kullanabilirim veya protokolün tanımlanamadığı soket dosya tanımlayıcılarını izlemem için başka hangi araçlar kullanabilirim?


// Bu soruya büyük bir tepkilerin bir sürü vardır ama uzakta arama motoru sorgusu ... duckduckgo.com/?q=How+to+track+down+a+file+descriptor+leak
Nathan Basanese

Yanıtlar:


7

işlemleri kullanarak ilk 20 dosya tanıtıcısını görmek için:

for x in `ps -eF| awk '{ print $2 }'`;do echo `ls /proc/$x/fd 2> /dev/null | wc -l` $x `cat /proc/$x/cmdline 2> /dev/null`;done | sort -n -r | head -n 20

Çıktı işlem için dosya tanıtıcısı sayımı, pid, cmndline biçimindedir

örnek çıktı

701 1216 /sbin/rsyslogd-n-c5
169 11835 postgres: spaceuser spaceschema [local] idle
164 13621 postgres: spaceuser spaceschema [local] idle
161 13622 postgres: spaceuser spaceschema [local] idle
161 13618 postgres: spaceuser spaceschema [local] idle

4

Strace komutuna aşina olun. Sistem çağrılarını izler. Son zamanlarda snmpd arka plan programının tekrar tekrar çökmesine neden olan dosya tanımlayıcı sızıntılarını izlemek için kullandım. Alışmak biraz zaman alıyor, ancak güçlü bir araç.

Çalışan bir sürece eklemek için strace kullanabilirsiniz (alt işlemleri takip etmek için -f bayrağını unutmayın).


1

Tam olarak ne bulmaya çalışıyorsunuz? Sızan FD'lerle, arızalı kodla veya başka bir şeyle ilişkili uzak IP adresleri?

Bir sızıntı olduğunu zaten belirlediğiniz gibi, bu java işleminden sorumlu mühendislerle iletişime geçmek makul bir sonraki adım gibi görünüyor.


Bu dosya tanımlayıcıları ile ilgili her türlü bilgiyi izlemeye çalışıyorum. can't identify protocolmühendislere koşacak çok şey vermez. Hangisini kullanmam gerektiğini göremediğim araçlar veya seçenekler var mı? Sorun test ortamında gerçekleşmez ve bu kabinede ancak kabine geçişinden sonra başlar. Aynı kodun taşıma işleminden önce hiçbir sorunu yoktu ve uygulama çözülmediğinde Glassfish hala kendi başına sızıyor. Benim en iyi tahminim bir ağ perspektifinden koptu ve prizler başlatmaya çalışıyor ama yapamıyor ve sonra asmak ve etrafında bırakılır.
cclark
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.