Apache的性能分析与调优
一、Apache的用途
在Web中间件中,除了Nginx外,另一个用得最多的中间件就是 Apache,Apache是一种开源网络服务器软件,主要用于托管网站和Web应用程序,具有广泛的应用场景和优势。
Apache几乎可以运行在所有的操作系统中,支持HTTP、SSL、Socket、FastCGI、SSO、负载均衡、服务器代理等众多功能模块,提供丰富的监控和日志记录功能,帮助跟踪服务器的性能、请求和错误信息,允许通过模块和配置文件进行高度自定义,满足特定需求和环境。在性能测试分析中发现,如果Apache使用不当,那么Apache有时候也可能会成为高并发访问的瓶颈。
以下简介Apache的性能调优的一些方式及监控方式
二、Apache的工作模式选择和进程数调优
Apache的工作模式主要是指Apache在运行时内存分配、CPU、进程以及线程的使用管理和请求任务的调度等。Apache比较稳定的工作模式有prefork模式、worker模式、event模式,这三种模式也是Apache经常使用的模式。
Apache默认使用的是prefork模式,一般可以在编译安装Apache时通过参数–with-mpm来指定安装后使用的工作模式
可以通过执行httpd -V命令来查看Apache当前使用的工作模式
可以根据应用场景自行配置相符合的工作模式
序号 | 工作模式 | 应用场景 | 备注 |
---|---|---|---|
1 | prefork模式 | prefork模式是Apache的默认工作模式,该模式非常适合于没有线程安全库而需要避免线程安全性问题的系统,采用非线程型的预派生方式来处理请求,处理过程是单进程和单线程的方式,不存在线程安全问题,但由于多进程,所以内存使用较大 解决了线程安全问题,但无法处理高并发请求的场景, | prefork模式会将请求放进队列中,一直等到有可用子进程请求才会被处理,很容易导致请求队列积压 |
2 | worker模式 | 该模式采用多进程和多线程相结合的混合模式来处理请求,每个子进程会创建多个线程,每个请求会分配给不同的线程处理,由于采用了多线程的处理方式,所以高并发下处理能力会更强,但是由于是多线程处理方式,所以这种模式下需要考虑线程安全问题 | |
3 | event模式 | 该模式在worker模式基础上,会有一些专门的线程来承担管理和分配线程的工作,通过这种方法解决了HTTP请求keep-alive长连接的时候占用线程资源被浪费的问题 | 当有真实请求过来时,将请求传递给服务器端可用的工作线程进行处理,处理完毕后又允许其释放资源 |
三、Apache的mod选择与调优
常见模块
四、Apache缓存调优
Apache要使用缓存,必须启用这四个缓存模块:
mod_cache
mod_disk_cache(硬盘缓存)
mod_file_cache
mod_mem_cache(内存缓存)
硬盘缓存及内存缓存依赖于mod_cach,基于硬盘缓存和物理内存缓存的缓存配置如下:
五、Apache的KeepAlive调优
HTTP请求中开启KeepAlive选项相当于长连接的作用,多次HTTP请求共用一个TCP连接来完成,这样可以节约网络和系统资源。一般开启KeepAlive适用于如下场景:
适用开启长连接:
(1)存在较多的静态资源(例如JS、CSS、图片等)需要访问
(2)存在并发请求非常大,频繁出现连接建立及连接关闭的情况
关闭长连接:服务器内存较少并且存在大量的动态请求或者文件访问
六、Apache的性能监控
Apache自身自带了状态监控页面,但是默认是关闭的,可以通过在httpd.conf中增加如下配置来打开监控页面
<location /server-status>
SetHandler server-status
Order Deny,Allow
Allow from all
增加上述配置后,然后就可以通过访问http://ip:port/server‐status来查看监控页面了
持续更新…
参考书籍《软件性能测试、分析与调优实践之路》
wuu~~又是学到东西的一天!
给自己点个赞!!!