workman的内存约来越大

yzwei1019

问题描述

直播间,workman的内存约来越大,自己不会释放,一直会到服务器内存满了为止!请教大佬们,这个该怎么处理呢?

截图

1831 1 3
1个回答

walkor 打赏

IMWorker可能业务有内存泄漏,需要自己定位下代码

  • yzwei1019 2023-07-29

    嗯嗯谢谢啦,我记得已经到达了一定量,workman会重启,又重4M开始叠加

  • walkor 2023-07-29

    webman有子进程内存监控,workerman本身没有

  • yzwei1019 2023-07-29

    噢,IMWorker 随着人数占用内存越来越大,我把php.ini memory_limit 设置成8G,服务器内存是16G,现在有6000人数,随着人数增长,内存会一直不够用,我想问下,业务已经优化了,没有什么可在优化的了,现在该怎么处理呀?其实最好的可以类似重启一样的操作,可以把占用的内存又重新归0,这样是最好的了

  • walkor 2023-07-29

    内存泄漏一般是长周期数组里无限添加元素导致的。

    如果实在定位不到业务内存泄漏的代码,定时reload也可以。像根据内存占用定时执行某个程序问webman/ai就好,下面是AI回复


    写一个sh脚本,服务器内存使用量大于90%时,执行 php /your/path/start.php reload。利用crontab 每分钟执行一次这个脚本。

    AI回复
    可以按照以下步骤设置定时任务来每分钟执行该脚本:

    1. 创建一个新的.sh文件,比如check_memory.sh,并将以下内容复制到文件中:
    #!/bin/bash
    
    # 获取当前内存使用率
    memory_usage=$(free | awk '/Mem/{printf("%.2f"), $3/$2 * 100}')
    
    # 判断内存使用率是否大于90%
    if (( $(echo "$memory_usage > 90" | bc -l) )); then
        # 执行 reload 命令
        php /your/path/start.php reload
    fi
    1. 给该.sh文件添加执行权限,使用以下命令:
    chmod +x check_memory.sh
    1. 打开终端,输入以下命令来编辑crontab定时任务:
    crontab -e
    1. 在打开的编辑器中,添加以下行来设置每分钟执行该脚本:
    * * * * * /path/to/check_memory.sh

    请将/path/to/check_memory.sh替换为实际的.sh文件路径。

    1. 保存并退出编辑器。

    现在,该脚本将会每分钟执行一次,并在服务器内存使用量大于90%时执行php /your/path/start.php reload命令。

  • yzwei1019 2023-08-03

    执行这个命令 php start.php reload

    之后报这个错误

    SendBufferToWorker fail. The connections between Gateway and BusinessWorker are not ready.

  • yzwei1019 2023-08-03

    exit_count 显示1
    exit_status 还是0

  • yzwei1019 2023-08-03

    我们模拟3个账号在直播间一直发消息,发1万条消息,imworker占用很少内存,真实线上环境6000人同时在线,有人发送消息,imworker内存就会累积很快,30分钟就能达到7G

  • yzwei1019 2023-08-03

    跪求大佬指点~非常感谢!

  • kspade 2023-08-04

    真实在线 6000人。。。这个用户体量 老弟还不考虑多分布式 吗

  • yzwei1019 2023-08-04

    大佬,我研究下分布式,6000个人多吗?我看官方说几万都没有问题

  • kspade 2023-08-04

    几万肯定没问题的。

  • walkor 2023-08-04

    6000不多,前两天还看到群里有人2台gateway Worker支持了40万设备在线

  • yzwei1019 2023-08-07

    大佬,那还是我代码有问题,哭晕在厕所了,我们是6000多人 一直聊天和抢红包

年代过于久远,无法发表回答
×
🔝