二、Nginx高并发原理( 二 )


3、最大连接无限制
4、轻量级:功能模块少、代码模块化
内存映射: 磁盘中有数据 , 而每个数据都有对应的inode值 。在读取数据的时候会在内存中映射一个相同的inode值、大小也相同的数据 , 在下次读取数据的时候就不需要遍历inode值 , 分析路径了 , 从而提高了效率 。
(2)为什么要绑定Nginx进程到不同的CPU上
默认情况下 , Nginx的多个进程可能跑在某一个CPU或者CPU的某一个核心上 , 导致Nginx进程使用硬件的资源不均 , 因此绑定Nginx进程到不同的CPU上是为了充分利用硬件的多CPU多核资源的目的 , 这个也叫做CPU亲和()
[root@rzy ~]# vim /etc/nginx/nginx.conf。。。。。。3 worker_processes1;#1核的CPU , 因为使用的是虚拟机只给了一个核心 , 所以这里默认是1核4。。。。。。#例如:(1核是不用写worker_cpu_affinity的)******(1)有两个核心:worker_processes 2worker_cpu_affinity 01 10;******(2)有四个核心worker_processes 4worker_cpu_affinity 0001 0010 0100 1000;******(3)有八个核心worker_processes 8worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000#依次类推#也可以写:(自动)worker_processes autoworker_cpu_affinity auto
(3)零拷贝调用read函数 , 文件数据从硬盘被复制到内核缓冲区read函数返回 , 文件数据从内核缓冲区复制到用户缓冲区write函数调用 , 将文件数据从用户缓冲区复制到内核与相关的缓冲区数据从缓冲区复制到相关协议引擎
所以说传统文件数据实际上是经过了四次复制操作:
硬 盘 — — 内 核 缓 冲 区 — — 用 户 缓 冲 区 — — s o c k e t 缓 冲 区 ( 内 核 ) — — 协 议 引 擎 硬盘——内核缓冲区——用户缓冲区——缓冲区(内核)——协议引擎 硬盘——内核缓冲区——用户缓冲区——缓冲区(内核)——协议引擎
系统调用函数通过DMA把硬盘数据拷贝到 (内核缓冲区)数据被(内核)直接拷贝到拎一个与相关的 (内核缓冲区)DMA把数据从 (内核缓冲区)直接拷贝给协议栈
在这个过程中数据没有用户空间和内核空间之间的切换 , 在内核中直接完成了从一个缓冲区到另一个缓冲区的拷贝
三、安装Nginx (1)实验环境 系统主机名版本
.4
rzy
192.168.100.202
nginx/1.18.0
(2)安装Nginx -使用YUM安装
******(1)先做基础配置[root@Centos7 ~]# hostnamectl set-hostname rzy[root@Centos7 ~]# su[root@rzy ~]# systemctl stop firewalld[root@rzy ~]# setenforce 0setenforce: SELinux is disabled[root@rzy ~]# mount /dev/cdrom /mnt/mount: /dev/sr0 写保护 , 将以只读方式挂载mount: /dev/sr0 已经挂载或 /mnt 忙/dev/sr0 已经挂载到 /mnt 上******(2)创建YUM源文件(http://nginx.org/en/linux_packages.html进入Nginx官网复制yum源)#使用yum安装需要配置网络yum源 , 使用虚拟机需要使用桥接模式连接公网[root@rzy ~]# cd /etc/yum.repos.d/[root@rzy yum.repos.d]# ll总用量 4-rw-r--r--. 1 root root 56 1月12 18:33 centos.repo[root@rzy yum.repos.d]# vim Nginx.repo#创建新的repo文件[nginx-stable]name=nginx stable repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true[nginx-mainline]name=nginx mainline repobaseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/gpgcheck=1enabled=0gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true#保存退出[root@rzy yum.repos.d]# yum -y install yum-utils[root@rzy yum.repos.d]# yum -y install nginx #等待下载完成[root@rzy yum.repos.d]# systemctl start nginx[root@rzy yum.repos.d]# netstat -anpt | grep 80tcp00 0.0.0.0:800.0.0.0:*LISTEN1853/nginx: master[root@rzy yum.repos.d]# nginx -v#查看版本nginx version: nginx/1.18.0[root@rzy yum.repos.d]# cd /usr/share/nginx/html/#nginx网页目录存放位置[root@rzy html]# ll总用量 8-rw-r--r-- 1 root root 494 10月 29 23:25 50x.html-rw-r--r-- 1 root root 612 10月 29 23:25 index.html[root@rzy html]# vim index.html [root@rzy html]# echo "aaaaaaaaaaaaaaa" > index.html [root@rzy html]# systemctl restart nginx