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秒检查一次缓存中的元素是否仍有效。