Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Kaedah pengoptimuman prestasi Nginx

Kaedah pengoptimuman prestasi Nginx

王林
王林ke hadapan
2023-05-28 08:01:511267semak imbas

Kaedah pengoptimuman prestasi Nginx

Pengoptimuman parameter sistem Linux

Sesetengah konfigurasi yang dinyatakan di bawah memerlukan kernel Linux yang lebih baharu (2.6 atau lebih tinggi). akan disokong. Untuk penalaan peringkat sistem, kami biasanya hanya mengubah suai had deskriptor fail, panjang baris gilir penimbal dan bilangan port sementara.

Had deskriptor fail

Memandangkan setiap sambungan TCP menduduki deskriptor fail, setelah deskriptor fail habis, sambungan baharu akan mengembalikan "Terlalu banyak fail terbuka" seperti ralat ini, untuk meningkatkan prestasi , kita perlu mengubah suainya: 1. Edit fail /etc/sysctl.conf untuk sekatan peringkat sistem dan tambah kandungan berikut:

fs.file-max =10000000
fs.nr_open =10000000

Edit fail /etc/security untuk sekatan peringkat pengguna /limits .conf, tambah kandungan berikut:

 *      hard   nofile      1000000
 *      soft   nofile      1000000

Kita perlu memastikan bahawa had peringkat pengguna adalah lebih rendah daripada had peringkat sistem, jika tidak, ia akan mengakibatkan ketidakupayaan untuk log masuk melalui SSH. Selepas pengubahsuaian selesai, laksanakan arahan berikut:

 $ sysctl -p

Anda boleh menyemak sama ada pengubahsuaian berjaya dengan melaksanakan perintah ulimit -a.

Panjang gilir sambungan TCP

Edit fail /etc/sysctl.conf dan tambah kandungan berikut:

# The length of the syn quenenet.ipv4.tcp_max_syn_backlog =65535# The length of the tcp accept queuenet.core.somaxconn =65535

di mana tcp_max_syn_backlog digunakan untuk menentukan baris gilir SYN separa sambungan panjang, apabila sambungan baharu Apabila ia tiba, sistem akan mengesan baris gilir SYN separa bersambung Jika baris gilir penuh, permintaan SYN tidak boleh diproses dan kiraan statistik akan ditambahkan ke ListenOverflows dan ListenDrops dalam /proc/net/. netstat. somaxconn digunakan untuk menentukan panjang gilir ACCEPT yang disambungkan penuh Apabila baris gilir penuh, paket ACK yang dihantar oleh klien tidak akan diproses dengan betul dan ralat "tetapan semula sambungan oleh rakan sebaya" akan dikembalikan log ralat "tiada huluan langsung semasa menyambung ke huluan". Jika ralat di atas berlaku, kami Anda perlu mempertimbangkan untuk meningkatkan konfigurasi kedua-dua item ini.

Port sementara

Memandangkan Nginx digunakan sebagai proksi, setiap sambungan TCP ke perkhidmatan web huluan akan menduduki port sementara, jadi kami perlu mengubah suai parameter ip_local_port_range untuk mengubah suai /etc/ sysctl.conf fail , tambah kandungan berikut:

net.ipv4.ip_local_port_range =102465535
net.ipv4.ip_local_reserved_ports =8080,8081,9000-9010

Antaranya, parameter ip_local_reserved_ports digunakan untuk menentukan port yang dikhaskan Ini adalah untuk mengelakkan port perkhidmatan daripada diduduki dan tidak dapat dimulakan.

Pengoptimuman parameter Nginx

Pengoptimuman parameter Nginx tertumpu terutamanya pada fail konfigurasi nginx.conf, yang tidak akan diterangkan secara terperinci di bawah.

Proses pekerja

Sebab penting prestasi Nginx yang berkuasa ialah ia menggunakan model I/O tanpa sekatan berbilang proses, jadi kita mesti menggunakan ini dengan baik:

  • worker_processes Nginx lalai hanya mempunyai satu proses induk dan satu proses pekerja daripada sistem. Meningkatkan bilangan pekerja boleh menyebabkan persaingan antara proses untuk sumber CPU, mengakibatkan suis konteks yang tidak perlu. Jadi kami hanya menetapkannya kepada bilangan teras CPU: worker_processes auto

  • worker_connections Bilangan sambungan serentak yang boleh dikendalikan oleh setiap pekerja, nilai lalai 512 bukan cukup gunakan, kami meningkatkannya dengan sewajarnya: worker_connections 4096

  • Nginx menyokong kaedah pemultipleksan I/O berikut untuk mengendalikan sambungan: pilih, tinjauan pendapat, kqueue, epoll, rtsig , /dev/poll, eventport. Sistem pengendalian yang berbeza menggunakan alat yang berbeza, dan dalam sistem Linux, epoll adalah yang paling berkesan

KeepAlive

Untuk mengelakkan perubahan kerap daripada Nginx kepada perkhidmatan Web Untuk mewujudkan dan memutuskan sambungan, kami boleh mendayakan ciri sambungan panjang KeepAlive yang disokong daripada HTTP 1.1, yang boleh mengurangkan overhed CPU dan rangkaian dengan ketara Dalam pertempuran sebenar kami, ia juga merupakan peningkatan terbesar dalam prestasi. Keepalive mesti digunakan bersama-sama dengan proxy_http_version dan proxy_set_header Parameter sambungan menetapkan bilangan maksimum sambungan keepalive terbiar ke pelayan huluan yang disimpan dalam cache setiap proses pekerja Apabila nombor ini melebihi, sambungan yang paling kurang digunakan baru-baru ini ditutup.

Ia dapat dilihat bahawa. ia bermaksud "bilangan maksimum sambungan panjang terbiar" ", sambungan panjang terbiar melebihi bilangan ini akan dikitar semula Apabila bilangan permintaan stabil dan lancar, bilangan sambungan panjang terbiar akan menjadi sangat kecil (hampir 0), tetapi dalam. realiti bilangan permintaan tidak boleh sentiasa lancar dan stabil Apabila bilangan permintaan berubah-ubah, bilangan sambungan panjang melahu juga berubah-ubah:

Apabila bilangan sambungan panjang melahu lebih besar daripada nilai yang dikonfigurasikan, bahagian sambungan panjang yang lebih besar daripada nilai yang dikonfigurasikan akan dikitar semula ;

  1. Apabila sambungan panjang tidak mencukupi, sambungan panjang baharu akan diwujudkan semula .

如果该值过小,连接池会经常进行回收、分配和再回收操作。为了避免这种情况出现,可以根据实际情况适当调整这个值,在我们实际情况中,目标QPS为6000,Web服务响应时间约为200ms,因此需要约1200个长连接,而 keepalive值取长连接数量的10%~30%就可以了,这里我们取300,如果不想计算,直接设为1000也是可行的。

Access-Log缓存

记录日志的I/O开销比较高,好在Nginx支持日志缓存,我们可以利用这个功能,降低写日志文件的频率,从而提高性能。结合使用buffer和flush两个参数可以控制缓存行为

  access_log /var/logs/nginx-access.log buffer=64k gzip flush=1m

其中 buffer制定了缓存大小,当缓冲区达到 buffer所指定的大小时,Nginx就会将缓存起来的日志写到文件中;flush指定了缓存超时时间,当 flush指定的时间到达时,也会触发缓存日志写入文件操作。

文件描述符限制

Nginx配置中同样有相应的配置项:worker_rlimit_nofile, 理论上这个值应该设置为 /etc/security/limits.conf 中的值除以 worker_processes, 但实际中不可能每个进程均匀分配,所以这里只要设置成和 /etc/security/limits.conf 一样就可以了

 worker_rlimit_nofile 1000000;

Atas ialah kandungan terperinci Kaedah pengoptimuman prestasi 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