2.4.7 文件操作的优化
下面介绍文件操作的优化配置项。
(1)sendfile系统调用
语法:sendfile on|off;
默认:sendfile off;
配置块:http、server、location
可以启用Linux上的sendfile系统调用来发送文件,它减少了内核态与用户态之间的两次内存复制,这样就会从磁盘中读取文件后直接在内核态发送到网卡设备,提高了发送文件的效率。
(2)AIO系统调用
语法:aio on|off;
默认:aio off;
配置块:http、server、location
此配置项表示是否在FreeBSD或Linux系统上启用内核级别的异步文件I/O功能。注意,它与sendfile功能是互斥的。
(3)directio
语法:directio size|off;
默认:directio off;
配置块:http、server、location
此配置项在FreeBSD和Linux系统上使用O_DIRECT选项去读取文件,缓冲区大小为size,通常对大文件的读取速度有优化作用。注意,它与sendfile功能是互斥的。
(4)directio_alignment
语法:directio_alignment size;
默认:directio_alignment 512;
配置块:http、server、location
它与directio配合使用,指定以directio方式读取文件时的对齐方式。一般情况下,512B已经足够了,但针对一些高性能文件系统,如Linux下的XFS文件系统,可能需要设置到4KB作为对齐方式。
(5)打开文件缓存
语法:open_file_cache max=N[inactive=time]|off;
默认:open_file_cache off;
配置块:http、server、location
文件缓存会在内存中存储以下3种信息:
❑文件句柄、文件大小和上次修改时间。
❑已经打开过的目录结构。
❑没有找到的或者没有权限操作的文件信息。
这样,通过读取缓存就减少了对磁盘的操作。该配置项后面跟3种参数。
❑max:表示在内存中存储元素的最大个数。当达到最大限制数量后,将采用LRU(LeastRecently Used)算法从缓存中淘汰最近最少使用的元素。
❑inactive:表示在inactive指定的时间段内没有被访问过的元素将会被淘汰。默认时间为60秒。
❑off:关闭缓存功能。
例如:
open_file_cache max=1000 inactive=20s;
(6)是否缓存打开文件错误的信息
语法:open_file_cache_errors on|off;
默认:open_file_cache_errors off;
配置块:http、server、location
此配置项表示是否在文件缓存中缓存打开文件时出现的找不到路径、没有权限等错误信息。
(7)不被淘汰的最小访问次数
语法:open_file_cache_min_uses number;
默认:open_file_cache_min_uses 1;
配置块:http、server、location
它与open_file_cache中的inactive参数配合使用。如果在inactive指定的时间段内,访问次数超过了open_file_cache_min_uses指定的最小次数,那么将不会被淘汰出缓存。
(8)检验缓存中元素有效性的频率
语法:open_file_cache_valid time;
默认:open_file_cache_valid 60s;
配置块:http、server、location
默认为每60秒检查一次缓存中的元素是否仍有效。