Rumah Operasi dan penyelenggaraan Nginx analisis contoh set isyarat nginx

analisis contoh set isyarat nginx

May 13, 2023 am 10:37 AM
nginx

Penghasilan Semula Senario

Di bawah saya akan menggunakan nginx asli untuk menghasilkan semula proses ini pada mesin maya saya dengan fedora26 dipasang Versi nginx yang saya gunakan ialah 1.13.4 terbaharu

Nginx mula pertama.

analisis contoh set isyarat nginx

Anda dapat melihat bahawa kedua-dua tuan dan pekerja sudah berjalan.

Kemudian kami menghantar isyarat sigusr2 kepada master Apabila teras nginx menerima isyarat ini, kemas kini panas akan dicetuskan.

analisis contoh set isyarat nginx

Anda dapat melihat bahawa tuan baru dan pekerja yang dicabang oleh tuan sudah berjalan pada masa ini, kami kemudian menghantar isyarat sigwinch kepada tuan lama, dan tuan lama menerima ini Selepas isyarat, sigquit akan dihantar kepada pekerjanya, jadi proses pekerja tuan lama akan keluar:

analisis contoh set isyarat nginx

Pada masa ini, hanya tuan lama , tuan baru dan tuan baru ditinggalkan Pekerja tuan sedang berjalan, yang serupa dengan operasi dalam talian pada masa itu.

Kemudian kita menggunakan arahan berhenti:

analisis contoh set isyarat nginx

Kita akan dapati tuan baru dan pekerjanya telah keluar, sementara tuan lama masih berjalan Dan pekerja yang dihasilkan. Inilah keadaan dalam talian pada masa itu.

Sebenarnya, fenomena ini berkaitan dengan reka bentuk nginx itu sendiri: apabila tuan lama bersedia untuk memotong tuan baharu, ia akan menamakan semula fail nginx.pid kepada nginx.pid.oldbin, dan kemudian menggunakan Master baharu daripada fork akan mencipta nginx.pid baharu Fail ini akan merekodkan pid master baharu. nginx percaya bahawa selepas kemas kini panas selesai, misi tuan lama hampir tamat, dan ia akan keluar pada bila-bila masa, jadi semua operasi berikutnya harus diambil alih oleh tuan baru. Sudah tentu, adalah tidak sah untuk mencuba kemas kini panas yang lain dengan menghantar sigusr2 kepada master baru tanpa master lama keluar dari master baru hanya akan mengabaikan isyarat ini dan meneruskan kerjanya sendiri.

Analisis Masalah

Apa yang lebih malang ialah jadual lua yang kami nyatakan di atas, fail lua yang mentakrifkannya, telah dimuatkan ke dalam ingatan oleh luajit seawal apabila cangkuk init_by_lua dijalankan. Dan disusun ke dalam kod bait, maka jelaslah tuan lama tidak boleh mempunyai jadual lua ini, kerana bahagian kod lua yang dimuatkannya ialah versi lama.

Kod Lua yang mengindeks jadual tidak digunakan semasa init_by_lua Kod ini dimuatkan dalam proses pekerja Pada masa ini, kod dalam direktori projek adalah yang terkini, jadi kod pekerja yang terkini dimuatkan. Jika proses pekerja ini mengendalikan permintaan yang berkaitan, ralat masa jalan Lua akan berlaku dan manifestasi luaran akan menjadi http 500 yang sepadan.

Selepas menyerap pelajaran ini, kami perlu menutup perkhidmatan nginx kami dengan lebih rasional. Oleh itu, skrip permulaan dan penutupan perkhidmatan nginx yang lebih munasabah diperlukan Sesetengah skrip yang beredar di Internet tidak menangani fenomena ini.

analisis contoh set isyarat nginx

Kod ini dipetik daripada nginx official /etc/init.d/nginx .

set isyarat nginx

Seterusnya kami akan menyusun set isyarat nginx secara menyeluruh Butiran kod sumber tidak akan terlibat di sini. Pelajar yang berminat boleh membaca sendiri kod sumber yang berkaitan.

Kami mempunyai dua cara untuk menghantar isyarat kepada proses induk, satu adalah untuk beroperasi melalui isyarat nginx -s, dan satu lagi adalah untuk menghantarnya secara manual melalui arahan bunuh.

Prinsip kaedah pertama ialah menjana proses baharu, yang mendapat pid proses induk melalui fail nginx.pid, kemudian menghantar isyarat yang sepadan kepada induk, dan kemudian keluar Proses ini dipanggil pemberi isyarat.

Cara kedua memerlukan kita memahami pemetaan isyarat nginx -s kepada isyarat sebenar. Jadual berikut ialah hubungan pemetaan mereka:

isyarat operasi
reload sighup
buka semula sigusr1
stop sigterm
quit sigquit
hot update sigusr2 & sigwinch & sigquit
stop vs quit

stop menghantar isyarat sigterm untuk menunjukkan keluar paksa, dan quit menghantar sigquit untuk menunjukkan keluar yang anggun. Perbezaan khusus ialah selepas proses pekerja menerima mesej sigquit (perhatikan bahawa isyarat tidak dihantar terus, jadi mesej digunakan sebaliknya), ia akan menutup soket mendengar, menutup sambungan terbiar yang sedang terbiar (sambungan yang boleh didahulukan ), dan kemudian memprosesnya terlebih dahulu Semua acara pemasa keluar pada penghujungnya. Melainkan terdapat keadaan khusus, berhenti harus digunakan dan bukannya berhenti.

muat semula

Selepas proses induk menerima sighup, ia akan menghuraikan semula fail konfigurasi, memohon memori dikongsi dan satu siri tugas lain, dan kemudian menjana sekumpulan pekerja baharu proses, dan akhirnya menghantarnya kepada yang lama Proses pekerja menghantar mesej yang sepadan dengan sigquit, dan akhirnya operasi restart direalisasikan dengan lancar.

buka semula

Selepas proses induk menerima sigusr1, ia akan membuka semula semua fail yang terbuka (seperti log), dan kemudian menghantar maklumat sigusr1 kepada setiap proses pekerja Selepas proses pekerja menerima isyarat, ia akan melakukan operasi yang sama. Buka semula boleh digunakan untuk pemotongan log Contohnya, nginx secara rasmi menyediakan penyelesaian:

analisis contoh set isyarat nginx

Tidur 1 diperlukan di sini kerana proses induk menghantar mesej sigusr1 kepada proses pekerja. Terdapat tetingkap masa antara membuka semula akses.log Pada masa ini, proses pekerja masih menulis log ke akses fail.log.0. Dengan tidur 1s, integriti maklumat log access.log.0 dipastikan (jika pemampatan dilakukan terus tanpa tidur, kehilangan log mungkin berlaku).

kemas kini panas

Kadangkala kita perlu melakukan kemas kini panas binari nginx menyertakan fungsi ini semasa mereka bentuk, tetapi ia tidak boleh diselesaikan melalui baris arahan yang disediakan oleh nginx .

Melalui masalah berulang di atas, anda sepatutnya memahami cara melakukan kemas kini panas Kita perlu menghantar sigusr2 ke proses induk semasa, dan kemudian induk akan menamakan nginx.pid kepada nginx.pid.oldbin. Kemudian buat proses baharu Proses baharu akan menggunakan panggilan sistem execve untuk menggantikan imej proses semasa dengan fail nginx elf baharu dan menjadi proses induk baharu. Selepas proses induk baharu dimulakan, ia akan melaksanakan penghuraian fail konfigurasi dan operasi lain, dan kemudian menghentikan proses pekerja baharu untuk mula bekerja.

Kemudian kami menghantar isyarat sigwinch kepada tuan lama, dan kemudian proses tuan lama akan menghantar mesej sigquit kepada proses pekerjanya, menyebabkan proses pekerja keluar. Menghantar sigwinch dan sigquit ke proses induk akan menyebabkan proses pekerja terkeluar, tetapi yang pertama tidak akan menyebabkan proses induk terkeluar juga.

Akhir sekali, jika kami merasakan bahawa proses tuan lama telah menyelesaikan misinya, kami boleh menghantar isyarat sigquit untuk membiarkannya keluar.

Bagaimana proses pekerja mengendalikan mesej isyarat daripada tuan

Malah, proses induk berkomunikasi dengan proses pekerja, bukan dengan menggunakan fungsi bunuh, tetapi dengan menggunakan saluran nginx yang dilaksanakan melalui saluran paip, proses induk Tulis maklumat (seperti maklumat isyarat) ke satu hujung paip, dan proses pekerja menerima maklumat dari hujung yang satu lagi Acara saluran nginx ditambahkan pada penjadual acara (seperti epoll, kqueue) apabila proses pekerja baru sahaja bermula, jadi apabila terdapat Apabila data dihantar daripada induk, ia boleh dimaklumkan oleh penjadual acara.

Terdapat sebab mengapa nginx direka bentuk dengan cara ini Sebagai pelayan proksi terbalik yang sangat baik, nginx mengejar prestasi tinggi yang melampau, dan pengendali isyarat akan mengganggu perjalanan proses pekerja, menyebabkan semua acara digantung selama. tempoh masa tetingkap masa, yang mempunyai kehilangan prestasi tertentu.

Ramai orang mungkin berfikir bahawa apabila proses induk menghantar maklumat kepada proses pekerja, proses pekerja akan bertindak balas dengan serta-merta dengan operasi yang sepadan Namun, proses pekerja sentiasa sibuk memproses acara rangkaian dan pemasa . Selepas memanggil pengendali acara saluran nginx, nginx hanya memproses beberapa bendera. Tindakan ini sebenarnya dilaksanakan selepas pusingan penjadualan acara selesai. Oleh itu, terdapat tetingkap masa di antaranya Terutama apabila perniagaan adalah kompleks dan trafik yang besar, tetingkap ini mungkin diperbesarkan Ini sebabnya pelan pemotongan log yang disediakan oleh nginx secara rasmi memerlukan tidur 1s.

Sudah tentu, kami juga boleh memintas proses induk dan menghantar isyarat terus kepada proses pekerja Isyarat yang boleh dikendalikan oleh pekerja termasuk

kesan isyarat
tanda keluar paksa
. sigterm force exit
sigquit anggun keluar
sigusr1 membuka semula fail

Atas ialah kandungan terperinci analisis contoh set isyarat nginx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara memulakan nginx di linux Cara memulakan nginx di linux Apr 14, 2025 pm 12:51 PM

Langkah -langkah untuk memulakan Nginx di Linux: Periksa sama ada Nginx dipasang. Gunakan SistemCTL Mula Nginx untuk memulakan perkhidmatan Nginx. Gunakan SistemCTL Dayakan NGINX untuk membolehkan permulaan automatik Nginx pada permulaan sistem. Gunakan Status SistemCTL Nginx untuk mengesahkan bahawa permulaan berjaya. Lawati http: // localhost dalam pelayar web untuk melihat halaman selamat datang lalai.

Cara Mengkonfigurasi Nginx di Windows Cara Mengkonfigurasi Nginx di Windows Apr 14, 2025 pm 12:57 PM

Bagaimana cara mengkonfigurasi nginx di Windows? Pasang Nginx dan buat konfigurasi hos maya. Ubah suai fail konfigurasi utama dan sertakan konfigurasi hos maya. Mulakan atau Muat semula Nginx. Uji konfigurasi dan lihat laman web. Selektif membolehkan SSL dan mengkonfigurasi sijil SSL. Selektif tetapkan firewall untuk membolehkan trafik port 80 dan 443.

Bagaimana untuk memeriksa sama ada Nginx dimulakan? Bagaimana untuk memeriksa sama ada Nginx dimulakan? Apr 14, 2025 pm 12:48 PM

Di Linux, gunakan arahan berikut untuk memeriksa sama ada nginx dimulakan: Hakim status SistemCTL Nginx berdasarkan output arahan: Jika "Aktif: Aktif (Running)" dipaparkan, Nginx dimulakan. Jika "aktif: tidak aktif (mati)" dipaparkan, nginx dihentikan.

Cara menyelesaikan ralat nginx403 Cara menyelesaikan ralat nginx403 Apr 14, 2025 pm 12:54 PM

Pelayan tidak mempunyai kebenaran untuk mengakses sumber yang diminta, mengakibatkan ralat NGINX 403. Penyelesaian termasuk: Periksa keizinan fail. Semak konfigurasi .htaccess. Semak konfigurasi Nginx. Konfigurasikan keizinan Selinux. Semak peraturan firewall. Menyelesaikan masalah lain seperti masalah penyemak imbas, kegagalan pelayan, atau kesilapan lain yang mungkin.

Cara memeriksa sama ada nginx dimulakan Cara memeriksa sama ada nginx dimulakan Apr 14, 2025 pm 01:03 PM

Bagaimana untuk mengesahkan sama ada nginx dimulakan: 1. Gunakan baris arahan: status sistem sistem nginx (linux/unix), netstat -ano | Findstr 80 (Windows); 2. Periksa sama ada port 80 dibuka; 3. Semak mesej permulaan Nginx dalam log sistem; 4. Gunakan alat pihak ketiga, seperti Nagios, Zabbix, dan Icinga.

Cara menyelesaikan masalah domain nginx Cara menyelesaikan masalah domain nginx Apr 14, 2025 am 10:15 AM

Terdapat dua cara untuk menyelesaikan masalah silang domain Nginx: Ubah suai tajuk tindak balas silang domain: Tambah arahan untuk membenarkan permintaan lintas domain, nyatakan kaedah dan tajuk yang dibenarkan, dan tetapkan masa cache. Gunakan modul CORS: Dayakan modul dan konfigurasikan peraturan CORS untuk membolehkan permintaan, kaedah, tajuk, dan masa cache domain.

Cara menyelesaikan nginx403 Cara menyelesaikan nginx403 Apr 14, 2025 am 10:33 AM

Bagaimana untuk memperbaiki kesilapan dilarang nginx 403? Semak keizinan fail atau direktori; 2. Semak .htaccess File; 3. Semak fail konfigurasi nginx; 4. Mulakan semula nginx. Penyebab lain yang mungkin termasuk peraturan firewall, tetapan selinux, atau isu aplikasi.

Cara memulakan pelayan nginx Cara memulakan pelayan nginx Apr 14, 2025 pm 12:27 PM

Memulakan pelayan Nginx memerlukan langkah-langkah yang berbeza mengikut sistem operasi yang berbeza: Sistem Linux/Unix: Pasang pakej Nginx (contohnya, menggunakan apt-get atau yum). Gunakan SystemCTL untuk memulakan perkhidmatan Nginx (contohnya, SUDO SystemCTL Mula Nginx). Sistem Windows: Muat turun dan pasang fail binari Windows. Mula Nginx menggunakan nginx.exe executable (contohnya, nginx.exe -c conf \ nginx.conf). Tidak kira sistem operasi yang anda gunakan, anda boleh mengakses IP pelayan

See all articles