我有很多空闲内存,但我的 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)
请不要接受这个答案,因为它只是一个观察。但是您对超过 4M 的文件使用直接 IO,并且只允许 nginx 1.5MB 的文件内存缓冲区。
directio 4m;
output_buffers 3 512k;
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,直接 IO 基本上绕过文件系统 IO 缓存直接从 HDD 读取。因此,对于超过 4M 的文件,您不使用内存来缓冲文件,而对于 4M 以下的文件,您仅使用 1.5M 内存。
| 归档时间: |
|
| 查看次数: |
7205 次 |
| 最近记录: |