我有一台强大的服务器(32 核、128 GB RAM、MD Ryzen 9 7950X3D),并且我安装了 Nginx。
我开始使用简单的健康检查对其进行负载测试ab
。
我注意到当我像这样测试时:
ab -c 1000 -n 50000 -k "https://***.com/TestHealth"
我可以达到 50k RPS,但是当我像这样测试时:
ab -c 1000 -n 50000 "https://***.com/TestHealth"
我只得到 2348 RPS。
测试机器是一台独立的机器,是我在 AWS 上发现的最强大的机器(CPU 方面)。
现在我知道-k
保持 keepAlive 并且这肯定有助于提高性能,但由于服务器在此负载下并未大量使用,我想我可以从中获得更好的结果。
我可以为该服务器进行哪些最佳 SSL 和服务器设置?是否有一个有组织的流程可以让我确保我的服务器针对其硬件和带宽进行了优化,以实现最佳性能?
vmstat 1 3
这是测试之前的结果:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 111926384 373764 14628824 0 0 1 2 3 4 0 0 100 0 0
0 0 0 111926384 373764 14628832 0 0 0 0 511 874 0 0 100 0 0
0 0 0 111926384 373764 14628832 0 0 0 0 638 1072 0 0 100 0 0
这是测试期间的结果(没有-k
):
vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 111884320 373852 14631856 0 0 1 2 3 4 0 0 100 0 0
1 0 0 111882256 373852 14631996 0 0 0 0 35435 10614 2 1 97 0 0
0 0 0 111882336 373860 14632032 0 0 0 38 38040 11449 2 2 96 0 0
这是测试期间的结果和 -k
:
vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 111862632 374048 14696080 0 0 1 2 4 4 0 0 100 0 0
2 0 0 111860968 374048 14699616 0 0 0 0 100300 66310 1 3 96 0 0
0 0 0 111859408 374048 14703228 0 0 0 0 100014 66075 1 3 95 0 0
将值更改worker_processes
为 24:-k
测试期间:
vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 112021120 374312 14761548 0 0 1 2 4 4 0 0 100 0 0
2 0 0 112023288 374312 14765152 0 0 0 0 102319 66892 1 2 97 0 0
0 0 0 112022048 374316 14768552 0 0 0 29 103237 67227 1 2 97 0 0
没有:
vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 111983120 374328 14781508 0 0 1 2 4 4 0 0 100 0 0
6 0 0 111982048 374328 14781644 0 0 0 0 36247 10694 2 1 97 0 0
1 0 0 111980312 374328 14781788 0 0 0 0 34453 10596 1 1 97 0 0
答案1
正如 Gerald Schneider 所说,明智的做法是更改一个参数,然后测试、分析、重复。让我指出一些你可以尝试的更改:
- 更改/添加
worker_processes
为固定值,小于核心数(为操作系统留出一些空间)。如果您的处理器支持超线程之类的东西,则不使用,如果是,则设置worker_processes
为超线程总数 - 4(例如)。 - 加入
location
aio threads
`
location /TestHealth
{
return 200 "hello";
aio threads;
}
`