Nginx内存与磁盘资源的分配

Posted 红雨Python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx内存与磁盘资源的分配相关的知识,希望对你有一定的参考价值。

    本文介绍nginx静态web服务器配置中的内存与磁盘资源的分配,即处理请求时,内存和磁盘资源的分配配置项。


1.HTTP包体保存在磁盘中

语法:client_body_in_file_only on|clean|off;

默认:client_body_in_file_only off;

配置块:server、http、location

当配置为off时,HTTP包体不会保存在磁盘中。非off时,用户请求中的HTTP包体将会保存在磁盘文件中(即使为0字节),当请求结束时,配置为on的话,该文件将会被保留。如果是clean的话,请求结束时,就会删除该文件。


2.HTTP包体尽量写入一个buffer中

语法:client_body_in_single_buffer on|off;

默认:client_body_in_single_buffer off;

配置块:http、server、location

用户请求的HTTP包体在client_body_buffer_size内存大小之内时,一概保存在buffer中。


3.存储HTTP头部buffer内存大小

语法:client_header_buffer_size size;

默认:client_header_buffer_size 1K;

配置块:http、server

正常情况下Nginx接收用户请求中HTTP header部分时分配的内存大小,当请求中的HTTP header部分超过这个大小的时候,large_client_header_buffers的配置将会生效。


4.存储超大HTTP头部内存大小

语法:large_client_header_buffers number size;

默认:large_client_header_buffers 48K;

配置块:http、server

该配置项定义了Nginx接收一个超大的HTTP头部请求个数与大小。如果HTTP请求行的大小超过上面单个buffer,将会返回414请求uri太大。请求中一般会有多个header,如果存在header大小超过单个buffer,将会返回400非法请求。同时请求行与请求头的总和不能超过buffer数*buffer大小。


5.存储HTTP包体内存大小

语法:client_body_buffer_size size;

默认:client_body_buffer_size 8K/16K;

配置块:http、server、location

该配置定义了Nginx接收HTTP包体的内存缓冲区大小。


6.HTTP包体临时存储路径

语法:client_body_temp_path dir-path[level1[level2[level3]]]

默认:client_body_temp_path client_body_temp;

配置块:http、server、location

该配置设置HTTP包体存储的临时目录。在接受HTTP包体时,如果包体大小大于存储HTTP包体内存大小,将会以一个递增整数命名保存在指定的历史路径下,会根据等级设置多层目录。


7.connection_pool_size

语法:connection_pool_size size;

默认:connection_pool_size 256;

配置块:http、server

Nginx会为每一个TCP连接分配一个内存池,该配置就是内存池的初始大小,用于减少内核对于小块内存的分配次数。配置太大会增加服务器内存消耗,太小会增加服务器内存分配次数。


8.请求内存池

语法:request_pool_size size;

默认:request_pool_size 4K;

配置块:http、server

前面一个是连接的初始内存池,这个是一个请求的初始内存池。TCP连接关闭会销毁掉连接内存池,请求结束会销毁请求内存池。


以上是关于Nginx内存与磁盘资源的分配的主要内容,如果未能解决你的问题,请参考以下文章

哪些内存页面分配给 Linux RAM 磁盘中的文件

进程与线程

Linux buffer/cache异同

Yarn知识

#yyds干货盘点#关于动静态缓存的一些Tips

磁盘空闲管理