[linux] nginx配置线程池(thread tool)


本文总阅读量

1、nginx配置是需要添加–with-threads参数

./configure --with-threads

2、在合适的上下文(http、server、location)配置 aio threads

in the ‘main’ context
thread_pool default threads=32 max_queue=65536;
in the ‘http’, ‘server’, or ‘location’ context
aio threads=default;
上面例子定义了一个名称为default的线程池,线程数为32个,最大任务队列为65536,如果任务队列超过负载,nginx会提示报错
thread pool "NAME" queue overflow: N tasks waiting

3、可以配置多个独立的线程池用于不通的配置文件使用:

in the ‘main’ context

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
thread_pool one threads=128 max_queue=0;
thread_pool two threads=32;

http {
server {
location /one {
aio threads=one;
}

location /two {
aio threads=two;
}

}
# ...
}

如果不指定max_queue,默认值为65536,上面例子设置为0,这种情况线程池只能处理和线程池数相等的任务,没有任务等待。

4、如果服务器有多块硬盘,可以使用分割用户+proxy_cache的方法提高性能

假设有三块挂载盘/mnt/disk1, /mnt/disk2, or /mnt/disk3
in the ‘main’ context

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
thread_pool pool_1 threads=16;
thread_pool pool_2 threads=16;
thread_pool pool_3 threads=16;

http {
proxy_cache_path /mnt/disk1 levels=1:2 keys_zone=cache_1:256m max_size=1024G
use_temp_path=off;
proxy_cache_path /mnt/disk2 levels=1:2 keys_zone=cache_2:256m max_size=1024G
use_temp_path=off;
proxy_cache_path /mnt/disk3 levels=1:2 keys_zone=cache_3:256m max_size=1024G
use_temp_path=off;

split_clients $request_uri $disk {
33.3% 1;
33.3% 2;
* 3;
}
server {
# ...
location / {
proxy_pass http://backend;
proxy_cache_key $request_uri;
proxy_cache cache_$disk;
aio threads=pool_$disk;
sendfile on;
}
}
}
目录
  1. 1. 1、nginx配置是需要添加–with-threads参数
  2. 2. 2、在合适的上下文(http、server、location)配置 aio threads
  3. 3. 3、可以配置多个独立的线程池用于不通的配置文件使用:
  4. 4. 4、如果服务器有多块硬盘,可以使用分割用户+proxy_cache的方法提高性能

Proudly powered by Hexo and Theme by Lap
本站访客数人次
© 2020 zeven0707's blog