分类: LINUX
2010-08-19 17:10:39
cache模块每个进程占用一个单独的内存空间存储cache内容。如用此模块建议用worker模式,减少进程数量,增加线程数量。
apache编译的时候没有启用cache功能,默认情况下,apache完以后,是不允许被cache的。访问量大增,需要cache功能,重新编译:
[-]#/usr/local/apache2/bin/apxs -cia mod_cache.c cache_util.c cache_cache.c cache_storage.c cache_pqueue.c cache_hash.c
和mod_disk_cache.c
mod_mem_cache.c
会在/usr/local/apache2/modules下自动生成mod_cache.so,mod_disk_cache.so和mod_mem_cache.so
httpd.conf配置以及详解如下
LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
CacheForceCompletion 100
CacheDefaultEXPire 3600
CacheMaxExpire 86400
CacheLastModifiedFactor 0.1
CacheEnable disk /
CacheRoot “/var/cache/mod_proxy”
CacheSize 327680
CacheDirLength 4
CacheDirLevels 5
CacheGcInterval 4
CacheEnable mem /
MCacheSize 8192
MCacheMaxObjectCount 10000
MCacheMinObjectSize 1
MCacheMaxObjectSize 51200
####################################################
参考数据
mod_cache:
CacheEnable: 启动 mod_cache,其后接两个参数。第一个参数指定快取的种类,应设为 mem (内存快取) 或 disk (磁盘高速缓存) 之其一;第二个参数指定使用快取的 URI 路径,如果对整个网XP (或虚拟主机) 进行快取,简单指定为根目录(/) 即可。
CacheForceCompletion: 这个值指定当 HTTP request 被取消时,内容的产生动作要完成的百分比;预设是 60(%)。
CacheDefaultExpire: 指定快取的预设过期秒数;默认值是一小时(3600)。
CacheMaxExpire: 指定快取最大的过期秒数;默认值是一天(86400)。
CacheLastModifiedFactor: 用来从响应里 Last Modified 信息算出expir date。计算方式是:expire period (过期时距) = 最后更新后至今的时间间距 *CacheLastModifiedFactor而expire date = 目前时间 + expire period不过无论如何,过期时间不能超过CacheMaxExpire 的设定值。
mod_disk_cache:
CacheRoot: 指定磁盘高速缓存所使用的目录。
CacheSize: 以 KByte 为单位指定快取使用的磁盘空间大小。
CacheDirLength: 指定各目录 (的键值) 存在于快取阶层 (hierarchy)中所使用的字符数。
CacheDirLevels: 指定快取的目录层数; CacheDirLength 与此CacheDirLevels设定值相乘不能超过 20。
CacheGcInterval: 指定收垃圾 (Garbage Collection) 的动作间隔时间;单位是小时。不过根据 Apache2 文件,这个指令还 没有被实作 。
mod_mem_cache:
MCacheSize: 以 KByte 为单位指定快取使用的内存空间大小。
MCacheMaxObjectCount: 指定快取对象数目的最大值;默认值是1009。
MCacheMaxObjectSize: 指定最大可快取对象的大小,单位是Byte;默认值是10000 (Bytes)。
MCacheMinObjectSize: 指定最小可快取对象的大小,单位是Byte;默认值是 0 (Bytes)。
配apache mod_cache 后 httpd -k start
apache出现以下信息:
Cannot load /usr/local/apache/modules/mod_cache.so into server: /usr/local/apache/modules/mod_cache.so: undefined symbol: cache_generate_key_default
正规解决方案:
modules/cache下面有很多的.c文件,大致用途如:
mod_cache.c 编译得到mod_cache.so 主要用来控制整个apache的cache功能。
mod_file_cache.c,mod_mem_cache.c,mod_disk_cache.c这个三个文件编译后得到各自的cache支持模块。
mod_cache.c还需要其他的程序来进行工作,包括cache_*.c这些文件。因此apxs动态加载一个模块的时候,需要把这些文件和mod_cache.c 一起编译:/usr/local/apache2/bin/apxs -cia mod_cache.c cache_util.c cache_cache.c cache_storage.c cache_pqueue.c cache_hash.c
For a quick test of the apxs mechanism you can create a sample Apache module template plus a corresponding Makefile via:
$ apxs -g -n foo
Creating [DIR] foo
Creating [FILE] foo/Makefile
Creating [FILE] foo/modules.mk
Creating [FILE] foo/mod_foo.c
Creating [FILE] foo/.deps
$ _
Then you can immediately compile this sample module into a shared object and load it into the Apache server:
$ cd foo