详述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) 描述每 个请求处理时间的分布情况

测试实例

[[email protected] 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 requests
Completed 4000 requests
Completed 6000 requests
Completed 8000 requests
Completed 10000 requests
Completed 12000 requests
Completed 14000 requests
Completed 16000 requests
Completed 18000 requests
Completed 20000 requests
Finished 20000 requests

Server Software:        Apache
Server Hostname:        www.kgc.com
Server Port:            80

Document Path:          /index.html
Document Length:        68 bytes

Concurrency Level:      500
Time taken for tests:   1.237 seconds
Complete requests:      20000
Failed requests:        0
Total transferred:      7300000 bytes
HTML transferred:       1360000 bytes
Requests 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] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    5  60.3      1    1004
Processing:     0   14  49.6      6     808
Waiting:        0   12  49.5      5     808
Total:          1   19  78.2      8    1201

Percentage 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模式
[[email protected] bin]# ./httpd -l       //查看apache当前工作模式
Compiled in modules:
core.c
mod SO.c
http_ core.c
event.c

event作模式介绍

  • eventApache最新的工作模式,它和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
    </lfModule>
  • 参数说明
    参数 说明
    StartServers 服务启动时初始的进程数,默认3
    MinSpare Threads 最小的空闲子进程数,默认75
    MaxSpare Threads 最大的空闲子进程数,默认250
    ThreadsPerChild 每个子进程产生的线程数量,默认是25
    MaxRequestWorkers 限定同一时间内客户端最大接入的请求数量,默认是400
    MaxConnectionsPerChild 每个子进程在其生命周期内允许最大的请求数量,如果请求总数已经达到这个数值,子进程将会结束,如果设置为0,子进程将永远不会结束。将该值设置为非0值,可以防止运行PHP导致的内存泄露

event优化建议

  • 可根据生产环境进行调试,以确定合适参数
  • 优化参考
<IfModule mpm_event_module>
ServerLimit        1000
StartServers         20
MinSpareThreads          25
MaxSpareThreads          1200
ThreadsPerChild         50
MaxRequestWorkers         2000
MaxConnectionsPerChild     1000
</IfModule>

prefork作模式介绍

  • prefork是一个多路处理模块(MPM),实现了一个进程型的、预派生的web服务器,适合于没有线程安全库、需要避免线程兼容性问题的系统
  • 在要求每个请求相互独立的情况下具有很好的特性,若一个请求出现问题不会影响到其他请求
  • 具有很强的自我调节能力,只需要很少的配置指令进行调整就可以适合于企业应用要求
  • 最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以避免所需的内存超出物理内存的大小

prefork工作模式方式

  • 一个单独的控制进程(父进程)负责产生子进程,子进程用于监听请求并作出应答,因此在内存中会一直存在一些备用的(spare)或是空闲的子进程用3 F响应新的请求,可加快响应速度
  • 父进程通常以root身份运行,以便绑定80端口,子进程通常以一个低特权的用户运行,可通过配置项的UserGroup配置
  • 运行子进程的用户必须要对网站内容有读取权限,但是对其他资源必须拥有尽可能少的权限,以保证系统安全
  • 编译安装时没有指定工作模式,默认会使用prefork模式,可用httpd -l查看

prefork参数讲解

  • httpd-mpm.conf配置文件中,以下是prefork模块的定义

    < IfModule mpm_prefork_module>
    StartServers        20
    MinSpareServers      10
    MaxSpareServers       50
    MaxClients           150
    MaxRequestsPerChild   0
    </lfModule>
  • 参数说明
参数 说明
ServerLimit 最大进程数
StartServers 启动的时候创建的进程数量
MinSpareServers 最少空闲进程
MaxSpareServers 最多空闲进程
MaxClients 最多创建多少个子进程用来处理请求
MaxRequestsPerChild 每个进程处理的最大请求数,达到请求数,进程即被销毁,如果设置为0,子进程永远不会结束

prefork优化建议

  • 可根据生产环境进行调试,以确定合适参数
  • 优化参考
<IfModule mpm_prefork_module>
   ServerLimit      1000
   StartServers     10
   MinSpareServers    10
   MaxSpareServers    30
   MaxClients        1000
   MaxRequestsPerChild   5000
</IfModule>

worker工作模式介绍

  • worker也是多路处理模块(MPM),使网络服务器支持混合的多线程多进程
  • 由于使用线程来处理请求,所以可以处理海量请求,而系统资源的开销小于基于进程的MPM
  • 但是也使用了多进程,每个进程又有多个线程,以获得基于进程的MPM的稳定性
  • 控制该MPM的最重要的指令是:控制每个子进程允许建立的线程数ThreadsPerChild指令和控制允许建立的总线程数的MaxClients指令

worker工作方式

  • 每个进程能够拥有的线程数量是固定的,服务器会根据负载情况增加或减少进程数量
  • 一个单独的控制进程(父进程)负责子进程的建立。每个子进程能够建立ThreadsPerChild数量的服务线程和一个监听线程,监听线程监听接入请求并将其传递给服务线程处理和应答
  • Apache总是会维持一个备用(spare)或是空闲的服务线程池,客户端无须等待新线程或新进程的建立即可得到服务
  • 父进程一-般都是以root身份启动,以绑定80端口;随后,Apache以较低权限的用户建立子进程和线程
  • UserGroup指令用于配置Apache子进程的运行用户。子进程要对网页内容拥有读权限,但应该尽可能限制权限

worker参数讲解

参数 说明
ServerLimit 最大进程数,默认值是"16"
ThreadLimit 每个子进程的最大线程数,默认值是“64”
StartServers 服务器启动时建立的子进程数,默认值是"3"
MaxClients 允许同时接受的最大接入请求数量(最大线程数量)
MinSpareThreads 最小空闲线程数默认值是"75"
MaxSpareThreads 设置最大空闲线程数。默认值是"250"
ThreadsPerChild 每个子进程建立的常驻的执行线程数。默认值是25
MaxRequestsPerChild 设置每个子进程在其生存期内允许伺服的最大请求数量。设置为"0",子进程将永远不会结束

worker优化建议

  • 优化时要根据企业网站情况进行调试
<IfModule mpm_worker_module>
   ServerLimit       40
   ThreadLimit        200
   StartServers        20
   MaxClients        1000
   MinSpareThreads      25
   MaxSpareThreads      100
   ThreadsPerChild       200
   MaxRequestsPerChild   1000
</IfModule>

Apache目录属性

  • 目录的权限设置使用&lt;Directory目录路径&gt;&lt;/Directory&gt;这对语句为主目录或虚拟目录设置权限
  • 它们是一对容器语句,必须成对出现,它们之间封装的是具体的设置目录权限语句,这些语句仅对被设置目录及其子目录起作用

目录属性参数

参数 作用
Options 设置在特定目录使用哪些特性
AllowOverride 允许存在于.htaccess文件中的指令类型
Require 设置目录的访问控制
Indexes 当用户访问该目录时,但没有指定要访问哪个文件,而且目录下不存在默认网页时,返回目录中的文件和子目录列表
MultiViews 内容协商的多重视图,Apache的一 个智能特性。当访问目录中不存在的对象时
ExecCGI 允许在该目录下执行CGI脚本
FollowSymLinks 在该目录下允许文件系统使用符号连接
Includes 允许服务器端包含功能
IncludesNoExec 允许服务器端包含功能,但禁止执行CGI脚本
All 包含除了MultiViews之外所有特性,如果没有Options语句,默认为All

优化建议

  • 企业配置举例

    • Options应该设为None,以防止目录上内容暴露出去,造成安全隐患
    • AllowOverride设为None,禁. 止使用.htaccess文件,而将目录访问控制放在主配置文件的&lt;Directory&gt;&lt;/Directory&gt;之间
    • 根据目录的企业需求设置好Require的控制对象,以控制客户端的访问

原文地址:https://blog.51cto.com/14473285/2448628

时间: 2024-09-29 02:29:45

详述Linux系统中Apache网页深入优化的相关文章

详述Linux系统中Apache网页与安全优化(二)

网页缓存 配置网页的缓存时间 通过mod_ expire模块配置Apache,使网页能在客户端浏览器缓存一段时间,以避免重复请求 启用mod_ expire模块后,会自动生成页面头部信息中的Expires标签和Cache-Control标签,从而降低客户端的访问频率和次数,达到减少不必要的流量和增加访问速度的目的 启用网页缓存功能步骤 查看是否安装mod_ expire模块 修改配置文件启用缓存功能 抓包测试 查看是否安装了mod_ expire模块 /usr/local/apache/bin/

详述Linux系统中Apache网页与安全优化(一)

Apache网页优化 Apache网页优化概述 在企业中,部署Apache后只采用默认的配置参数,会引发网站很多问题,换言之默认配置是针对以前较低的服务器配置的,以前的配置已经不适用当今互联网时代 为了适应企业需求,就需要考虑如何提升Apache的性能与稳定性,这就是Apache优化的内容 优化内容 配置网页压缩功能 工作模式的选择与参数优化 配置防盗链 配置隐藏版本号 ....... 网页压缩 gzip介绍 配置Apache的网页压缩功能,是使用gzip压缩算法来对网页内容进行压缩后再传输到客

详述Linux系统中搭建Nginx动静分离

Nginx动静分离介绍 Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术 针对PHP的动静分离 静态页面交给Nginx处理 动态页面交给PHP-FPM模块或Apache处理 在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式 反向代理原理 Nginx不仅能作为Web服务器,还具有反向代理.负载均衡和缓存的功能 Nginx通过proxy模块实现将客户端的请求代理至上游服务器,此时nginx与. 上游服务器的连接是通过ht

linux系统中apache虚拟目录配置

在搭建网站的时候,我们会经常在同一台服务器上面搭建多个站点,这时候就需要用到apache的虚拟机知识.下面就linux系统下apache虚拟目录的配置说简要说明: 1.源代码安装apache + PHP + MySQL(请查考我的博文lamp环境搭建): 2.在本地计算机的hosts文件加入如下行: 192.168.137.10 erp.100msh.com 192.168.137.10 mopadmin.100msh.com 然后cmd中 ping erp.100msh.com 检查是否网络通

详述Linux系统中搭建LNMP架构+Discuz论坛

LNMP架构解读 LNMP平台就是Linux.Ngnix.MySQL.PHP的组合架构,需要Linux服务器.MySQL 数据库.PHP解析环境 搭建Nginx服务 下载Nginx源码包 Nginx源码包下载 在Linux虚拟机中挂载存放源码包的目录 [[email protected] ~]# mount.cifs //192.168.100.10/lnmp /mnt/ //挂载目录 Password for [email protected]//192.168.100.10/lnmp: [[

详述Linux系统中Nginx虚拟主机的配置

Nginx虚拟主机应用 Nginx支持的虚拟主机有三种 基于域名的虚拟主机. 基于IP的虚拟主机 基于端口的虚拟主机 通过"server{}"配置段实现 本篇实验接着上一篇搭建Nginx服务继续搭建,前面Nginx的编译安装不在介绍 基于域名的虚拟主机 [[email protected] nginx-1.12.2]# mkdir -p /var/www/html/accp //递归创建accp网页站点目录 [[email protected] nginx-1.12.2]# mkdir

Linux系统中Apache服务的构建

下面给大家介绍一下Apache构架的操作方法,首先把宿主机上压缩包进行共享然后在用虚拟机进行扫描共享文件在虚拟机上创建一个挂载点,对扫描到的共享文件挂载挂载好之后,切换目录到挂载点下,会看到共享后的三个压缩包 然后依次进行解压缩这里解压第二个apr的压缩包解压第三个apr-util压缩包,然后为了是apr和apr-util能被httpd所使用,所以要复制apr和apr-util的软件包到httpd文件下然后使用yum仓库安装gcc和gcc-c++两个编译器 这里可以看到安装完成了 然后安装一些相

Linux系统中的文件传输优化

scp命令 scp在传输的时候,速率相对而言较慢,但不会加大磁盘输入输出的负载 rsync(远程同步) 准备实验素材在输入密码的时候也会加长时间加密:不用输入密码,直接进行生成如图所示的脚本,使进行三次操作,观察scp和rsync运行的时间rsync的用法 文件的归档压缩 原文地址:https://blog.51cto.com/14653135/2470709

字符界面优化Linux系统中的服务

优化Linux系统中的服务 实验环境 公司在文件服务器中新安装了RHEL 6操作系统,由于默认启动的服务程序较多,系统运行缓慢.现需要对系统服务进行适当优化,减少一些不必要的自启动服务,并设置系统在开机后直接进入字符模式. 需求描述 设置Linux系统每次开机后自动进入字符模式 使用ntsysv工具同时调整2.3.4.5运行级别中的服务状态,关闭下列服务:atd.Bluetooth.cups.ip6tables.iptables.mdmonitor.nfslock.rhnsd.rpcgssd.p