关于 webman redis/mysql api 请求吞吐量问题

wanstu

今天我想试一下 webman 做 api 服务的吞吐量 进程数设置为 100 已安装 event 扩展 使用环境是 windows wls2 + docker
截图
使用 Jmeter 进行测试
截图
首先是 一个只做 redis 数据库读写的接口
截图
通过 Jmeter 测试结果如下
截图
截图

然后是是 一个只做 mysql 数据库读写的接口
截图
通过 Jmeter 测试结果如下
截图
截图

这两个接口所测出的吞吐量和平均请求时长都不如我使用 AdapterMan + CI 的吞吐量和平均请求时长
AdapterMan|论坛内关于 adapterman 的文章
首先是 redis 数据库读写
截图
通过 Jmeter 测试结果如下
截图
截图

首先是 mysql 数据库读写
截图
通过 Jmeter 测试结果如下
截图
截图

下面是我的问题
我看手册首页声称 webman 非常快但我目前测试的结果来看效果并不是很好 这是我环境的原因吗(测试时均是 进程数设置为 100 已安装 event 扩展 使用环境是 windows wls2 + docker 所连接 mysql 数据库 redis 数据库是相同的)

668 8 0
8个回答

wanstu

顶一顶 静等各位大佬来解惑

  • 暂无评论
wanstu

补充一点 在使用 AdapterMan 后也做过一些测试 与使用fpm的CI相比 (通过 Jmeter 测试带业务API)性能提升也达不到2倍
截图
这个性能也未达到其项目(AdapterMan)中的效果,也想请各位大佬帮忙看下是怎么回事

  • 暂无评论
six

电脑啥配置,开了100个进程

  • wanstu 2023-09-01

    这个进程数我在测试 webman 和 AdapterMan + CI 时设置的是相同的 我认为的话这个应该对结果差异影响不大

walkor

wls2本身性能很差,尤其是有磁盘读写的时候。因为wls2成为瓶颈,压测结果相差不是不大。
还有,进程数100感觉多了,进程数开成4倍cpu即可,进程太多性能会下降。

关于webman压测略低于AdapterMan + CI,
是因为webman用的数据库组件和CI的数据库组件性能差异导致,尤其是laravel/think-orm的Model,性能较低。
如果都用原生PDO或者同一个数据库组件,webman肯定会高于AdapterMan。

另外使用Model、 Db::table() 和原生PDO性能也有差异,之前有人压测(数据库随机查询)的对比数据。
https://www.workerman.net/a/1337
如果使用原生PDO webman QPS为1.78万
如果使用laravel的Db::table() webman QPS降到 0.94万QPS
如果使用laravel的Model webmanQPS降到 0.72万QPS

最后建议压测使用正式linux系统压测,对于不同框架间的数据库组件的那点性能差异可以忽略。

  • wanstu 2023-09-01

    感谢回复
    首先是关于 wsl2 的问题 稍后我会尝试在 debian Linux 上测试
    然后是进程数 这个进程数我在测试 webman 和 AdapterMan + CI 时设置的是相同的 我认为的话这个应该对结果差异影响不大 (稍后在 debian Linux 上测试时会尝试调整为 cpu * 4)
    目前我手边有一个安装了图形界面的 debian11 今天在这个上面测试后我会再回复您

  • walkor 2023-09-01

    我的意思是100进程对于webman和AdapterMan都有点多了,调整合适的进程他们都会有更好的表现。不是说100进程是webman QPS低于AdapterMan的原因。
    webman低于AdapterMan的原因是数据库组件的性能差异导致。

  • wanstu 2023-09-01

    大佬 我在下面贴出了我在debian上的测试结果 想请您帮忙看下 这个结果是否发挥出了 webman 应有的潜力

  • walkor 2023-09-01

    https://www.workerman.net/a/1337
    评论区有人发过压测结果,你可以作为对比

  • 情系轩尼诗 2023-09-02

    大佬,对于tp的orm你有没有测过

wanstu

cpu 为 8 核
截图
截图
redis 与 webman服务在同一主机 ab测试发起端与webman服务在同一内网
由于我本地部署的mysql在使用时报错(通过 dbeaver 或 其他数据库图形工具可以正常连接)

PDOException: SQLSTATE[HY000] [2002] Operation timed out in /www/webman/vendor/illuminate/database/Connectors/Connector.php:66

并且我一时也不知怎么解决 所以 mysql 数据库使用的是远程服务器的

用来测试的接口
无业务
截图
ab 测试结果

situ@localhost:~$ ab -n100000 -c200 -k http://172.18.1.0:2345/index/json
This is ApacheBench, Version 2.3 <$Revision: 1901567 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.18.1.0 (be patient)
Completed 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Completed 100000 requests
Finished 100000 requests

Server Software:        workerman
Server Hostname:        172.18.1.0
Server Port:            2345

Document Path:          /index/json
Document Length:        21 bytes

Concurrency Level:      200
Time taken for tests:   11.365 seconds
Complete requests:      100000
Failed requests:        0
Keep-Alive requests:    100000
Total transferred:      13500000 bytes
HTML transferred:       2100000 bytes
Requests per second:    8799.24 [#/sec] (mean)
Time per request:       22.729 [ms] (mean)
Time per request:       0.114 [ms] (mean, across all concurrent requests)
Transfer rate:          1160.06 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   2.6      0      88
Processing:     8   23  13.5     19     404
Waiting:        6   23  13.5     19     404
Total:          9   23  14.7     19     444

Percentage of the requests served within a certain time (ms)
  50%     19
  66%     22
  75%     24
  80%     26
  90%     32
  95%     40
  98%     55
  99%     84
 100%    444 (longest request)

带 redis
截图
ab 测试结果

situ@localhost:~$ ab -n100000 -c200 -k http://172.18.1.0:2345/index/redisTest
This is ApacheBench, Version 2.3 <$Revision: 1901567 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.18.1.0 (be patient)
Completed 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Completed 100000 requests
Finished 100000 requests

Server Software:        workerman
Server Hostname:        172.18.1.0
Server Port:            2345

Document Path:          /index/redisTest
Document Length:        61 bytes

Concurrency Level:      200
Time taken for tests:   16.403 seconds
Complete requests:      100000
Failed requests:        0
Keep-Alive requests:    100000
Total transferred:      17500000 bytes
HTML transferred:       6100000 bytes
Requests per second:    6096.32 [#/sec] (mean)
Time per request:       32.807 [ms] (mean)
Time per request:       0.164 [ms] (mean, across all concurrent requests)
Transfer rate:          1041.85 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1  26.9      0    1104
Processing:     9   32  14.9     29     302
Waiting:        9   32  14.9     29     302
Total:          9   33  31.1     29    1155

Percentage of the requests served within a certain time (ms)
  50%     29
  66%     32
  75%     36
  80%     38
  90%     47
  95%     58
  98%     75
  99%     91
 100%   1155 (longest request)

带 sql
截图
ab 测试结果

situ@localhost:~$ ab -n100000 -c200 -k http://172.18.1.0:2345/index/sqlTest
This is ApacheBench, Version 2.3 <$Revision: 1901567 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 172.18.1.0 (be patient)
Completed 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Completed 100000 requests
Finished 100000 requests

Server Software:        workerman
Server Hostname:        172.18.1.0
Server Port:            2345

Document Path:          /index/sqlTest
Document Length:        887 bytes

Concurrency Level:      200
Time taken for tests:   111.727 seconds
Complete requests:      100000
Failed requests:        0
Keep-Alive requests:    100000
Total transferred:      100200000 bytes
HTML transferred:       88700000 bytes
Requests per second:    895.04 [#/sec] (mean)
Time per request:       223.455 [ms] (mean)
Time per request:       1.117 [ms] (mean, across all concurrent requests)
Transfer rate:          875.81 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   8.2      0     276
Processing:    52  222 105.7    185    2517
Waiting:       52  222 105.7    185    2517
Total:         52  222 109.5    185    2777

Percentage of the requests served within a certain time (ms)
  50%    185
  66%    215
  75%    262
  80%    295
  90%    355
  95%    404
  98%    482
  99%    564
 100%   2777 (longest request)

我想请大佬帮忙看下目前这个表现的 webman 是正常的吗

MarkGo

截图
空業務,windows下的結果....

  • 暂无评论
软饭工程师

截图
6核的电脑,开了24个进程,没做任何优化,图省事,debug 都没关

  • 暂无评论
软饭工程师

截图
截图
300万数据,随机取一条返回,24个进程也能打到1万5

  • 暂无评论
🔝