3台(4cpu 8核)webman redis_consumer消费 3台(4cpu 8核)gateway负载均衡 3台(4cpu 8核)businessworker redis_queue生产
3台(6核 32G) jmeter每台3000线程压测 一直有如下问题:
65280 导致这个退出码的原因是业务代码有致命错误,例如调用了不存在的函数、语法错误等。
编辑 workerman/Worker.php 里 checkError()方法,找到
$errors = error_get_last();
改成
$errors = error_get_last(); var_dump($errors);
看下具体是什么错误。
没有错误,结果都是null。 有个现象是压力一起动,刚开始还好,所有日志(自己在业务逻辑中记录的)都有打印,隔几秒之后就不行了,好像程序跟阻塞了一样,手机操作业务就没反应了,是不是业务机还不够?
业务链路是:登录(webman)->链接websocket(gateway)->模拟websocket发送数据请求(gateway),数据进入redis_queue->业务接到(从redis_queue中取出)后处理(webman)->返回结果放回redis_queue(webman)->gateway从redis_queue取出广播出去。 场景:模拟登录,链接websocket,然后进入直播间
可能哪里出现瓶颈了,没有现场没有办法给你定位。每台服务器php start. status 执行下看下event-loop是不是\Workerman\Events\Event。还有需要按照手册优化下每台服务器的linux内核 https://www.workerman.net/doc/workerman/appendices/kernel-optimization.html
php start. status
\Workerman\Events\Event
优化过代码后未再出现。 还有两个疑问: 1、怎样能确认内核是优化过的,模拟超过1000链接么?(a、配置确定改了b、event模块确定已安装) 2、自定义的进程(process.php中的),一般开几个进程好
命令 sysctl -a 会显示生效的内核参数 进程数看业务类型,如果没有网络调用(curl、数据库、redis等)就开成和cpu核数一样,有的话就开cpu核数的2-3倍。
sysctl -a
好的 感谢指导 ^_^
65280 导致这个退出码的原因是业务代码有致命错误,例如调用了不存在的函数、语法错误等。
编辑 workerman/Worker.php 里 checkError()方法,找到
改成
看下具体是什么错误。
没有错误,结果都是null。
有个现象是压力一起动,刚开始还好,所有日志(自己在业务逻辑中记录的)都有打印,隔几秒之后就不行了,好像程序跟阻塞了一样,手机操作业务就没反应了,是不是业务机还不够?
业务链路是:登录(webman)->链接websocket(gateway)->模拟websocket发送数据请求(gateway),数据进入redis_queue->业务接到(从redis_queue中取出)后处理(webman)->返回结果放回redis_queue(webman)->gateway从redis_queue取出广播出去。
场景:模拟登录,链接websocket,然后进入直播间
可能哪里出现瓶颈了,没有现场没有办法给你定位。每台服务器
php start. status
执行下看下event-loop是不是\Workerman\Events\Event
。还有需要按照手册优化下每台服务器的linux内核 https://www.workerman.net/doc/workerman/appendices/kernel-optimization.html优化过代码后未再出现。
还有两个疑问:
1、怎样能确认内核是优化过的,模拟超过1000链接么?(a、配置确定改了b、event模块确定已安装)
2、自定义的进程(process.php中的),一般开几个进程好
命令
sysctl -a
会显示生效的内核参数进程数看业务类型,如果没有网络调用(curl、数据库、redis等)就开成和cpu核数一样,有的话就开cpu核数的2-3倍。
好的 感谢指导 ^_^