webman自定义共享内存进程,根据请求参数累计连续2000次后发送告警信息

xiaopi

问题描述

  • 需求如下:
    接收第三方http请求,根据请求中某个参数的累计的次数发送告警信息,如请求会发送status参数,status:false表示失败,status:true表示成功,统计连续失败次数达到2000次后,发送告警信息
    日请求次数达到1000w+
  • 问题:根据需求我自定义了单进程tcp服务,使用内存计数;在http服务开启了8个进程,http服务接收到请求后使用AsyncTcpConnection异步发送到单进程中做计数处理
    代码是否在大并发中出现问题?比如出现内存泄漏、进程重启的问题,因为一旦进程自动重启,计数的值就没了
    是否可以达到日请求1000w+?
  • 代码

process.php配置

截图

统计逻辑
截图

向自定义tcp服务发送
截图

419 3 0
3个回答

meows

所以你为什么不用redis 呢? redis-server 也支持unixsocket 通信,不一定要TCP

  • xiaopi 2023-12-16

    感谢解答,不用redis unixsocket的原因是redis unixsocket机制只能本机进程共享,而这个项目后面可能会把http服务分布在多台服务器上部署。如果使用redis tcp通信的话,也需要单独的搭建一个redis。考虑部署方便,维护、以及成本,所以先用内存存储

胡桃

你可能需要真正的共享内存

  • xiaopi 2023-12-17

    workerman有个globalData共享内存,我尝试改成webman版本,没弄好

  • meows 2023-12-17

    别折腾了,这里早就有人实现分享出来:https://www.workerman.net/a/1589

  • xiaopi 2023-12-17

    感谢,webman-shared-cache确实性能高,虽然不是持久化,但是可以解决我的共享内存问题,接下来我我看看怎么把apcu打包到php8.1-static中

  • tanhongbin 2023-12-18

    直接actions 或者 本地打包就可了,actions需要gd库 做一点处理,有需要你@我

  • xiaopi 2023-12-18

    @tanhongbin 啥叫gd库不行,我在issues中也发现有人说gd库不行,不过我没看明白,我手动打包以后,gd库是正常的啊。这是我手动打包的步骤:https://www.workerman.net/a/1605

  • tanhongbin 2023-12-18

    你用admin了嘛 你会发现 验证码出不来 报错 就是gd库 里面缺少一些配置

  • xiaopi 2023-12-18

    明白了,有些gd配置没开么,是否可以在-I "memory_limit=512M"里面包含这些gd库? 不过我看手动编译可以加上这些,但是你说的actions这个我试了一下,没有添加这些ini配置的地方啊,如何调整ini参数?

  • tanhongbin 2023-12-18

    不行的 ,必须打包静态php的时候 处理

  • xiaopi 2023-12-18

    咋处理?

  • tanhongbin 2023-12-18

    我给你找找哈

  • xiaopi 2023-12-18

    老哥,为啥我试了两次github actions,都报错了,提示:Key Validation Error: php-8.1-dependencies-bcmath,calendar,ctype,curl,dba,dom,exif,filter,fileinfo,gd,iconv,intl,mbstring,mbregex,mysqli,mysqlnd,openssl,opcache,pcntl,pdo,pdo_mysql,pgsql,phar,posix,readline,redis,session,simplexml,sockets,sodium,sqlite3,tokenizer,xml,xmlreader,xmlwriter,xsl,zip,zlib,mongodb,event,soap,shmop,xlswriter,pdo_sqlite cannot contain commas. 不是说用逗号分隔扩展么,如"apcu,redis,ctype"

  • tanhongbin 2023-12-18

    这个 不影响吧

  • tanhongbin 2023-12-18

    有两处 需要修改

  • tanhongbin 2023-12-18

    https://github.com/tanhongbin-php/static-php-cli 这是我的,你可以fork一下 然后自己看看

  • tanhongbin 2023-12-18

    里面有两处改过了 问的这个插件的作者改的

  • xiaopi 2023-12-18

    感谢,不过修改的地方是gd扩展的一些配置么? 如果是配置,那写在--debug -I "memory_limit=512M"里面 是否也有效果啊?

  • tanhongbin 2023-12-18

    没有的 扩展里面的配置 ,你写文件里面没有用的

  • xiaopi 2023-12-18

    我试了一下手动编译了一份,好像是可以的啊 -I "memory_limit=512M" -I "apc.shm_size=512M"

xiaopi

改了一下,使用apcu共享内存,webman插件是webman-shared-cache,可以在多个进程中共享内存,但是不知道会不会z在多个进程并发处理的时候出现问题,尤其时定时器,在发送告警后,当前进程开启一个一次性定时器,2分钟后删除apcu中的信息,目的就是2分钟期间内不统计新的数据

@walkor 麻烦老大给看看。
截图

  • 暂无评论
🔝