webman、gateway分布式压测高并发问题

Sumr

3台(4cpu 8核)webman redis_consumer消费
3台(4cpu 8核)gateway负载均衡
3台(4cpu 8核)businessworker redis_queue生产

3台(6核 32G) jmeter每台3000线程压测
一直有如下问题:

805 1 2
1个回答

walkor

65280 导致这个退出码的原因是业务代码有致命错误,例如调用了不存在的函数、语法错误等。

编辑 workerman/Worker.php 里 checkError()方法,找到

$errors    = error_get_last();

改成

$errors    = error_get_last();
var_dump($errors);

看下具体是什么错误。

  • Sumr 2022-03-04

    没有错误,结果都是null。
    有个现象是压力一起动,刚开始还好,所有日志(自己在业务逻辑中记录的)都有打印,隔几秒之后就不行了,好像程序跟阻塞了一样,手机操作业务就没反应了,是不是业务机还不够?

    业务链路是:登录(webman)->链接websocket(gateway)->模拟websocket发送数据请求(gateway),数据进入redis_queue->业务接到(从redis_queue中取出)后处理(webman)->返回结果放回redis_queue(webman)->gateway从redis_queue取出广播出去。
    场景:模拟登录,链接websocket,然后进入直播间

  • walkor 2022-03-04

    可能哪里出现瓶颈了,没有现场没有办法给你定位。每台服务器php start. status 执行下看下event-loop是不是\Workerman\Events\Event。还有需要按照手册优化下每台服务器的linux内核 https://www.workerman.net/doc/workerman/appendices/kernel-optimization.html

  • Sumr 2022-03-11

    优化过代码后未再出现。
    还有两个疑问:
    1、怎样能确认内核是优化过的,模拟超过1000链接么?(a、配置确定改了b、event模块确定已安装)
    2、自定义的进程(process.php中的),一般开几个进程好

  • walkor 2022-03-11

    命令 sysctl -a 会显示生效的内核参数
    进程数看业务类型,如果没有网络调用(curl、数据库、redis等)就开成和cpu核数一样,有的话就开cpu核数的2-3倍。

  • Sumr 2022-03-11

    好的 感谢指导 ^_^

🔝