减少nginx引起的IO

Mat*_*Hui 1 nginx io

我有很多空闲内存,但我的 IO 总是 100%util 或非常接近。有什么方法可以通过使用更多 RAM 来减少 IO?我的 iotop 显示了具有最高 io 速率的 nginx 工作进程。这是一个文件服务器,为 1mb 到 2gb 的文件提供服务。这是我的 nginx.conf

#user  nobody;
worker_processes  32;
worker_rlimit_nofile 10240;
worker_rlimit_sigpending 32768;

error_log  logs/error.log  crit;

#pid        logs/nginx.pid;


events {
    worker_connections  51200;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    access_log  off;
    limit_conn_log_level info;
    log_format  xfs  '$arg_id|$arg_usr|$remote_addr|$body_bytes_sent|$status';

    sendfile       off;
    tcp_nopush     off;
    tcp_nodelay on;
    directio 4m;
    output_buffers 3 512k;
    reset_timedout_connection on;
    open_file_cache max=5000 inactive=20s;
    open_file_cache_valid    30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors   on;
    client_body_buffer_size 32k;

    server_tokens off;
    autoindex off;

    keepalive_timeout  0;
    #keepalive_timeout  65;
Run Code Online (Sandbox Code Playgroud)

Mar*_*ald 6

请不要接受这个答案,因为它只是一个观察。但是您对超过 4M 的文件使用直接 IO,并且只允许 nginx 1.5MB 的文件内存缓冲区。

directio 4m;
output_buffers 3 512k;
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话,直接 IO 基本上绕过文件系统 IO 缓存直接从 HDD 读取。因此,对于超过 4M 的文件,您不使用内存来缓冲文件,而对于 4M 以下的文件,您仅使用 1.5M 内存。


Vad*_*dim 5

打开发送文件。保留 output_buffers 默认值。关闭方向。添加更多内存。

没有什么比 linux VFS 缓存更好的了。