工作在一个项目中,我们需要服务器一个小型的静态xml文件~40k / s。
所有传入的请求都从HAProxy发送到服务器。然而,没有一个请求是持久的。
问题是,当使用非持久请求进行基准测试时,nginx实例的上限为19 114 req/s。当启用持久连接时,性能提高了近一个数量级,达到168 867 req/s。结果与G相似。
当对非持久请求进行基准测试时,CPU的使用率是最低的.
我能做些什么来提高非持久连接和nginx的性能?
[root@spare01 lighttpd-weighttp-c24b505]# ./weighttp -n 1000000 -c 100 -t 16 "http://192.168.1.40/feed.txt"
finished in 52 sec, 315 millisec and 603 microsec, 19114 req/s, 5413 kbyte/s
requests: 1000000 total, 1000000 started, 1000000 done, 1000000 succeeded, 0 failed, 0 errored
status codes: 1000000 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 290000000 bytes total, 231000000 bytes http, 59000000 bytes data
[root@spare01 lighttpd-weighttp-c24b505]# ./weighttp -n 1000000 -c 100 -t 16 -k "http://192.168.1.40/feed.txt"
finished in 5 sec, 921 millisec and 791 microsec, 168867 req/s, 48640 kbyte/s
requests: 1000000 total, 1000000 started, 1000000 done, 1000000 succeeded, 0 failed, 0 errored
status codes: 1000000 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 294950245 bytes total, 235950245 bytes http, 59000000 bytes data发布于 2013-05-12 08:36:29
您的两个测试是相似的(除了):
./weighttp -n 1000000 -c 100 -t 16 "http://192.168.1.40/feed.txt"
./weighttp -n 1000000 -c 100 -t 16 -k "http://192.168.1.40/feed.txt"而的速度则快了10倍:
finished in 52 sec, 19114 req/s, 5413 kbyte/s
finished in 5 sec, 168867 req/s, 48640 kbyte/s首先,HTTP Keep-Alives (持久连接)使HTTP请求运行得更快,因为:
HTTP Keep-Alives,客户端必须为每个请求建立一个新的连接(由于TCP握手,这很慢)。HTTP Keep-Alives,客户端可以同时发送所有请求(使用相同的连接)。这是更快的,因为有更少的事情要做。第二,您说静态文件XML大小是“小”的。
“小”是接近1KB还是1MB?我们不知道。但是,这在加速事物的可用选项方面产生了巨大的差异。
大型文件通常通过sendfile()提供,因为它在内核中工作,从而使用户模式服务器摆脱了从磁盘读取和缓冲的负担。
小文件可以使用用户模式下的应用程序开发人员可以使用的更灵活的选项,但在这里,文件大小也很重要(字节和千字节是不同的动物)。
第三,您正在使用16个线程进行测试。您真的喜欢客户机和服务器机器上的16 PHYSICAL CPU Cores吗?
如果不是这样的话,那么你只是在放慢测试的速度,以至于不再测试web服务器。
正如你所看到的,许多因素对性能有影响。还有更多的操作系统优化( TCP堆栈选项、可用文件句柄、系统缓冲区等)。
为了充分利用系统,您需要检查所有这些参数,并为您的特定练习选择最佳的参数。
https://stackoverflow.com/questions/16486025
复制相似问题