GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendeteksi dan mengetahui suatu program mengalami kebuntuan?

Jika Anda mencurigai kebuntuan, lakukan ps aux | grep <exe name> , jika dalam output, PROCESS STATE CODE adalah D (Uninterruptible sleep) artinya kebuntuan. Karena seperti yang dijelaskan @daijo, katakanlah Anda memiliki dua utas T1 &T2 dan dua bagian penting masing-masing dilindungi oleh semaphores S1 & S2 lalu jika T1 memperoleh S1 dan T2 memperoleh S2 dan setelah itu mereka mencoba untuk mendapatkan kunci lain sebelum melepaskan kunci yang sudah mereka pegang, ini akan menyebabkan kebuntuan dan melakukan ps aux | grep <exe name> , process state code akan menjadi D (yaitu tidur tanpa gangguan).

Alat:

Valgrind, Lockdep (utilitas kernel linux)

Periksa tautan ini tentang jenis kebuntuan dan cara menghindarinya :http://cmdlinelinux.blogspot.com/2014/01/linux-kernel-deadlocks-and-how-to-avoid.html

Edit:ps aux keluaran D "bisa" berarti proses menemui jalan buntu, dari dokumen redhat ini:

Kondisi Tidur Tanpa Gangguan
Kondisi tidur tanpa gangguan adalah kondisi yang tidak akan langsung menangani sinyal. Ini akan bangun hanya sebagai hasil dari sumber daya yang menunggu tersedia atau setelah waktu habis terjadi selama menunggu itu (jika waktu habis ditentukan saat proses dimatikan).


Saya sarankan Anda melihat Helgrind:pendeteksi kesalahan utas.

Contoh paling sederhana dari masalah tersebut adalah sebagai berikut.

Bayangkan beberapa sumber daya bersama R, yang, untuk alasan apa pun, dijaga oleh dua kunci, L1 dan L2, yang keduanya harus dipegang saat R diakses.

Misalkan sebuah utas memperoleh L1, lalu L2, dan melanjutkan untuk mengakses R. Implikasinya adalah bahwa semua utas dalam program harus memperoleh dua kunci dengan urutan pertama L1 kemudian L2. Tidak melakukannya berisiko mengalami kebuntuan.

Kebuntuan bisa terjadi jika dua utas - sebut saja T1 dan T2 - keduanya ingin mengakses R. Misalkan T1 memperoleh L1 terlebih dahulu, dan T2 memperoleh L2 terlebih dahulu. Kemudian T1 mencoba untuk mendapatkan L2, dan T2 mencoba untuk mendapatkan L1, tetapi kedua kunci tersebut sudah dipegang. Jadi T1 dan T2 menemui jalan buntu."


Linux
  1. Cara Mengetahui Direktori dan File Teratas (Ruang Disk) di Linux

  2. Klien Dropbox Maestral, Temukan Cara Memasang dan Menggunakannya

  3. Cara Menemukan dan Membunuh Proses Zombie di Linux

  1. Cara Menemukan dan Menghapus Foto Duplikat di Linux

  2. Bagaimana Cara Mencetak Baris Nomor 15 Dan 25 Dari Setiap 50 Baris?

  3. Bagaimana cara menemukan file dan menjumlahkan ukurannya?

  1. Bagaimana cara mengetahui namespace dari proses tertentu?

  2. Bagaimana cara mengetahui apakah kartu nirkabel saya mendukung 5 GHz?

  3. Cara mengetahui sumber sinyal POSIX