LAMP之apache模式

LAMP常见问题:
#Apache
1、Apache模式:prefork / worker
prefork: 大多数WEB程序均能支持
worker: 需要了解WEB是否支持多进程多线程


线程模式:会消耗多一些的内存和CPU;使用多个子进程,性能受限于物理内存。
#可优化选项:将MaxClients设置大一些、Serverlimit设置大一些
<IfModule mpm_prefork_module>
ServerLimit 10000  #最大的可接受的线程数
StartServers 5      #启动的默认子进程
MinSpareServers 60 #空闲子进程的最小数量
MaxSpareServers 100 #最大的空闲子进程
MaxClients 256   #同一时刻的并发数量
MaxRequestsPerChild 0 #每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达后停止连接
</IfModule>   

多进程多线程模式:使用多个子进程,每个子进程会有多个线程!能接受海量请求!
#控制每个子进程允许建立的线程数的 ThreadsPerChild指令,和控制允许建立的总线程数的MaxClients指令。
<IfModule mpm_worker_module>
StartServers 2  #服务器启动时建立的子进程
MaxClients 150  #允许服务的最大请求数量
MinSpareThreads 25 #最小的预留线程
MaxSpareThreads 75 #最大的预留线程
ThreadsPerChild 25 #每个子进程常驻的执行数量
MaxRequestsPerChild 0 #每个子进程允许服务的数量。达到这个限制后,子进程会停止;为0时永不停止。
</IfModule>
MaxRequestsPerChild设置成非零值有两个好处:
1.可以防止(偶然的)内存泄漏无限进行,从而耗尽内存。
2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
注意对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。

#prefork和worker模式的比较
prefork模式使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。
#在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。

worker模式使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起”死掉”.由于线程共享内存空间,所以一个程序在运行时必须被系统识别为”每个线程都是安全的”。

#总的来说,prefork方式速度要稍高于worker,然而它需要memory资源也稍多于woker。

1、LAMP常见的优化内容:
注释LoadMoule指令中不要的模块。
#注释一些不用的认证模块 
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule authn_alias_module modules/mod_authn_alias.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#比如:需要在~/username/下调试php
#LoadModule userdir_module modules/mod_userdir.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so

#DirectoryIndex index*,不要使用通配符,全用完整列表,如:DirectoryIndex index.cgi index.pl index.shtml index.html。当然,最少好些,明确的指定设置文件列表,放在最前最合理。

#使用.htaccess的配置文件

#启用了持久链接Keepalive,这样子进程将保持忙碌状态以等待被打开连接上的新请求。如果开启KeepAliveTimeout的默认值被设置为5 秒。最好不要大于60秒

#禁用日志
写入日志信息是一个很花费时间的工作,尽管Apache保持日志文件的打开状态以节省打开文件的时间,但仍然得花费不少的时间。如果没有必要存储日志信息,你可以关闭这个选项以节省出更多的处理器时间,只需要在设置文件中把日志那一行注释掉就可以关掉它。当然,实在需要,最要加入另一个单盘来管理日志存储.

#优化动态内容
    动态内容可能是所有WEB服务器中最消费时间的部分,特别是使用CGI的时候,一个简单的程序都可能会把响应时间增加好几秒。
    使用基于脚本的方案的一大好处是它们在Apache里装入了解释器,这就减少了执行时再装入解释器的时间,一些方案还把解析过的脚本缓存起来,这样下一次遇到同样的请求就可以直接执行而无需再次解析。当然也可以应用的服务分离,象使用php的fastcgi来在后面跑,前面给Web服务器.

#关掉的服务(这个好象谁都明白),apmd,autofs,cups,hpoj.isdn,pcmcia,rhnsd,sendmail,xfs(字体服务)

打开重用TCP/IP中的time-wait套接
sysctl -w net.ipv4.tcp_tw_reuse=1
启动TIME-WAIT 套接字状态的快速循环功能
sysctl =w net.ipv4.tcp_tw_recycle=1

我们调优常常要查看httpd进程数(即prefork模式下Apache能够处理的并发请求数):
#ps -ef | grep httpd | wc -l

出现的结果,就是当前Apache能够处理的多少个并发请求,这个值Apache根据负载情况自动调.
查看Apache的并发请求数及其TCP连接状态:
#netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

返回结果示例:
LAST_ACK 5
SYN_RECV 30
ESTABLISHED 1597
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057
其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。

状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

关于伪静态:---->它的最终目的是为了让搜索引擎收录它;因为搜索引擎喜好静态页面!

通常用于动态网站,将动态连接转换成临时的静态连接,相对而言会消耗CPU,使用的是perl正规实现
使用的方法:
  首先是加载加载Rewrite模块:

打开Apache—>conf—>httpd.conf文件
查找到行:#LoadModule rewrite_module modules/mod_rewrite.so
去掉前边的“#”改为:LoadModule rewrite_module modules/mod_rewrite.so
或者直接在文档中加上此行,但是注意千万不要带上“#”号。

然后找到下边几行:
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
把上述AllowOverride 替换成All。
其目的是允许在任何目录中使用“.htaccess”文件。
好了,配置结束,重新启动下Apache就可以了。

总结:关于Apache,用于运行要求稳定性高的Web服务器,对一些要求速度快的应用可以考虑使用轻量级的Web服务器。

#关于apache的代理配置:mod_proxy,反向代理!
#Apache+Tomcat主要有三种办法实现: mod_jk, mod_proxy和ajp_proxy。mod_jk是比较专门针对Tomcat的方法,通过AJP协议连接Tomcat,mod_proxy不止可以连接Tomcat,只要是HTTP应用都可以进行反向代理。

目前mod_proxy有3种负载均衡算法:
1. Request Counting(我猜是Round-robin), lbmethod=byrequests
2. Weighted Traffic Counting(这个是按权重,此例也是用此算法), lbmethod=bytraffic
3. Pending Request Counting(从apche文档来看,应该是按负载量,也就是往负载少的派发新请求).

在实际生产环境,不少朋友认为mod_proxy性能不好!推荐使用mod_jk

我想搭一个案子:
Tomcat+Apache+mod_jk+memcache

你可能感兴趣的:(apache,lamp,mod_jk,worker,prefork)