首先要了解Apache采用的MPM(Multi -Processing Modules,多道处理模块),MPM是Apache的核心,它的作用是管理网络连接、调度请求。Apache中MPM分为3种(perfork、worker、event)。
Apache2.4版本
新特性:
1、MPM 支持在运行时装载;不过要开启这种特性,在编译安装要启用这三种功能;
--enable-mpms-shared=all --with-mpm=event
2、支持 event
3、支持异步读写
4、在每个模块及每个目录上指定日志级别
5、增强版的表达式分析器
6、每请求配置:<If>, <Elseif>
7、毫秒级别的 keepalive timeout
8、基于 FQDN 的虚拟主机不再需要 NameVirtualHost 指令
9、支持使用自定义变量
主流网站服务器软件:
* Apache:时间较早,模块化设计,几乎可以运行在所有操作系统上,性能稳定;配置相对复杂,自身无法解析动态网页。
* nginx:高性能、高并发的网站和反向代理服务器,也可做邮件代理,阿里再开发tengine应用于天猫和淘宝。
* tomcat:java应用服务器,也是servlet容器,可以认为是Apache的扩展,可以独立运行,也可以和Apache合作。
Apache与nginx的区别:
* nginx:配置简洁、反向代理、负载均衡、静态数据处理能力是Apache3倍以上,消耗内存少。
* Apache:跨所有平台、支持通用网关接口(cgi)、支持多种动态网站语言(php,python,perl,java),模块组件比nginx多,运行稳定;配置复杂
所需安装包:
链接:https://pan.baidu.com/s/10obRMPE5_2YZEUurQV36Vg
提取码:ltou
1)编写安装apache脚本:
[root@localhost ~]# vim httpd.sh
#!/bin/bash
cd /root
tar zxf apr-1.5.2.tar.gz
cd apr-1.5.2/
./configure --prefix=/usr/local/apr
make && make install
cd ..
tar zxf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4/
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
cd ..
tar zxf zlib-1.2.8.tar.gz
cd zlib-1.2.8/
./configure --prefix=/usr/local/zlib
make && make install
cd ..
tar zxf pcre-8.39.tar.gz
cd pcre-8.39/
./configure --prefix=/usr/local/pcre
make && make install
cd ..
tar zxf openssl-1.0.1u.tar.gz
cd openssl-1.0.1u/
./config -fPIC --prefix=/usr/local/openssl enable-shared
make && make install
mv /usr/bin/openssl /usr/bin/openssl.1.0.1e
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
cd ..
tar zxf httpd-2.4.23.tar.gz
cd httpd-2.4.23/
./configure --prefix=/usr/local/http-2.4.23 --enable-so --enable-cgi --enable-cgid --enable-ssl --with-ssl=/usr/local/openssl --enable-rewrite --with-pcre=/usr/local/pcre --with-z=/usr/local/zlib --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-fcgi --enable-expires --enable-deflate
make && make install
ln -s /usr/local/http-2.4.23/bin/* /usr/local/bin/
echo "ServerName www.example.com:80" >> /usr/local/http-2.4.23/conf/httpd.conf
/usr/local/http-2.4.23/bin/apachectl start
cp /usr/local/http-2.4.23/bin/apachectl /etc/init.d/httpd
systemctl daemon-reload
systemctl enable httpd
systemctl start httpd
2)查看httpd模块
* httpd -V \\查看版本和已装模块
* httpd -l \\只查看静态编译模块
* httpd -M \\查看所有模块
3)MPM(Multi Process Modules):多进程处理模块
负责实现网络监听、请求的处理等功能,目的为了在不同的平台上实现最优化的性能和稳定性。
操作系统平台 MPM
BeOS beos
NetWare mpm_netware
OS/2 mpm_os2
linux prefork、worker、event
Windows mpm_winnt
4)apache三种工作模式
prefork模式:
非线程、预生成进程型MPM,一个子进程同一时间点仅能处理一个用户请求,根据并发请求数动态调整子进程
* 优点:稳定;
* 缺点:慢,占用资源,不适用于高并发场景
worker模式:
线程化、多进程型MPM,每个进程可生成多个线程,每个线程处理一个请求,缺点:长连接,资源容易被占用
* 优点:相比prefork 占用的内存较少,可以同时处理更多的请求;
* 缺点:使用keep-alive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生)。
event模式:
worker的改进版,使用监控线程处理长连接出现的资源占用问题
* 优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。
* 缺点:没有线程安全控制。
5)Apache主配置文件
[root@localhost conf]# vim /usr/local/http-2.4.23/conf/httpd.conf
注:如果想要使用三种模式的任意一种需要在主配置文件中去掉想用模式的注释其余两个需加上注释。。。
6)修改mpm配置文件
这里只是简单介绍了event模式
[root@localhost ~]# vim /usr/local/http-2.4.23/conf/extra/httpd-mpm.conf
<IfModule mpm_event_module>
StartServers 3 #apache 启动时候默认开始的子进程数
MinSpareThreads 75 #最小空闲数量的工作线程
MaxSpareThreads 250 #最大空闲数量的工作线程
ThreadsPerChild 25 #每个子进程产生的线程数量
MaxRequestWorkers 400 #允许同时的最大接入请求数量
MaxConnectionsPerChild 0 #每个子进程可处理的请求数
</IfModule>
7)使用ab命令进行压力测试
yum -y install httpd-tools
ab -c 160 -n 10000 http://192.168.1.1/index.html
使用ab压力测试命令进行160人并发访问,发出10000个请求。
语法
ab(选项)(参数)
选项
-A:指定连接服务器的基本的认证凭据;
-c:指定一次向服务器发出请求数;
-C:添加cookie;
-g:将测试结果输出为“gnuolot”文件;
-h:显示帮助信息;
-H:为请求追加一个额外的头;
-i:使用“head”请求方式;
-k:激活HTTP中的“keepAlive”特性;
-n:指定测试会话使用的请求数;
-p:指定包含数据的文件;
-q:不显示进度百分比;
-T:使用POST数据时,设置内容类型头;
-v:设置详细模式等级;
-w:以HTML表格方式打印结果;
-x:以表格方式输出时,设置表格的属性;
-X:使用指定的代理服务器发送请求;
-y:以表格方式输出时,设置表格属性。
参数
主机:被测试主机。