LinuxCast Apache视频教程笔记

ps aux|grep httpd

apache主进程以root身份运行,apache子进程以apache用户运行。主进程的pid(进程id)保存在/etc/httpd/run/httpd.pid里。主进程用来控制子进程的,子进程才是真正处理请求的进程。

查看模块:
root@iZ23totlue9Z:~# httpd -M
Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
( ...)
 dir_module (shared)
 alias_module (shared)
 rewrite_module (shared)
 php5_module (shared)

查看静态编译的模块:
root@iZ23totlue9Z:~# httpd -l
Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  prefork.c

查看进程管理机制(MPM):
http -V 发现是prefork (默认)

prefork: 非线程,每个子进程每个时间只能处理一个请求,请求多的时候,主进程会控制自动增加子进程。优点是线程安全,效率较高
worker: 线程化,每个子进程会生成一些线程,让每个线程来处理每个请求。即用多线程的方式来处理多个请求。优点是子进程启动的少,资源占用少,缺点是效率较低

如果要修改MPM,就要重新编译apache

监控httpd进程:
watch -n 1 'ps aux|grep httpd'

然后在外部用ab对服务器做压力测试以观察httpd进程的变化:
以16的并发量,进行10000次请求
ab -c 16 -n 10000 http://192.168.1.10/index.html

可以看到apache开始增加子进程了,是按指数级增加的,请求结束后子进程会不断减少

在主配置文件 httpd.conf 里,有一个配置叫做prefork,里面就是设置允许最多多少子进程、开始启动多少子进程、最高允许并发量等
比如,可以设置增加最初启动多少子进程的数量,这样当请求数突然增加时,就不用花费启动子进程的时间,以提高性能



对网站做压力测试( 请不要在无线网络环境下进行测试,因为会不准 ):
查看内存:
root@iZ23totlue9Z:~# free -m
             total       used       free     shared    buffers     cached
Mem:           490        464         25          0         21         36
-/+ buffers/cache:        406         83
Swap:            0          0          0

查看CPU:
root@iZ23totlue9Z:~# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 45
Stepping:              7
CPU MHz:               2300.062
BogoMIPS:              4600.12
Hypervisor vendor:     Xen
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              15360K
NUMA node0 CPU(s):     0

测试硬盘性能:
root@iZ23totlue9Z:~# hdparm -t /dev/xvda1

/dev/xvda1:
 Timing buffered disk reads: 238 MB in  3.01 seconds =  79.15 MB/sec


先ping一下目标主机,查看延迟:
ping ip地址

测试带宽速度:
wget ip地址/test.zip

10的并发量
ab -c 10 -n 1000 ip地址/index.php

假设 request per seconds 为 7.5,表示每秒钟可以承受7.5次请求,那么一天可以承受: 7.5 * 3600 * 24 = 648000次针对该页面的请求

如果是针对静态网页的测试,会发现区别非常大,因为动态网页需要后台处理的过程,比较耗时间

使用top命令监控资源,RES项就是占用的内存

通常使用的是apache的php模块(mod_php)来解析php,而不是独立的php进程,所以访问量一上来,httpd进程消耗的资源陡增,因为既要处理请求,又要处理php代码的解析。

PHP加速器:
php是脚本语言,运行时才编译,而不是提前编译好,所以会慢。apache利用mod_php来解析/编译php代码,每次访问都要重新编译一次代码,消耗时间和资源,因此有必要在这里加一个编译结果的缓存,这就是php加速器的工作。
PHP加速器主要有三种: APC、eAccelerator、xCache, 相对最好的是eAccelerator ( http://eaccelerator.net/ )

下载eAccelerator,解压,cd进去后,phpize,然后./configure,然后make && make install
安装完毕后,可以通过php extension的方式配置eAccelerator,官方的github上有配置模版
在/etc/php.d/目录创建一个eaccelerator.ini 文件, 复制配置进去,这样就为这个扩展创建好了PHP配置文件

然后 mkdir /tmp/eaccelerator
    chmod 07777 /tmp/eaccelerator

重启apache,查看phpinfo()检查是否正确安装( ... with eAccelerator ...字样 )

安装完eAccelerator后,再次用ab来测试,查看request per second,看看是否提高了性能。之前没有eAccelerator时是7.5 #/s,现在可能是18.68 #/s。 (#表示次数)


你可能感兴趣的:(LinuxCast Apache视频教程笔记)