
<>Event
-
Worker 的升级版、把服务器进程和连接进行分析,基于异步 I/O 模型。
-
请求过来后进程并不处理请求,而是直接交由其它机制来处理,通过
epoll
机制来通知请求是否完成; -
在这个过程中,进程本身一直处于空闲状态,可以一直接收用户请求。可以实现一个进程响应多个用户请求。
-
并且 Event 模式对于 Keep-Alive 连接处理也有所优化,Event 模式由单独的线程处理 Keep-Alive 长连接,执行完毕后,又允许它释放。
-
这样增强了高并发场景下的请求处理能力。
-
特点:支持海量级高并发负载、消耗资源少、但其对
https
支持的不完美。

Keep-Alive 长连接:
-
TCP 连接在发送后将依然保持打开状态,于是浏览器可以继续通过相同的连接发送请求。
-
保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。
-
减少重复请求的次数,进而加快访问速度,实现长连接要客户端和服务端都支持长连接。
总结:
- 不同模式效率不同,主要用来调优。使用
httpd -V | grep 'MPM'
可以查看当前使用模式。
<>二、部署 Apache 网站服务
===================================================================================
准备工作
| 主机名 | 操作系统 | IP地址 | 版本号 |
| --- | --- | --- | --- |
| Apache | CentOS 7.4 | 192.168.1.1 | httpd-2.2.17.tar.gz
|
<>1.编译安装 Apache
-
静态编译 :将模块直接编译进
httpd
的核心中。静态编译的所有模块都会随着httpd
的启动而启动。 -
动态编译 :将模块编译好,但不编译到
httpd
的核心中。要启动动态编译的模块,需要在配置文件中使用LoadModule
指令加载。
root@Apache \~\]# wget http://archive.apache.org/dist/httpd/httpd-2.2.17.tar.gz \[root@Apache \~\]# tar zxf httpd-2.2.17.tar.gz -C /usr/src/ \[root@Apache \~\]# cd /usr/src/httpd-2.2.17/ \[root@Apache httpd-2.2.17\]# ./configure \\ --prefix=/usr/local/httpd \\ --enable-so \\ --enable-rewrite \\ --enable-cgi \&\& make \&\& make install 注解: * `--enable-so`:开启动态加载模块的功能。 * `--enable-rewrite`:开启地址重写、重定向功能。 * `--enable-cgi`:开启与一些动态编程语言之间进行交互的接口。  动态编译: ./configure \\ --prefix=/usr/local/httpd \\ --enable-so \\ --enable-modules=most \\ --enable-mpms-shared=all \&\& make \&\& make install * 注意:本次实验并不需要做动态编译。 查看模块 /usr/local/httpd/bin/apachectl -D DUMP_MODULES # 会显示静态编译还是动态编译 <>2.安装后优化调整 *** ** * ** *** \[root@Apache httpd-2.2.17\]# ln -s /usr/local/httpd/bin/\* /usr/local/bin/ # 优化执行路径 \[root@Apache \~\]# httpd -v # 查看httpd版本 \[root@Apache \~\]# cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd # 复制启动文件 \[root@Apache \~\]# sed -i 1a'#chkconfig: 35 85 15' /etc/init.d/httpd # 在第一行后面插入 \[root@Apache \~\]# chmod +x /etc/init.d/httpd # 添加可执行权限 \[root@Apache \~\]# chkconfig --add httpd # 添加为系统服务 \[root@Apache \~\]# chkconfig httpd on # 设置开机自启 \[root@Apache \~\]# systemctl start httpd # 开启httpd服务 \[root@Apache \~\]# netstat -anpt \| grep 80 # 查看端口是否开启  <>3.使用浏览器访问验证 *** ** * ** ***  <>4.配置多个网页 *** ** * ** *** \[root@Apache \~\]# cd /usr/local/httpd/htdocs/ \[root@Apache htdocs\]# rm -rf index.html \[root@Apache htdocs\]# mkdir baidu \[root@Apache htdocs\]# mkdir sina \[root@Apache htdocs\]# echo " ## www.baidu.com " \> baidu/index.html \[root@Apache htdocs\]# echo " ## www.sina.com " \> sina/index.html  使用浏览器访问验证:  解决方法: \[root@Apache \~\]# vim /usr/local/httpd/conf/httpd.conf 将主配置文件中的: 144 Options Indexes FollowSymLinks 替换为: 144 Options FollowSymLinks \[root@Apache \~\]# systemctl restart httpd # 重启httpd服务 \[root@Apache \~\]# netstat -anpt \| grep 80 # 查看端口是否开启  使用浏览器访问验证:  <>5.调整工作模式 *** ** * ** *** * 注意:设置工作模式时,不仅要考虑网站的并发连接等工作效率,也要考虑服务器硬件占用情况,内存尤为重点考虑。 #### <>1)查看工作模式 \[root@Apache \~\]# httpd -V \| grep 'MPM'  #### <>2)Prefork 工作模式 \| 参数 \| 作用 \| \| :-- \| :-- \| \| StartServers \| 服务器启动时建立的子进程数量 \| \| MinSpareServers \| 空闲子进程最小数量,当空闲子进程数小于该数值将产生新的子进程 \| \| MaxSpareServers \| 空闲子进程最大数量,当空闲子进程数大于该数值将杀死多余子进程 \| \| MaxClinets \| 限制用户最大并发数 \| \| MaxRequestsPerChild \| 每个子进程在其生存期内允许处理的最大请求数量 \| \[root@Apache \~\]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf 36 37 StartServers 5 38 MinSpareServers 5 39 MaxSpareServers 20 40 MaxClients 150 41 MaxRequestsPerChild 10000 42 \[root@Apache \~\]# vim /usr/local/httpd/conf/httpd.conf 将主配置文件中的: 370 #Include conf/extra/httpd-mpm.conf # 去掉注释 替换为: 370 Include conf/extra/httpd-mpm.conf \[root@Apache \~\]# systemctl restart httpd # 重启httpd服务 \[root@Apache \~\]# netstat -anpt \| grep 80 # 查看端口是否开启  #### <>3)Worker 工作模式 \| 参数 \| 作用 \| \| :-- \| :-- \| \| StartServers \| 服务器启动时建立的子进程数量 \| \| MinSpareServers \| 空闲子线程最少数量,当空闲子线程数量少于该数值将产生新的子线程 \| \| MaxSpareServers \| 空闲子线程最大数量,当空闲子线程数量大于该数量将杀死多余子线程 \| \| MaxClients \| 限制用户最大并发数 \| \| MaxRequestsPerChild \| 每个子进程在其生存期内允许处理的最大请求数量 \| \[root@Apache \~\]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf 51 52 StartServers 2 53 MaxClients 150 54 MinSpareThreads 25 55 MaxSpareThreads 75 56 ThreadsPerChild 50 57 MaxRequestsPerChild 10000 58 切换到 Worker 工作模式 \[root@Apache \~\]# systemctl stop httpd \[root@Apache \~\]# cat /usr/local/httpd/build/config.nice # 查看之前安装httpd的配置信息 \[root@Apache \~\]# cd /usr/src/httpd-2.2.17/ \[root@Apache \~\]# ./configure \\ --prefix=/usr/local/httpd \\ --enable-so \\ --enable-rewrite \\ --enable-cgi \\ --with-mpm=worker \&\& make clean \&\& make \&\& make install  查看当前工作模式 \[root@Apache \~\]# httpd -V \| grep 'MPM' # 查看当前工作模式 \[root@Apache \~\]# systemctl start httpd # 开启httpd服务 \[root@Apache \~\]# netstat -anpt \| grep 80 # 查看端口是否开启 \[root@Apache \~\]# ps aux \| grep httpd # 查看httpd进程  #### <>4)Event 工作模式 \| 参数 \| 作用 \| \| :-- \| :-- \| \| ServerLimit \| 服务器开启最大的进程数 \| \| StartServers \| 服务器启动时建立的子进程数量 \| \| MaxClinets \| 限制用户最大并发数 \| \| MinSpareThreads \| 空闲子线程最小数量,当空闲子线程数小于该数值将产生新的子线程 \| \| MaxSpareServers \| 空闲子线程最大数量,当空闲子线程数大于该数值将杀死多余子线程 \| \| ThreadsPerChild \| 每个子进程的最大并发线程数 \| \| MaxRequestsPerChild \| 每个子进程在其生存期内允许服务的最大请求数量 \| \[root@Apache \~\]# vim /usr/local/httpd/conf/extra/httpd-mpm.conf ##### 最后 == 就答题情况而言,第一问100%都可以回答正确,第二问大概只有50%正确率,第三问能回答正确的就不多了,第四问再正确就非常非常少了。其实此题并没有太多刁钻匪夷所思的用法,都是一些可能会遇到的场景,而大多数人但凡有1年到2年的工作经验都应该完全正确才对。 只能说有一些人太急躁太轻视了,希望大家通过此文了解js一些特性。 并祝愿大家在新的一年找工作面试中胆大心细,发挥出最好的水平,找到一份理想的工作。