测试数据



ab -n 100000 -c 100 -k http://127.0.0.1/get_cache_value



nginx.conf



lua_shared_dict cache_ngx 128m;

server {
listen 80;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root html;
index index.html index.htm;
}
lua_code_cache on;
location /get_cache_value {
#root html;
content_by_lua_file /opt/openresty/nginx/conf/Lua/get_cache_value.lua;
}
}



get_cache_value.lua



local json = require("cjson")
local redis = require("resty.redis")
local red = redis:new()

red:set_timeout(1000)

local ip = "127.0.0.1"
local port = 6379
local ok, err = red:connect(ip, port)
if not ok then
ngx.say("connect to redis error : ", err)
return ngx.exit(500)
end

-- set Cache cache_ngx
function set_to_cache(key,value,exptime)
if not exptime then
exptime = 0
end
local cache_ngx = ngx.shared.cache_ngx
local succ, err, forcible = cache_ngx:set(key,value,exptime)
return succ
end

--get Cache cache_ngx
function get_from_cache(key)
local cache_ngx = ngx.shared.cache_ngx
local value = cache_ngx:get(key)
if not value then
value = ngx.time()
set_to_cache(key, value)
end
return value
end

function get_from_redis(key)
local res, err = red:get("dog")
if res then
return res
else
return nil
end
end
local res = get_from_cache('dog')
ngx.say(res)



一、默认配置AB压力测试



ab -n 100000 -c 100 -k http://127.0.0.1/



官方nginx/1.10.3 测试结果:



Server Software:        nginx/1.10.3
Server Hostname: 127.0.0.1
Server Port: 80

Document Path: /
Document Length: 612 bytes

Concurrency Level: 100
Time taken for tests: 4.226 seconds    -- 表示所有这些请求被处理完成所花费的总时间
Complete requests: 100000
Failed requests: 0
Keep-Alive requests: 99004
Total transferred: 84995020 bytes
HTML transferred: 61200000 bytes
Requests per second: 23665.05 [#/sec] (mean)    -- 吞吐率,大家最关心的指标之一,相当于 LR 中的每秒事务数,后面括号中的 mean 表示这是一个平均值
Time per request: 4.226 [ms] (mean)        -- 用户平均请求等待时间,大家最关心的指标之二,相当于 LR 中的平均事务响应时间,后面括号中的 mean 表示这是一个平均值
Time per request: 0.042 [ms] (mean, across all concurrent requests)    --服务器平均请求处理时间,大家最关心的指标之三
Transfer rate: 19642.69 [Kbytes/sec] received



openresty/1.11.2.1测试结果:



Server Software:        openresty/1.11.2.1
Server Hostname: 127.0.0.1
Server Port: 80

Document Path: /
Document Length: 558 bytes

Concurrency Level: 100
Time taken for tests: 1.158 seconds
Complete requests: 100000
Failed requests: 0
Keep-Alive requests: 99049
Total transferred: 80195245 bytes
HTML transferred: 55800000 bytes
Requests per second: 86321.79 [#/sec] (mean)
Time per request: 1.158 [ms] (mean)
Time per request: 0.012 [ms] (mean, across all concurrent requests)
Transfer rate: 67603.49 [Kbytes/sec] received



二、缓存测试(openresty/1.11.2.1):



ab -n 100000 -c 100 -k http://127.0.0.1/get_cache_value



1、lua_shared_dict cache_ngx 128m 缓存测试



Server Software:        openresty/1.11.2.1
Server Hostname: 127.0.0.1
Server Port: 80

Document Path: /get_cache_value
Document Length: 11 bytes

Concurrency Level: 100
Time taken for tests: 87.087 seconds
Complete requests: 100000
Failed requests: 43539
(Connect: 0, Receive: 0, Length: 43539, Exceptions: 0)
Keep-Alive requests: 99050
Total transferred: 19887244 bytes
HTML transferred: 3091994 bytes
Requests per second: 1148.27 [#/sec] (mean)
Time per request: 87.087 [ms] (mean)
Time per request: 0.871 [ms] (mean, across all concurrent requests)
Transfer rate: 223.01 [Kbytes/sec] received



2、Redis 缓存结果



Server Software:        openresty/1.11.2.1
Server Hostname: 127.0.0.1
Server Port: 80

Document Path: /get_cache_value
Document Length: 20 bytes

Concurrency Level: 100
Time taken for tests: 74.190 seconds
Complete requests: 100000
Failed requests: 43538
(Connect: 0, Receive: 0, Length: 43538, Exceptions: 0)
Keep-Alive requests: 99049
Total transferred: 20406151 bytes
HTML transferred: 3610906 bytes
Requests per second: 1347.89 [#/sec] (mean)
Time per request: 74.190 [ms] (mean)
Time per request: 0.742 [ms] (mean, across all concurrent requests)
Transfer rate: 268.61 [Kbytes/sec] received



 

 

===============================默认单个服务器和负载均衡服务器测试

CPU (cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c)8



8  Intel(R) Xeon(R) CPU E5-2609 v4 @ 1.70GHz



内存:(cat /proc/meminfo) 16GB



MemTotal:       16317068 kB 
MemFree: 176696 kB
Buffers: 149680 kB
Cached: 15087652 kB



ab 服务器,阿里云云主机:ab -n 100000 -c 100 http://127.7.7.7:8081/

默认单个服务器



ocument Path:          /
Document Length: 558 bytes

Concurrency Level: 100
Time taken for tests: 14.389 seconds
Complete requests: 100000
Failed requests: 0
Total transferred: 79700000 bytes
HTML transferred: 55800000 bytes
Requests per second: 6949.80 [#/sec] (mean)
Time per request: 14.389 [ms] (mean)
Time per request: 0.144 [ms] (mean, across all concurrent requests)
Transfer rate: 5409.17 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 10 91.0 2 3005
Processing: 1 4 20.5 2 412
Waiting: 1 4 20.5 2 412
Total: 3 14 93.3 4 3007

Percentage of the requests served within a certain time (ms)
50% 4
66% 4
75% 4
80% 4
90% 4
95% 5
98% 6
99% 208
100% 3007 (longest request)



openresty/1.11.2.1性能测试_Server

负载均衡:



Document Path:          /
Document Length: 557 bytes

Concurrency Level: 100
Time taken for tests: 13.720 seconds
Complete requests: 100000
Failed requests: 33335
(Connect: 0, Receive: 0, Length: 33335, Exceptions: 0)
Total transferred: 81133335 bytes
HTML transferred: 55733335 bytes
Requests per second: 7288.44 [#/sec] (mean)
Time per request: 13.720 [ms] (mean)
Time per request: 0.137 [ms] (mean, across all concurrent requests)
Transfer rate: 5774.76 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 9 86.5 2 3004
Processing: 2 4 19.0 2 410
Waiting: 1 4 19.0 2 410
Total: 3 13 88.6 4 3208

Percentage of the requests served within a certain time (ms)
50% 4
66% 4
75% 5
80% 5
90% 5
95% 5
98% 7
99% 207
100% 3208 (longest request)



openresty/1.11.2.1性能测试_Server_02

m3u8 文件



Document Path:          /live/tinywan123.m3u8
Document Length: 178 bytes

Concurrency Level: 100
Time taken for tests: 13.345 seconds
Complete requests: 100000
Failed requests: 0
Total transferred: 59100000 bytes
HTML transferred: 17800000 bytes
Requests per second: 7493.47 [#/sec] (mean)
Time per request: 13.345 [ms] (mean)
Time per request: 0.133 [ms] (mean, across all concurrent requests)
Transfer rate: 4324.84 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 1 9 83.4 2 3007
Processing: 2 4 19.2 2 410
Waiting: 2 4 19.2 2 410
Total: 3 13 85.7 4 3010

Percentage of the requests served within a certain time (ms)
50% 4
66% 4
75% 5
80% 5
90% 5
95% 5
98% 6
99% 207
100% 3010 (longest request)



openresty/1.11.2.1性能测试_Time_03

 

Openresty提供了lua-resty-limit-traffic模块进行限流,模块实现了limit.connlimit.req的功能和​​算法​​



local limit_req = require "resty.limit.req"
local rate = 2 --固定平均速率2r/s
local burst = 10 --桶容量
local error_status = 503
local nodelay = false --是否需要不延迟处理
--ngx.say('1111111111111111')

-- my_limit_req_store
local lim, err = limit_req.new("my_limit_req_store", rate, burst)
if not lim then --申请limit_req对象失败
ngx.log(ngx.ERR,
"failed to instantiate a resty.limit.req object: ", err)
return ngx.exit(500)
end

--ngx.say("local lim")
local key = ngx.var.binary_remote_addr
local delay, err = lim:incoming(key, true)

if not delay then
if err == "rejected" then
return ngx.exit(503)
end
ngx.log(ngx.ERR, "failed to limit req: ", err)
return ngx.exit(500)
end

--ngx.log(ngx.ERR, "failed to limit req_test: ")
if delay > 0 then
-- 第二个参数(err)保存着超过请求速率的请求数
-- 例如err等于31,意味着当前速率是231 req/sec
local excess = err

-- 当前请求超过200 req/sec 但小于 300 req/sec
-- 因此我们sleep一下,保证速率是200 req/sec,请求延迟处理
ngx.sleep(delay) --非阻塞sleep(秒)
end



openresty/1.11.2.1性能测试_Concurrency_04

openresty/1.11.2.1性能测试_Server_05

 

 

 

 

 

apr_socket_recv: Connection reset by peer (104)