Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Bagaimana untuk mengoptimumkan konfigurasi dan kernel Nginx

Bagaimana untuk mengoptimumkan konfigurasi dan kernel Nginx

WBOY
WBOYke hadapan
2023-05-16 21:43:271306semak imbas

Pengoptimuman dalam arahan nginx (fail konfigurasi)

Salin kod Kod adalah seperti berikut:

worker_processes 8;

Bilangan proses nginx, ia adalah disyorkan untuk mengikut bilangan cpu Tentukan, biasanya sebagai gandaan daripadanya.

Salin kod Kod adalah seperti berikut:

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 001000000000000000 🎜> Peruntukkan cpu untuk setiap proses Dalam contoh di atas, 8 proses adalah diperuntukkan kepada 8 CPU, sudah tentu anda boleh menulis kepada berbilang, atau menetapkan proses kepada berbilang CPU.

Salin kod Kod adalah seperti berikut:

worker_rlimit_nofile 102400;

Arahan ini merujuk kepada bilangan maksimum deskriptor fail yang dibuka oleh proses nginx bilangan maksimum fail terbuka. (ulimit -n) dibahagikan dengan bilangan proses nginx, tetapi nginx memperuntukkan permintaan tidak sekata, jadi lebih baik untuk mengekalkan nilai konsisten dengan ulimit -n.

Salin kod Kod adalah seperti berikut:

gunakan epoll;

Gunakan model i/o epoll, tidak perlu dikatakan.

Salin kod Kod adalah seperti berikut:

worker_connections 102400;

Bilangan maksimum sambungan yang dibenarkan setiap proses Secara teorinya, bilangan maksimum sambungan bagi setiap pelayan nginx ialah worker_processes *sambungan_pekerja.

Salin kod Kod adalah seperti berikut:

keepalive_timeout 60;

Keepalive timeout.

Salin kod Kod adalah seperti berikut:

client_header_buffer_size 4k;

Saiz penimbal pengepala permintaan pelanggan, yang boleh ditetapkan mengikut saiz halaman sistem anda, biasanya satu permintaan Saiz pengepala tidak akan melebihi 1k, tetapi memandangkan paging sistem umum lebih besar daripada 1k, saiz paging ditetapkan di sini. Saiz paging boleh diperolehi dengan arahan getconf pagesize.

Salin kod Kod adalah seperti berikut:

open_file_cache max=102400 inactive=20s;

Ini akan menentukan cache untuk fail yang dibuka secara lalai . max menentukan bilangan cache Adalah disyorkan untuk konsisten dengan bilangan fail yang terbuka merujuk kepada berapa lama fail tidak diminta sebelum cache dipadamkan.

Salin kod Kod adalah seperti berikut:

open_file_cache_valid 30s;

Ini merujuk kepada kekerapan menyemak maklumat sah yang dicache.

Salin kod Kod adalah seperti berikut:

open_file_cache_min_uses 1;

Bilangan minimum penggunaan fail dalam masa parameter tidak aktif arahan open_file_cache Jika nombor ini melebihi, deskriptor fail sentiasa Dibuka dalam cache, seperti dalam contoh di atas, jika fail tidak digunakan sekali dalam masa tidak aktif, ia akan dialih keluar.

Pengoptimuman parameter kernel

Salin kod Kod adalah seperti berikut:

net.ipv4.tcp_max_tw_buckets = 6000

Bilangan masa menunggu, lalai ialah 180000.

Salin kod Kod adalah seperti berikut:

net.ipv4.ip_local_port_range = 1024 65000

  Julat port yang dibenarkan dibuka oleh sistem.

Salin kod Kod adalah seperti berikut:

net.ipv4.tcp_tw_recycle = 1

Dayakan kitar semula pantas timewait.

Salin kod Kod adalah seperti berikut:

net.ipv4.tcp_tw_reuse = 1

Hidupkan guna semula. Benarkan soket tunggu masa digunakan semula untuk sambungan tcp baharu.

Salin kod Kod adalah seperti berikut:

net.ipv4.tcp_syncookies = 1

Hidupkan kuki syn Apabila baris gilir menunggu syn melimpah, dayakan kuki untuk mengendalikannya .

Salin kod Kod ini adalah seperti berikut:

net.core.somaxconn = 262144

Secara lalai, tunggakan fungsi dengar dalam aplikasi web akan memberi kita net.core.somaxconn had parameter kernel kepada 128, dan ngx_listen_backlog yang ditakrifkan oleh nginx menjadi lalai kepada 511, jadi adalah perlu untuk melaraskan nilai ini.

Salin kod Kod adalah seperti berikut:

net.core.netdev_max_backlog = 262144

Dibenarkan apabila kadar di mana setiap antara muka rangkaian menerima paket adalah lebih cepat daripada kadar pada yang mana kernel memproses paket ini Bilangan maksimum paket yang dihantar ke baris gilir.

Salin kod Kod adalah seperti berikut:

net.ipv4.tcp_max_orphans = 262144

Bilangan maksimum soket tcp dalam sistem yang tidak dikaitkan dengan mana-mana fail pengguna penangan . Jika nombor ini melebihi, sambungan anak yatim akan ditetapkan semula serta-merta dan mesej amaran akan dicetak. Had ini hanya untuk menghalang serangan DOS mudah Anda tidak boleh terlalu bergantung padanya atau mengurangkan nilai ini secara buatan Anda harus meningkatkan nilai ini (jika anda meningkatkan memori).

Salin kod Kod adalah seperti berikut:

net.ipv4.tcp_max_syn_backlog = 262144

 Nilai maksimum permintaan sambungan yang direkodkan yang belum menerima maklumat pengesahan pelanggan. Untuk sistem dengan memori 128m, nilai lalai ialah 1024, dan untuk sistem dengan ingatan kecil, ia adalah 128.

Salin kod Kod ini adalah seperti berikut:

net.ipv4.tcp_timestamps = 0

Setem masa boleh mengelakkan pembalut nombor jujukan. Pautan 1gbps pasti akan menemui nombor urutan yang telah digunakan sebelum ini. Cap masa membenarkan kernel menerima paket "tidak normal" sedemikian. Ia perlu dimatikan di sini.

Salin kod Kod adalah seperti berikut:

net.ipv4.tcp_synack_retries = 1

Untuk membuka sambungan kepada peer, kernel perlu menghantar syn dengan ack sebagai tindak balas kepada syn sebelumnya. Ini adalah jabat tangan kedua dalam apa yang dipanggil jabat tangan tiga hala. Tetapan ini menentukan bilangan paket syn+ack yang dihantar oleh kernel sebelum menghentikan sambungan.

Salin kod Kod adalah seperti berikut:

net.ipv4.tcp_syn_retries = 1

 Bilangan paket syn yang dihantar sebelum kernel berhenti membuat sambungan.

Salin kod Kod adalah seperti berikut:

net.ipv4.tcp_fin_timeout = 1

Jika soket diminta untuk ditutup oleh hujung setempat, parameter ini menentukan bahawa ia kekal dalam fin-wait- 2 masa keadaan. Rakan sebaya boleh membuat kesilapan dan tidak pernah menutup sambungan, malah ranap tanpa diduga. Nilai lalai ialah 60 saat. Nilai biasa untuk kernel 2.2 ialah 180 saat, anda boleh menekan tetapan ini, tetapi perlu diingat bahawa walaupun mesin anda adalah pelayan web yang dimuatkan dengan ringan, terdapat risiko limpahan memori disebabkan oleh sejumlah besar soket mati, akhirnya. tunggu-2 kurang berbahaya daripada sirip-tunggu-1 kerana ia hanya boleh memakan sehingga 1.5k ingatan, tetapi hayat mereka lebih lama.

Salin kod Kod adalah seperti berikut:

net.ipv4.tcp_keepalive_time = 30

Apabila keepalive didayakan, kekerapan tcp menghantar mesej keepalive. Lalai ialah 2 jam.

Konfigurasi pengoptimuman kernel lengkap

Salin kod Kod adalah seperti berikut:

net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1kernel.ms
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_bucketsnet.ipv 4.tcp_window_scaling =1 388608
net .core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144 🎜>bersih .ipv4.tcp_max_orphans = 3276800
net .ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_syn _cuba semula = 1
bersih .ipv4.tcp_tw_recycle = 1
net .ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_mem = 94500000 915000000 927000000net.ip v4.ip_local_port_range = 1024 65000

Fail konfigurasi pengoptimuman nginx yang mudah

Salin kod Kod adalah seperti berikut:

pengguna www www;
proses_pekerja 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 000 10000 00100000 01000000 ;
error/_log /x_rror /nginx/nginx.pid;

worker_rlimit_nofile 204800;

acara

{

gunakan epoll;

worker_connections 204800;
}

http
{
include mime.types;
default_types application/octet-stream;

charset utf -8;

server_names_hash_bucket_size 128;
client_header_buffer_size 2k;
large_client_client_
hantar fail dihidupkan;
tcp_no push on;

keepalive_timeout 60;

fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2
keys_m=test >tidak aktif=5m;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 16k;
16k;
16k;
fastcgi_read_timeout y_buffers_size 16k;
fastcgi_temp_file_write_size 16k;
fastcgi_cache test;
fastcgi_cache_valid 200 302 1j;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid mana-mana 1m;
fastcgi_cache_cache_1d;
fastcgi_use_cache_1d; keluar invalid_header http_500;

open_file_cache max= 204800 tidak aktif = 20s;
open_file_cache_min_uses 1; gzip_buffers 4 16k;
gzip_http_version 1.0; 2 ;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;

>
{
dengar 8080;
server_name ad.test.com;
index index.php index.htm;
root /www/html/;

lokasi /status
{
status_stub dihidupkan;
}

lokasi ~ .*.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index. ;
serta fcgi.conf;
}

lokasi ~ .*.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
tamat tempoh 30h;
}

akses format_log '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
access_log /www/ log/access.log access;
}
}

Beberapa arahan tentang fastcgi

Salin kod Kod adalah sebagai berikut:

fastcgi_cache_path /usr/local/ nginx/fastcgi_cache levels=1:2 keys_zone=test:10m inactive=5m;

Arahan ini menentukan laluan, tahap struktur direktori, storan kawasan kata kunci masa dan masa pemadaman tidak aktif untuk cache fastcgi.

Salin kod Kod adalah seperti berikut:

fastcgi_connect_timeout 300;

Nyatakan tamat masa untuk menyambung ke fastcgi hujung belakang.

Salin kod Kod adalah seperti berikut:

fastcgi_send_timeout 300;

Tamat masa untuk menghantar permintaan ke fastcgi Nilai ini merujuk kepada tamat masa untuk menghantar permintaan ke fastcgi selepas dua jabat tangan telah selesai.

Salin kod Kod ini adalah seperti berikut:

fastcgi_read_timeout 300;

Tamat masa untuk menerima respons fastcgi Nilai ini merujuk kepada tamat masa untuk menerima respons fastcgi selepas dua jabat tangan telah selesai.

Salin kod Kod adalah seperti berikut:

fastcgi_buffer_size 16k;

Nyatakan berapa besar penimbal diperlukan untuk membaca bahagian pertama respons fastcgi di sini anda boleh tetapkan kepada penimbal yang ditentukan oleh arahan fastcgi_buffers, arahan di atas menyatakan bahawa ia akan menggunakan penimbal 16k untuk membaca bahagian pertama respons, iaitu, pengepala respons ini secara amnya sangat kecil (. tidak lebih daripada 1k), tetapi jika anda menggunakan arahan fastcgi_buffers Jika saiz penimbal ditentukan dalam , ia juga akan memperuntukkan saiz penimbal yang ditentukan oleh fastcgi_buffers untuk caching.

Salin kod Kod ini adalah seperti berikut:

fastcgi_buffers 16 16k;

Nyatakan bilangan dan berapa besar penimbal diperlukan secara setempat untuk menimbal respons fastcgi, seperti yang ditunjukkan di atas, jika a php Saiz halaman yang dijana oleh skrip ialah 256k, dan 16 16k penimbal akan diperuntukkan untuk caching Jika ia lebih besar daripada 256k, bahagian yang lebih besar daripada 256k akan dicache dalam laluan yang ditentukan oleh fastcgi_temp baik untuk beban pelayan. Penyelesaian yang bijak, kerana kelajuan pemprosesan data dalam memori lebih cepat daripada cakera keras, biasanya tetapan nilai ini harus memilih nilai perantaraan saiz halaman yang dijana oleh skrip PHP di tapak anda, seperti sebagai halaman yang dijana oleh kebanyakan skrip dalam tapak anda Jika saiznya ialah 256k, anda boleh menetapkan nilai ini kepada 16 16k, atau 4 64k atau 64 4k, tetapi jelas sekali, dua yang terakhir bukanlah kaedah tetapan yang baik, kerana jika halaman yang dijana hanya 32k, jika 4 64k digunakan, ia akan memperuntukkan 1 Penampan 64k digunakan untuk cache, dan jika 64 4k digunakan, ia akan memperuntukkan 8 penampan 4k untuk cache, dan jika 16 16k digunakan, ia akan memperuntukkan 2 16k penimbal untuk cache halaman, yang kelihatan lebih munasabah.

Salin kod Kod adalah seperti berikut:

fastcgi_busy_buffers_size 32k;

Saya tidak tahu apa yang dilakukan oleh arahan ini, saya hanya tahu bahawa nilai lalai adalah dua kali ganda saiz daripada fastcgi_buffers.

Salin kod Kod ini adalah seperti berikut:

fastcgi_temp_file_write_size 32k;

Apakah saiz blok data yang akan digunakan semasa menulis fastcgi_temp_path, nilai lalai adalah dua kali ganda saiz fastcgi_buffers .

Salin kod Kod adalah seperti berikut:

fastcgi_cache test

Hidupkan cache fastcgi dan beri nama. Secara peribadi, saya merasakan bahawa menghidupkan cache sangat berguna, kerana ia dapat mengurangkan beban CPU dengan berkesan dan mencegah ralat 502. Tetapi cache ini akan menyebabkan banyak masalah kerana ia menyimpan halaman dinamik. Penggunaan khusus bergantung pada keperluan anda sendiri.

Salin kod Kod ini adalah seperti berikut:

fastcgi_cache_valid 200 302 1j;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid 200 302 1j;

fastcgi_cache_valid 301 1d;

fastcgi_cache_valid mana-mana 301 1d;

fastcgi_cache_valid mana-mana 1 masa cache;>sahkan masa cache S kod respons yang ditentukan , seperti dalam contoh di atas, respons 200 dan 302 dicache selama satu jam, respons 301 dicache selama 1 hari dan yang lain dicache selama 1 minit.

Salin kod Kod adalah seperti berikut:

fastcgi_cache_min_uses 1;

Bilangan minimum penggunaan cache dalam nilai parameter tidak aktif arahan fastcgi_cache_path, seperti dalam contoh di atas, jika fail digunakan dalam masa 5 minit Jika ia tidak digunakan sekali, fail tersebut akan dialih keluar.

Salin kod Kod tersebut adalah seperti berikut:

fastcgi_cache_use_stale error timeout invalid_header http_500;

Saya tidak tahu fungsi parameter ini jenis cache yang tidak berguna. Di atas adalah parameter yang berkaitan dengan fastcgi dalam nginx Selain itu, fastcgi sendiri juga mempunyai beberapa konfigurasi yang perlu dioptimumkan Jika anda menggunakan php-fpm untuk menguruskan fastcgi, anda boleh mengubah suai nilai berikut dalam fail konfigurasi. :

Salin kod Kod adalah seperti berikut:

60

  Bilangan permintaan serentak diproses pada pada masa yang sama, iaitu, ia akan membuka sehingga 60 utas kanak-kanak untuk mengendalikan sambungan serentak.

Salin kod Kod adalah seperti berikut:

102400

Bilangan maksimum fail terbuka.

Salin kod Kod adalah seperti berikut:

204800

Bilangan maksimum permintaan yang setiap proses boleh lakukan sebelum menetapkan semula nombor.

Beberapa keputusan ujian

Halaman statik ialah fail ujian yang disebut dalam artikel yang saya konfigurasikan konkurensi 4w dalam Squid Gambar di bawah menunjukkan webbench -c 30000 -t berjalan pada 6 mesin di masa yang sama. Keputusan ujian selepas 600 http://ad.test.com:8080/index.html arahan:

Bagaimana untuk mengoptimumkan konfigurasi dan kernel Nginx

Bilangan sambungan yang ditapis menggunakan netstat:

Bagaimana untuk mengoptimumkan konfigurasi dan kernel Nginx

Hasil halaman php dalam status (halaman php memanggil phpinfo):

Bagaimana untuk mengoptimumkan konfigurasi dan kernel Nginx

Bilangan sambungan halaman php selepas penapisan netstat:

Bagaimana untuk mengoptimumkan konfigurasi dan kernel Nginx

Pelayan dimuatkan sebelum fastcgi cache digunakan:

Bagaimana untuk mengoptimumkan konfigurasi dan kernel Nginx

Sudah sukar untuk membuka halaman php pada masa ini dan memerlukan berbilang menyegarkan untuk dibuka. Beban rendah pada cpu0 dalam rajah di atas adalah kerana semua permintaan gangguan kad rangkaian telah diperuntukkan kepada cpu0 semasa ujian, dan 7 proses dibuka dalam nginx dan masing-masing diberikan kepada cpu1-7.

Selepas menggunakan cache fastcgi:

Bagaimana untuk mengoptimumkan konfigurasi dan kernel Nginx

Anda boleh membuka halaman php dengan mudah pada masa ini.

Ujian ini tidak disambungkan ke mana-mana pangkalan data, jadi ia tidak mempunyai nilai rujukan Namun, saya tidak tahu sama ada ujian di atas telah mencapai had Mengikut penggunaan memori dan CPU, nampaknya tidak , tetapi tiada mesin tambahan. Biar saya jalankan webbench.

Atas ialah kandungan terperinci Bagaimana untuk mengoptimumkan konfigurasi dan kernel Nginx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam