/ 中存储网

Apache和Nginx服务器如何优化效率和性能

2014-02-22 10:18:01 来源:ITJS.CN
nginx 重要配置文件

80 --- 9000

88 --- 9001

worker_processes  16;

worker_rlimit_nofile 100000;

worker_connections  65535;

charset utf-8;

系统优化:

打开文件数量应该与这个有关

/etc/security/limits.conf

* soft nofile 65535

* hard nofile 65535

* soft nproc 65535

* hard nproc 65535

cat /proc/30835/limits

 ulimit -a

修改后重新登录即可生效

apache优化:

top -d 1 | grep httpd

编译mod_proxy.so.

[[email protected] httpd-2.2.4]# cd modules

[[email protected] modules]# /usr/local/apache/bin/apxs -c -i mod_proxy.c proxy_util.c

/usr/local/apache/conf/httpd.conf

打开

# Server-pool management (MPM specific)

Include conf/extra/httpd-mpm.conf

/usr/local/apache/conf/extra/httpd-mpm.conf

MaxClients n1

nSpareThreads n2

MaxSpareThreads n3

ThreadsPerChild n4

MaxRequestsPerChild n5

实例:

<IfModule mpm_prefork_module>

ServerLimit         10000

StartServers          256

MinSpareServers       64

MaxSpareServers      192

MaxClients          10000

MaxRequestsPerChild   0

</IfModule>

当Apache启动时,Apache会启动StartServers个空闲进程同时准备接收处理请求,当多个请求到来时,StartServers进行会越来越少,当空闲进程减少到MinSpareServers个时,Apache为了能够继续有充裕的进程处理请求,它会再启动StartsServers个进程备用,这样就大大减少了请求队列等待的可能,使得服务效率提高,这也是为什么叫做Pre-fork的原因;让我们继续跟踪Apache的工作,我们假设Apache已经启动了200个进程来处理请求,理论上来说,此时Apache一共有205个进程,而过了一段时间,假设有100个请求都得到了Apache的响应和处理,那么此时这100个进程就被释放成为空闲进程,那么此时Apache有105个空闲进程。而对于服务而言,启动太多的空闲进程时没有任何意义的,反而会降低服务器的整体性能,那么Apache真的会有105个空闲进程么?当然不会!实际上Apache随时在检查自己,当发现有超过MaxSpareServers个空闲进程时,则会自动停止关闭一些进程,以保证空闲进程不过过多。说到这里,用户应该对Apache的工作方式有了一定的了解,如果想获得更多更详细的说明请参阅Apache手册文档。

测试apache配置是否正确

./apachectl configtest

修改/usr/local/apache/conf/httpd.conf

添加:

hostnamelookups off

timeout 5

keepalive on

maxkeepaliverequests 1000

keepalivetimeout 10

serversignature off

servertokens prod

默认情况下,很多apache安装时会显示版本号及操作系统版本,甚至会显示服务器上安装的是什么样的apache模块。这些信息可以为黑客所用,并且黑客还可以从中得知你所配置的服务器上的很多设置都是默认状态。

所以,请加入如下两条:

serversignature off

servertokens prod

serversignature 出现在apache所产生的像404页面、目录列表等页面的底部。

servertokens目录被用来判断apache会在server http响应包的头部填充什么信息。

如果把servertokens设为prod,

那么http响应包头就会被设置成:server:apache

#禁止在内存中缓冲日志(mod_log_config)

BufferedLogs Off

修改:

options -followsymlinks

符号连接:当打开这个选项时,apache将检查每个请求中是否包含对符号连接的引用,

这将对请求中包含的每个路径调用一次lstat()系统调用。除非你准备使用符号连接,

否则用 options -followsymlinks 来关掉它。

php.ini 优化

修改部分

max_execution_time    一个脚本可使用多少 CPU 秒     30

max_input_time    一个脚本等待输入数据的时间有多长(秒)    60

display_errors = Off

error_log = /var/log/php_log

memory_limit    在被取消之前,一个脚本可使用多少内存(字节)    32M

session.save_path = "/tmp"    去掉注释

output_buffering    数据发送给客户机之前,有多少数据(字节)需要缓存    4096

output_buffering = 0

; 输出缓冲区大小(字节)。建议值为4096~8192。

; 输出缓冲允许你甚至在输出正文内容之后再发送HTTP头(包括cookies)。

; 其代价是输出层减慢一点点速度。

; 设置输出缓冲可以减少写入,有时还能减少网络数据包的发送。

; 这个参数的实际收益很大程度上取决于你使用的是什么Web服务器以及什么样的脚本。

disable_functions = passthru,exec,shell_exec,system,phpinfo,get_cfg_var,popen,chmod

参考资料

http://www.ibm.com/developerworks/cn/linux/l-tune-lamp-2.html

http://lamp.linux.gov.cn/PHP/php-5_2-ini.html

test

ab -n 2000 -c 2000 http://socialmovie.innisfree.cn/main_innisfree.php

参考文章

http://blog.csdn.net/gulaizi/article/details/4012049

http://fanqiang.chinaunix.net/app/web/2007-02-08/5087.shtml

http://bbs.linuxtone.org/thread-40-1-1.html

apache缓存

http://bbs.linuxtone.org/forum.php?mod=viewthread&tid=1670

--enable-cache          dynamic file caching

  --enable-disk-cache     disk caching module

  --enable-mem-cache      memory caching module

缓存动态内容

<IfModule mod_cache.c>

CacheForceCompletion 100

CacheDefaultExpire 3600

CacheMaxExpire 86400

CacheLastModifiedFactor 0.1

<IfModule mod_disk_cache.c>

CacheEnable disk /

CacheRoot /home/wwwroot/

CacheSize 327680

CacheDirLength 4

CacheDirLevels 5

CacheGcInterval 4

</IfModule>

<IfModule mod_mem_cache.c>

CacheEnable mem /

MCacheSize 8192

MCacheMaxObjectCount 10000

MCacheMinObjectSize 1

MCacheMaxObjectSize 51200

</IfModule>

</IfModule>

参数的解释

mod_cache.c

CacheEnable: 启动mod_cache其后接两个参数。第一个参数指定快取的种类,应设为mem(记忆体快取)或disk(磁碟快取)之其一;第二个参数指定使用快取的URI路径,如果对整个网站(或虚拟主机)进行快取,简单指定为根目录(/)即可。

CacheForceCompletion: 指定当 HTTP request 被取消时,内容的产生动作要完成的百分比;预设是 60(%)。

CacheDefaultExpire:   指定快取的预设过期秒数;预设值是一小时 (3600)。

CacheMaxExpire:       指定快取最大的过期秒数;预设值是一天 (86400)。

CacheLastModifiedFactor: 用来从回应里 Last Modified 资讯算出 expire date。

mod_disk_cache.c

CacheRoot:       指定磁碟快取所使用的目录。

CacheSize:       指定快取使用的磁碟空间大小;以 KByte 为单位。

CacheDirLength: 指定各目录存在于快取?层(hierarchy) 中所使用的字元数。

CacheDirLevels: 指定快取的目录层数; CacheDirLength,acheDirLevels设定值相乘不能超过 20。

CacheGcInterval: 指定收垃圾 (Garbage Collection) 的动作间隔时间;单位是小时。Apache2 中这个指令还?有被实在。

mod_mem_cache.c

MCacheMaxObjectCount     最大缓存对象数;默认值1009。

MCacheMaxObjectSize      缓存允许的最大文档大小;默认值10000。

MCacheMaxStreamingBuffer 内存中允许缓冲的最大流式响应字节长度;默认值100000与MCacheMaxObjectSize中的小者。

MCacheMinObjectSize      允许缓存的最小文档大小;默认值 0。

MCacheRemovalAlgorithm   定义在需要时哪个文档被移出缓存的算法;默认值 LRU|GDSF。

MCacheSize               允许使用的最大内存量;以KB为单位默认值100。