Bekas buruh pelabuhan tidak boleh dibunuh

PHPz
Lepaskan: 2023-05-13 14:32:38
asal
1859 orang telah melayarinya

Bekas docker telah menjadi cara standard untuk menggunakan aplikasi moden, terutamanya untuk perusahaan yang menggunakan seni bina perkhidmatan mikro. Walau bagaimanapun, dalam penggunaan sebenar, kita mungkin menghadapi beberapa masalah, seperti bekas tidak boleh dibunuh, dsb. Artikel ini akan memperkenalkan beberapa sebab mengapa bekas tidak boleh dibunuh dan cara menyelesaikan masalah ini.

  1. Penggunaan sumber kontena yang berlebihan

Di dalam bekas Docker, setiap bekas mempunyai CPU, memori dan sumber lain sendiri Apabila sumber digunakan secara berlebihan, sistem mungkin tidak mampu memberi respons tepat pada masanya kepada arahan bunuh. Pada masa ini, anda perlu mematikan proses kontena secara manual, atau menggunakan perintah bunuh dengan parameter -f untuk memaksa berhenti.

Walau bagaimanapun, jika anda tidak mahu mematikan proses bekas secara manual semasa bekas sedang berjalan, terdapat alatan yang boleh membantu anda menghentikan bekas secara automatik. Contohnya menggunakan Perkhidmatan Kontena AWS EC2 atau Kubernetes, alatan ini boleh memantau penggunaan sumber kontena secara automatik dan menghentikan bekas apabila sumber digunakan secara berlebihan.

  1. Masalah yang disebabkan oleh titik lekap antara bekas dan hos

Apabila fail dikongsi antara bekas dan hos, bekas itu memasang fail pada hos Apabila diapit, bekas itu tidak boleh mati. Ini kerana apabila bekas keluar, sistem pengendalian mungkin perlu menunggu operasi I/O sistem fail selesai sebelum menamatkan aplikasi, jika tidak, kerosakan sistem fail mungkin berlaku.

Untuk menyelesaikan masalah ini, kami perlu memastikan bahawa bekas tidak mempunyai sebarang fail yang dibuka untuk ditulis dalam folder kongsi yang dipasang Anda boleh menggunakan perintah lsof untuk melihat fail yang terbuka dalam bekas, dan kemudian tutup fail ini secara manual. Di samping itu, apabila bekas keluar, kami boleh membiarkan hos menyahlekap folder yang dipasang supaya sistem pengendalian tidak menunggu operasi I/O.

  1. Gunakan arahan docker stop dan bukannya docker kill command

Kadangkala kami mungkin menggunakan docker stop command untuk menghentikan proses kontena. Walau bagaimanapun, apabila bekas tidak boleh dihentikan seperti biasa, arahan henti dok boleh menyebabkan masalah Pada masa ini, kita perlu menggunakan perintah bunuh dok untuk menghentikan kontena secara paksa. Kerana arahan bunuh docker boleh menghentikan proses kontena secara paksa tanpa menunggu proses dibersihkan.

Sebelum menggunakan arahan docker kill, kita perlu memastikan bahawa tiada aplikasi yang sedang berjalan dalam bekas, jika tidak, ia boleh menyebabkan masalah seperti kehilangan data atau kebocoran memori.

  1. Subproses dalam bekas

Aplikasi dalam bekas Docker boleh mencipta subproses mereka sendiri dan subproses ini boleh menghalang proses kontena daripada dimatikan. Kerana apabila proses induk keluar, proses anak mungkin menjadi "proses yatim", dan sistem pengendalian boleh memindahkan proses yatim ke proses init dan terus berjalan Dalam kes ini, bekas tidak boleh dimatikan.

Terdapat dua cara untuk menyelesaikan masalah ini: satu ialah menyediakan mekanisme pemprosesan isyarat semasa menjalankan aplikasi dalam bekas Apabila proses kontena menerima isyarat bunuh, ia menghantar isyarat kepada proses anak biarkan proses anak juga keluar Dengan cara ini Ini membolehkan proses kontena keluar dengan lancar; yang kedua ialah menggunakan perintah bunuh buruh untuk membunuh secara paksa proses kontena, supaya proses anak juga akan ditamatkan.

  1. Benang dalam bekas

Aplikasi dalam bekas mungkin menggunakan berbilang benang dan benang ini mungkin menghalang bekas daripada mati. Kerana apabila proses kontena tamat, benang mungkin terus berjalan, menyebabkan proses kontena tidak dapat keluar.

Untuk menyelesaikan masalah ini, kita perlu menyemak semua benang dalam bekas untuk memastikan bahawa benang telah keluar. Anda boleh menggunakan arahan strace atau perintah lsmod untuk menyenaraikan semua benang dalam bekas dan kemudian menghentikan benang ini secara manual.

Ringkasan

Apabila menggunakan bekas Docker, tidak dapat membunuh bekas adalah masalah biasa. Artikel ini memperkenalkan beberapa sebab mengapa bekas tidak boleh dibunuh dan cara menyelesaikan masalah ini. Saya harap penyelesaian ini dapat membantu dan menghalang anda daripada menghadapi masalah yang sama apabila menggunakan bekas Docker.

Atas ialah kandungan terperinci Bekas buruh pelabuhan tidak boleh dibunuh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!