Rumah > Artikel > Tutorial sistem > Kuasai kepentingan dan kemahiran praktikal proses dan utas Linux
Sebagai pentadbir sistem Linux, adalah sangat penting untuk memahami dan menguasai konsep proses dan benang serta kemahiran praktikal yang sepadan. Ini bukan sahaja membantu kami mengurus sumber sistem dengan lebih baik, tetapi juga meningkatkan kecekapan operasi dan kestabilan sistem. Artikel ini akan memberi anda pemahaman yang mendalam tentang proses dan urutan Linux, serta berkongsi beberapa petua dan alatan praktikal.
Proses ialah aktiviti menjalankan program dengan fungsi bebas tertentu pada pengumpulan data tertentu. Ia adalah unit asas pelaksanaan dinamik sistem pengendalian Dalam sistem pengendalian tradisional, prosesnya ialah kedua-dua unit peruntukan asas dan unit pelaksanaan asas.
Proses
Proses ialah aktiviti menjalankan program dengan fungsi bebas tertentu pada pengumpulan data tertentu. Ia adalah unit asas pelaksanaan dinamik sistem pengendalian Dalam sistem pengendalian tradisional, prosesnya ialah kedua-dua unit peruntukan asas dan unit pelaksanaan asas. Terdapat dua perkara utama dalam konsep proses: Pertama, proses ialah entiti. Setiap proses mempunyai ruang alamat sendiri, yang secara amnya merangkumi rantau teks, rantau data dan rantau tindanan. Kawasan teks menyimpan kod yang dilaksanakan oleh pemproses; kawasan data menyimpan pembolehubah dan memori yang diperuntukkan secara dinamik yang digunakan semasa pelaksanaan proses dan kawasan tindanan menyimpan arahan dan pembolehubah tempatan untuk panggilan prosedur aktif. Kedua, proses ialah "melaksanakan program." Program ialah entiti tidak bernyawa Hanya apabila pemproses menghidupkan program (dilaksanakan oleh sistem pengendalian) ia boleh menjadi entiti yang aktif.
Benang
Thread ialah unit terkecil yang sistem pengendalian boleh melaksanakan penjadualan operasi. Ia termasuk dalam proses dan merupakan unit operasi sebenar dalam proses. Benang merujuk kepada satu aliran kawalan berjujukan dalam satu proses Berbilang benang boleh dijalankan serentak dalam satu proses, dan setiap utas menjalankan tugas yang berbeza secara selari. Ia juga dipanggil proses ringan dalam Sistem Unix V dan SunOS, tetapi proses ringan lebih merujuk kepada benang kernel, manakala benang pengguna dipanggil benang. Hubungan antara proses dan utas Berbilang utas dalam proses yang sama akan berkongsi semua sumber sistem dalam proses tersebut, seperti ruang alamat maya, deskriptor fail, pemprosesan isyarat, dsb. Tetapi berbilang benang dalam proses yang sama mempunyai susunan panggilan sendiri, konteks daftarnya sendiri dan storan setempat benangnya sendiri.
Benang dan proses dalam Linux
Dalam kernel Linux, walaupun proses dan utas adalah kedua-dua tugas, ia harus dibezakan. Di mana pid ialah id proses dan tgid ialah ID kumpulan benang. Untuk sebarang proses, jika hanya terdapat utas utama, maka pid adalah dirinya sendiri, tgid adalah dirinya sendiri, dan ketua_kumpulan masih menunjuk kepada dirinya sendiri. Walau bagaimanapun, jika proses mencipta urutan lain, ini akan berubah. Benang mempunyai pid sendiri, tgid ialah pid utas utama proses dan ketua_kumpulan menunjuk ke utas utama proses. Jadi dengan tgid, kita tahu sama ada taste_struct mewakili proses atau benang. Hubungannya adalah seperti berikut:
Mengenai parameter kernel benang dan proses
had ulimit, laksana ulimit -a di bawah Linux, anda akan melihat had ulimit pada pelbagai sumber.
"Proses pengguna maksimum" ialah bilangan maksimum urutan yang boleh dibuat oleh proses Kami boleh mengubah suai parameter ini:
ulimit -u 66535
2. Parameter sys.kernel.threads-max. Parameter ini mengehadkan bilangan utas secara global dalam sistem pengendalian Anda boleh melihat nilainya melalui arahan berikut. Kaedah lihat benang-maks:
cat /proc/sys/kernel/threads-max 32768
Kaedah untuk mengubah suai nilai ini:
#方法一,重启后会失效 echo 65535 > /proc/sys/kernel/threads-max #方法二,永久修改 echo "kernel.threads-max = 65535" >> /etc/sysctl.conf
3. Parameter sys.kernel.pid_max. Parameter ini mengehadkan bilangan utas secara global dalam sistem pengendalian Anda boleh melihat nilainya melalui arahan berikut. Biar saya bercakap tentang sistem pengendalian 32-bit Nilai maksimum ialah 32768 dan tidak boleh diubah suai Nilai maksimum pid_max pada sistem 64-bit ialah 2^22. Apabila kernel Linux memulakan sistem, ia akan menetapkan nilai pid_max mengikut bilangan CPU dalam mesin. Contohnya, jika bilangan CPU dalam mesin kurang daripada atau sama dengan 32, maka pid_max akan ditetapkan kepada 32768 (32K); jika bilangan CPU dalam mesin lebih daripada 32, maka pid_max akan ditetapkan kepada N *1024 (N ialah bilangan CPU). Cara menyemak pid_max:
cat /proc/sys/kernel/pid_max 32768
Kaedah untuk mengubah suai nilai ini:
#方法一,重启后会失效 echo 65535 > /proc/sys/kernel/pid_max #方法二,永久修改 echo "kernel.pid_max = 65535" >> /etc/sysctl.conf
Nota: Sebilangan utas juga akan menduduki pid, jadi thread-max perlu kurang daripada atau sama dengan pid_max.
Penghadan bilangan benang bekas
Untuk sistem Linux, bekas ialah koleksi proses. Jika aplikasi dalam bekas mencipta terlalu banyak proses atau mempunyai pepijat, ia akan menghasilkan tingkah laku yang serupa dengan bom garpu. Dengan cara ini, bukan sahaja bekas lain pada nod yang sama tidak dapat berfungsi, tetapi hos itu sendiri juga tidak akan dapat berfungsi. Jadi untuk setiap bekas, kita perlu mengehadkan bilangan maksimum prosesnya, dan fungsi ini dilengkapkan oleh subsistem Cgroup pids. Saya pernah menghadapi masalah seperti itu sebelum ini Kerana aplikasi Java perlu mengendalikan banyak tugasan yang dijadualkan, tugasan yang dijadualkan menarik benang. Walau bagaimanapun, disebabkan oleh pepijat dalam kod, benang tidak dikitar semula dalam masa, dan kemudian bekas itu terus menghasilkan benang, yang meletihkan ruang jadual proses hos, akhirnya menyebabkan seluruh perkhidmatan Linux melaporkan ralat "java.lang.OutOfMemoryError : Tidak dapat mencipta urutan asli", menjejaskan perkhidmatan lain. Mesej ralat "Sumber tidak tersedia buat sementara waktu" muncul semasa proses penciptaan. Selain membenarkan pembangun membetulkan pepijat, masalah seperti ini juga memerlukan pengehadan bilangan utas pada peringkat sistem.
cgroup
Pids diasingkan dalam cgroup Dengan menukar konfigurasi docker/kubelet, anda boleh mengehadkan jumlah bilangan pid untuk mengehadkan jumlah bilangan thread.
docker, tetapkan parameter –pids-limit apabila bekas dimulakan untuk mengehadkan jumlah bilangan pid pada tahap kontena
kubelet, dayakan ciri SupportPodPidsLimit, tetapkan parameter –pod-max-pids dan hadkan jumlah bilangan pid untuk setiap pod nod
Prinsipnya adalah seperti berikut: Selepas bekas dibuat, perkhidmatan yang mencipta bekas akan mencipta subdirektori di bawah /sys/fs/cgroup/pids, iaitu fail yang paling kritikal dalam kumpulan kawalan ialah pids. maks. Kubelet atau docker menulis nilai pada fail ini dan nilai ini ialah bilangan maksimum proses yang dibenarkan dalam bekas ini. Setiap nod dalam Kubernetes menjalankan perkhidmatan yang dipanggil Kubelet, yang bertanggungjawab untuk status dan kitaran hayat bekas pada nod, seperti mencipta dan memadamkan bekas. Menurut dokumen Kubernetes rasmi Had dan Tempahan ID Proses, anda boleh menetapkan pilihan konfigurasi –pod-max-pids bagi perkhidmatan Kubelet Bekas seterusnya yang dibuat pada nod ini akhirnya akan menggunakan pengawal pid Cgroups untuk mengehadkan bilangan proses dalam. bekas.
Ringkasan
Melalui pengenalan dan analisis artikel ini, kami memahami konsep, perbezaan, peralihan keadaan dan kesannya terhadap sumber sistem proses dan rangkaian Linux. Pada masa yang sama, kami turut berkongsi beberapa petua dan alatan praktikal, seperti penalaan proses, alat pengesanan dan alatan pengurusan. Alat dan teknik ini bukan sahaja dapat membantu kami mengurus sumber sistem dengan lebih baik dan meningkatkan kecekapan operasi dan kestabilan sistem, tetapi juga meningkatkan kecekapan dan daya saing kerja kami. Oleh itu, adalah sangat perlu bagi kita untuk menguasai kepentingan dan kemahiran praktikal proses dan benang Linux.
Atas ialah kandungan terperinci Kuasai kepentingan dan kemahiran praktikal proses dan utas Linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!