详述Linux系统中Apache网页深入优化
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,ab压力测试Apache自带压力测试工具ab,简单易用,且可以模拟各种条件对Web服务器发起测试请求ab工具可以直接在Web服务器本地发起测试请求,这对于需要了解服务器的处理性能至关重要,因为它不包括
千家信息网最后更新 2025年02月05日详述Linux系统中Apache网页深入优化
ab压力测试
- Apache自带压力测试工具ab,简单易用,且可以模拟各种条件对Web服务器发起测试请求
- ab工具可以直接在Web服务器本地发起测试请求,这对于需要了解服务器的处理性能至关重要,因为它不包括数据的网络传输时间以及用户PC本地的计算时间,从而可以通过观测各种时间指标判断Web服务器的性能,以便进行参数的优化调整
ab压力测试工具
- 在进行性能调整优化过程中,可用ab压力测试工具进行优化效果的测试
- 优化前先使用ab进行压力测试
- 优化后,重启服务,再使用ab进行压力测试
- 对比两次测试的结果,看优化效果是否明显
- 为了能更客观的评价web服务的性能,一般优化前后都要进行多次测试,取测试结果的平均值进行对比
ab工具使用
命令格式
ab [options] 网站网址
参数说明
-n、-c、-t、-v
示例
/usr/local/httpd/bin/ab -n5000 -c900 www.bt.com/index.html
在测试时要根据情况调整求总数与并发用户数
ab测试结果关键参数说明
参数 | 描述 |
---|---|
Server Software | http 响应数据的头信息 |
Server Hostname | 请求的url 中的主机名称 |
Server Port | web 服务器软件的监听端口 |
Document Path | 请求的url 根的绝对路径 |
Document Length | http 响应数据的正文长度 |
Concurrency Level | 并发的用户数 |
Time taken for tests | 所有这些请求被处理完成所花费的时间总和 |
Complete requests | 表示总请求数 |
Failed requests | 失败的请求总数 |
Total transferred | 请求的响应数据长度总和 |
Requests per second | 服务器的吞吐率,每秒处理的请求数 |
Time per request | 用户平均请求等待时间 |
Time per request | 每个请求实际运行时间的平均值 |
Percentage of the requests served within a certain time (ms) | 描述每 个请求处理时间的分布情况 |
测试实例
[root@localhost bin]# ab -n 20000 -c 500 www.kgc.com/index.html //使用命令测试This is ApacheBench, Version 2.3 <$Revision: 1807734 $>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/Licensed to The Apache Software Foundation, http://www.apache.org/Benchmarking www.kgc.com (be patient)Completed 2000 requestsCompleted 4000 requestsCompleted 6000 requestsCompleted 8000 requestsCompleted 10000 requestsCompleted 12000 requestsCompleted 14000 requestsCompleted 16000 requestsCompleted 18000 requestsCompleted 20000 requestsFinished 20000 requestsServer Software: ApacheServer Hostname: www.kgc.comServer Port: 80Document Path: /index.htmlDocument Length: 68 bytesConcurrency Level: 500Time taken for tests: 1.237 secondsComplete requests: 20000Failed requests: 0Total transferred: 7300000 bytesHTML transferred: 1360000 bytesRequests per second: 16169.67 [#/sec] (mean)Time per request: 30.922 [ms] (mean)Time per request: 0.062 [ms] (mean, across all concurrent requests)Transfer rate: 5763.60 [Kbytes/sec] receivedConnection Times (ms) min mean[+/-sd] median maxConnect: 0 5 60.3 1 1004Processing: 0 14 49.6 6 808Waiting: 0 12 49.5 5 808Total: 1 19 78.2 8 1201Percentage of the requests served within a certain time (ms) 50% 8 66% 9 75% 9 80% 10 90% 13 95% 17 98% 211 99% 406 100% 1201 (longest request)
Apache
工作模式
Apache
工作模式介绍
Apache
作为现今web服务器用的最广泛也是最稳定的开源服务器软件- 其工作模式有许多种,源码包安装httpd时可查看
httpd-mpm.conf
文件,该文件位于extra/conf
目录中 - 目前主要有两种模式:
event
模式、worker
模式prefork
模式
[root@apache1 bin]# ./httpd -l //查看apache当前工作模式Compiled in modules:core.cmod SO.chttp_ core.cevent.c
event
作模式介绍
event
是Apache
最新的工作模式,它和worker
模式很像,不同的是在于它解决了keep-alive
长连接的时候占用线程资源被浪费的问题event
工作模式在遇到某些不兼容的模块时,会失效,将会回退到worker
模式event
工作模式需要Linux
系统(Linux 2.6+)
对epoll
的支持,才能启用。需要补充的是HTTPS
的连接(SSL
)
event
工作方式
- 在
event
工作模式中,会有一些专门的线程用来管理这些keep-alive
类型的线程 - 当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放
- 这样,一个线程就能处理几个请求了,实现了异步非阻塞。这增强了在高并发场景下的请求处理
event
参数讲解
在
httpd-mpm.conf
配置文件中, 以下是prefork
模块的定义< IfModule mpm_event_module> StartServers 3 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 MaxRequestWorkers 400 MaxConnectionsPerChild 0
参数说明
参数
说明
StartServers
服务启动时初始的进程数,默认3 MinSpare Threads
最小的空闲子进程数,默认75 MaxSpare Threads
最大的空闲子进程数,默认250 ThreadsPerChild
每个子进程产生的线程数量,默认是25 MaxRequestWorkers
限定同一时间内客户端最大接入的请求数量,默认是400 MaxConnectionsPerChild
每个子进程在其生命周期内允许最大的请求数量,如果请求总数已经达到这个数值,子进程将会结束,如果设置为0,子进程将永远不会结束。将该值设置为非0值,可以防止运行PHP导致的内存泄露
event
优化建议
- 可根据生产环境进行调试,以确定合适参数
- 优化参考
ServerLimit 1000StartServers 20MinSpareThreads 25MaxSpareThreads 1200ThreadsPerChild 50MaxRequestWorkers 2000MaxConnectionsPerChild 1000
prefork
作模式介绍
prefork
是一个多路处理模块(MPM
),实现了一个进程型的、预派生的web
服务器,适合于没有线程安全库、需要避免线程兼容性问题的系统- 在要求每个请求相互独立的情况下具有很好的特性,若一个请求出现问题不会影响到其他请求
- 具有很强的自我调节能力,只需要很少的配置指令进行调整就可以适合于企业应用要求
- 最重要的是将
MaxClients
设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以避免所需的内存超出物理内存的大小
prefork
工作模式方式
- 一个单独的控制进程(父进程)负责产生子进程,子进程用于监听请求并作出应答,因此在内存中会一直存在一些备用的(
spare
)或是空闲的子进程用3 F响应新的请求,可加快响应速度 - 父进程通常以
root
身份运行,以便绑定80
端口,子进程通常以一个低特权的用户运行,可通过配置项的User
和Group
配置 - 运行子进程的用户必须要对网站内容有读取权限,但是对其他资源必须拥有尽可能少的权限,以保证系统安全
- 编译安装时没有指定工作模式,默认会使用
prefork
模式,可用httpd -l
查看
prefork
参数讲解
在
httpd-mpm.conf
配置文件中,以下是prefork
模块的定义< IfModule mpm_prefork_module>StartServers 20MinSpareServers 10MaxSpareServers 50MaxClients 150MaxRequestsPerChild 0
- 参数说明
参数 | 说明 |
---|---|
ServerLimit | 最大进程数 |
StartServers | 启动的时候创建的进程数量 |
MinSpareServers | 最少空闲进程 |
MaxSpareServers | 最多空闲进程 |
MaxClients | 最多创建多少个子进程用来处理请求 |
MaxRequestsPerChild | 每个进程处理的最大请求数,达到请求数,进程即被销毁,如果设置为0,子进程永远不会结束 |
prefork
优化建议
- 可根据生产环境进行调试,以确定合适参数
- 优化参考
ServerLimit 1000 StartServers 10 MinSpareServers 10 MaxSpareServers 30 MaxClients 1000 MaxRequestsPerChild 5000
worker
工作模式介绍
worker
也是多路处理模块(MPM
),使网络服务器支持混合的多线程多进程- 由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM
- 但是也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性
- 控制该MPM的最重要的指令是:控制每个子进程允许建立的线程数
ThreadsPerChild
指令和控制允许建立的总线程数的MaxClients
指令
worker工作方式
- 每个进程能够拥有的线程数量是固定的,服务器会根据负载情况增加或减少进程数量
- 一个单独的控制进程(父进程)负责子进程的建立。每个子进程能够建立
ThreadsPerChild
数量的服务线程和一个监听线程,监听线程监听接入请求并将其传递给服务线程处理和应答 Apache
总是会维持一个备用(spare
)或是空闲的服务线程池,客户端无须等待新线程或新进程的建立即可得到服务- 父进程一-般都是以
root
身份启动,以绑定80
端口;随后,Apache
以较低权限的用户建立子进程和线程 User
和Group
指令用于配置Apache
子进程的运行用户。子进程要对网页内容拥有读权限,但应该尽可能限制权限
worker
参数讲解
参数 | 说明 |
---|---|
ServerLimit | 最大进程数,默认值是"16" |
ThreadLimit | 每个子进程的最大线程数,默认值是"64" |
StartServers | 服务器启动时建立的子进程数,默认值是"3" |
MaxClients | 允许同时接受的最大接入请求数量(最大线程数量) |
MinSpareThreads | 最小空闲线程数默认值是"75" |
MaxSpareThreads | 设置最大空闲线程数。默认值是"250" |
ThreadsPerChild | 每个子进程建立的常驻的执行线程数。默认值是25 |
MaxRequestsPerChild | 设置每个子进程在其生存期内允许伺服的最大请求数量。设置为"0" ,子进程将永远不会结束 |
worker优化建议
- 优化时要根据企业网站情况进行调试
ServerLimit 40 ThreadLimit 200 StartServers 20 MaxClients 1000 MinSpareThreads 25 MaxSpareThreads 100 ThreadsPerChild 200 MaxRequestsPerChild 1000
Apache目录属性
- 目录的权限设置使用
<Directory目录路径>
和</Directory>
这对语句为主目录或虚拟目录设置权限 - 它们是一对容器语句,必须成对出现,它们之间封装的是具体的设置目录权限语句,这些语句仅对被设置目录及其子目录起作用
目录属性参数
参数 | 作用 |
---|---|
Options | 设置在特定目录使用哪些特性 |
AllowOverride | 允许存在于.htaccess 文件中的指令类型 |
Require | 设置目录的访问控制 |
Indexes | 当用户访问该目录时,但没有指定要访问哪个文件,而且目录下不存在默认网页时,返回目录中的文件和子目录列表 |
MultiViews | 内容协商的多重视图,Apache 的一 个智能特性。当访问目录中不存在的对象时 |
ExecCGI | 允许在该目录下执行CGI 脚本 |
FollowSymLinks | 在该目录下允许文件系统使用符号连接 |
Includes | 允许服务器端包含功能 |
IncludesNoExec | 允许服务器端包含功能,但禁止执行CGI 脚本 |
All | 包含除了MultiViews 之外所有特性,如果没有Options 语句,默认为All |
优化建议
- 企业配置举例
Options
应该设为None
,以防止目录上内容暴露出去,造成安全隐患AllowOverride
设为None
,禁. 止使用.htaccess
文件,而将目录访问控制放在主配置文件的<Directory>
和</Directory>
之间- 根据目录的企业需求设置好
Require
的控制对象,以控制客户端的访问
进程
线程
服务
模式
目录
参数
测试
服务器
处理
工作
最大
数量
文件
用户
控制
个子
时间
权限
空闲
配置
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
mysql数据库注册激活码
四川服务器维保云主机
数据库身份证号码取前四位
手机装卡后无法连接到服务器
四川人口管理系统软件开发
某外文全文数据库的多数期刊
互联网黑科技微信安卓
杨浦区一站式软件开发业务流程
怎么启动数据连接数据库
关于网络安全的班会主持稿
数据库访问频繁怎么设置
网络安全工程师渗透工程师
中国邮政软件开发岗
提取excel几列数据库
服务器系统软件
维护网络安全的技术和方法
数据库运行顺序
高级数据库系统技术支持
多媒体网络技术培训心得
服务器3206
学软件开发需要哪些费用
服务器数据保存按国家法律要求
人事管理系统服务器版
帝国备份 连不上数据库
丽水工业软件开发需要学什么
网络安全工程师渗透工程师
网络安全与信息化方向考研
ora 数据导入数据库失败
无锡加工软件开发价格
hp g8 服务器 配件 通用