短连接服务器压测-wrk

背景

由于业务需要我们从原来的 长连接 转为 短连接,提高单服同时在线人数。

老压测

在服务器编写机器人,编写一部分客户端逻辑(这里如果客户端严格使用mvc 模式,其实可以把 view 层换为 服务器测试代码层,而一般不同层之间通过事件机制,触发调用,这样下来可以减少重复代码编写)测试。测试周期长,需要写大量代码。

新压测

通过 wrk 在 linux 上可以开多个连接,模拟发送请求,轻轻松松压测。如果是业务测试,可能麻烦一些,需要编写相关的 lua 脚本,我们使用 scripts/pipeline.lua 改写,创建连接,测试。

Lua 复制代码
wrk -v -t4000 -c4000 -d20m http://127.0.0.1:30001 --latency -s pipeline.lua

这样轻松创建 4000和连接并发处理

部分参数说明:

-c, --connections <N> Connections to keep open 打开连接数

-d, --duration <T> Duration of test 持续时间

-t, --threads <N> Number of threads to use 线程数

-s, --script <S> Load Lua script file 指定那个脚本

-H, --header <H> Add header to request

--latency Print latency statistics

--timeout <T> Socket/request timeout

-v, --version Print version details

脚本

参考 wrk/SCRIPTING文件,里面介绍了所有可以使用的 lua 函数,可以自定义改写

delay.lua

每次请求间隔

pipeline.lua

定义请求流水线

例子

Lua 复制代码
-- example script demonstrating HTTP pipelining

function fillParameters(path, code, bodyContent)
   -- 指定header内容
   local headers = {}
   headers["Content-Type"] = "text/plain"
   headers["Code"] = code
   headers["TestJson"] = "1"
   headers["Account"] = "TRA1"

   -- 协议类型
   local method = "POST"
   return wrk.format(method, path, headers, bodyContent)
end

init = function(args)

   local r = {
        -- 登录
        fillParameters("/Proto/C2G", "12002", '{ "RpcId": 1, "Account":"TRA1", "Password":"123"}'),
         -- 同步时间
        fillParameters("/Proto/C2G", "12008", '{ "RpcId":2}'),
        -- ...
      }

   req = table.concat(r)
end

request = function()
   return req
end

-- 每次请求间隔
function delay()
   return math.random(5000, 6000)
end

Note:

wrk 后跟 -s 引用脚本只能用一个,加多个 -s 执行不会报错,正常执行,但执行时只会使用其中一个lua脚本,如果要使用多个函数,可以将相关函数写在一个脚本中。

相关推荐
Thera7774 小时前
【Linux C++】彻底解决僵尸进程:waitpid(WNOHANG) 与 SA_NOCLDWAIT
linux·服务器·c++
呉師傅5 小时前
【使用技巧】Adobe Photoshop 2024调整缩放与布局125%后出现点菜单项漂移问题的简单处理
运维·服务器·windows·adobe·电脑·photoshop
getapi5 小时前
Ubuntu 22.04 服务器的系统架构是否为 amd64 x86_64
linux·服务器·ubuntu
消失的旧时光-19436 小时前
Linux 入门核心命令清单(工程版)
linux·运维·服务器
艾莉丝努力练剑6 小时前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
Trouvaille ~6 小时前
【Linux】TCP Socket编程实战(一):API详解与单连接Echo Server
linux·运维·服务器·网络·c++·tcp/ip·socket
一方热衷.8 小时前
在线安装对应版本NVIDIA驱动
linux·运维·服务器
m0_694845578 小时前
tinylisp 是什么?超轻量 Lisp 解释器编译与运行教程
服务器·开发语言·云计算·github·lisp
*小海豚*8 小时前
在linux服务器上DNS正常,但是java应用调用第三方解析域名报错
java·linux·服务器
消失的旧时光-19438 小时前
Linux 编辑器入门:nano 与 vim 的区别与选择指南
linux·运维·服务器