GNU/Linux >> Belajar Linux >  >> Linux

Periksa batas FD terbuka untuk proses tertentu di Linux

Anda dapat mencoba menulis skrip yang memanggil lsof -p {PID} secara berkala pada pid yang diberikan.


untuk melihat 20 pegangan file teratas menggunakan proses:

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

hasilnya dalam format file handle count, pid, cmndline for process

contoh keluaran

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

Hitung entri di /proc/<pid>/fd/ . Batas keras dan lunak yang diterapkan pada proses dapat ditemukan di /proc/<pid>/limits .


Satu-satunya antarmuka yang disediakan oleh kernel Linux untuk mendapatkan batasan sumber daya adalah getrlimit() dan /proc/ pid /limits . getrlimit() hanya bisa mendapatkan batas sumber daya dari proses pemanggilan. /proc/ pid /limits memungkinkan Anda mendapatkan batas sumber daya dari setiap proses dengan ID pengguna yang sama, dan tersedia di RHEL 5.2, RHEL 4.7, Ubuntu 9.04, dan distribusi apa pun dengan kernel 2.6.24 atau yang lebih baru.

Jika Anda perlu mendukung sistem Linux lama maka Anda harus mendapatkan proses itu sendiri untuk memanggil getrlimit() . Tentu saja cara termudah untuk melakukannya adalah dengan memodifikasi program, atau pustaka yang digunakannya. Jika Anda menjalankan program maka Anda dapat menggunakan LD_PRELOAD untuk memuat kode Anda sendiri ke dalam program. Jika tidak ada yang memungkinkan maka Anda dapat melampirkan ke proses dengan gdb dan menjalankan panggilan dalam proses. Anda juga dapat melakukan hal yang sama sendiri menggunakan ptrace() untuk melampirkan ke proses, memasukkan panggilan ke dalam memorinya, dll., namun ini sangat rumit untuk dilakukan dengan benar dan tidak disarankan.

Dengan hak istimewa yang sesuai, cara lain untuk melakukan ini akan melibatkan melihat melalui memori kernel, memuat modul kernel, atau memodifikasi kernel, tetapi saya berasumsi bahwa ini tidak mungkin.


Linux
  1. Bagaimana cara menghitung penggunaan CPU dari suatu proses oleh PID di Linux dari C?

  2. Cara memeriksa ukuran heap untuk suatu proses di Linux

  3. Skrip Linux untuk memeriksa apakah proses sedang berjalan dan menindaklanjuti hasilnya

  1. Linux – Batasi Penggunaan Memori Untuk Proses Linux Tunggal?

  2. Linux :Lihat penggunaan CPU oleh suatu proses untuk detik terakhir

  3. Cara menemukan file .pid untuk proses tertentu

  1. Linux – Menemukan Pid Proses Menggunakan Port Tertentu?

  2. Pustaka Python untuk manajemen proses Linux

  3. Cara mengatur ID proses di Linux untuk program tertentu