wokerman think-worker 内存一直增长

wwokwww

workerman / thinkphp 内存一直增长

环境

  1. ThinkPHP 6.0.8
  2. think-worker 3.5.34
  3. TDengine

服务器每天接收 来自Mqtt的中转Http消息大约3500万条(腾讯限制只能发http了,其它收费较高)

使用 workerman 开启http服务 开启12个进程
将收到的数据插入到TDengine时序数据库,保存最新的一条数据至MySQL数据库。
内存一直在增长,怀疑内存泄漏,然后将onMessage所有代码删除,即一个空项目,也会造成内存的增长,直到超出memory_limit上限然后报 65280 错误后业务无法运行。
将进程改为48个进程后问题依旧,只是增长的速度慢了一点而已。时间长了之后还是一样的。

$http_worker                = new Worker("http://0.0.0.0:8090");
$http_worker->count         = 12;
$http_worker->name          = 'BMS';
$http_worker->reusePort     = true;
$http_worker->onWorkerStart = function ($worker) {
    $this->output("Worker start");
    // 实例化
    try {
        $this->tdengine = new Connection($this->tdengine_host, $this->tdengine_port, $this->tdengine_username, $this->tdengine_password, $this->tdengine_database);
    // 连接
        $this->tdengine->connect();
        $this->output("TDengine connected, Version:" . \TDengine\CLIENT_VERSION);
        $this->tdengineBMS = new TDengineBMS($this->tdengine);
    } catch (TDengineException $e) {
        $this->output("TDengine connect failed:" . $e->getMessage());
        return;
    }
    // onMessage 方法内无代码。
    $worker->onMessage = [$this, 'onMessage'];
};
Worker::runAll();
private function output(string $message): void
{
    // 守护模式下不输出日志
    if (!defined('DAEMON')) {
        echo $message . PHP_EOL;
    }
}

内存一直增长的原因不明,感谢版主大大解答疑惑。

重新没用thinkphp创建了一个test.php的项目,内存也增加。不知为何。

231 1 1
1个回答

walkor 打赏

试下不用thinkphp,直接用workerman,空业务返回helloworld,看下内存是否是无限增长

  • wwokwww 10天前

    回复大佬,也增加。

  • wwokwww 10天前

    已在原帖中截了两张图,还麻烦大佬分析一下原因。感谢

  • walkor 10天前

    发下测试代码

  • walkor 10天前

    文本

  • wwokwww 10天前

    https://www.workerman.net/doc/workerman/getting-started/simple-example.html 从这里复制的,经测试用workerman 4.2.1版本内存不会增长,而thinkphp-wokerman的是3.5.34的内存会一直增长

  • walkor 10天前

    先说workerman
    截图
    截图
    特意下载workerman 3.5.34 试了下,没有无限增长。
    从你的截图看,只是到了8M左右,没有无限增长。

    think-worker 没测试

  • walkor 10天前

    think-worker 测试了下,确实存在内存泄露,可能是thinkphp官方哪里没弄好。
    另外workerman快发布5.0了,3.0已经不维护了。
    如果可以的话建议用webman,可以使用tp的组件,开发起来和tp差不多

  • wwokwww 10天前

    感谢大佬,我单独把workerman升到了4.2.1版本,目前内存没有增长了,还是用的thinkphp,停留在了36M,有时候会跳到37M然后又会回到36M,这是之前从未有过的现象。问题已解决,十分感谢。

  • wwokwww 10天前

    好的好的,十分感谢。

  • 释永战 9天前

    如果需要workman结合thinkphp运行的话这里倒是有一个TP的Workman扩展:
    https://github.com/axguowen/think-webworker
    特点:
    1、深度兼容ThinkPHP,现有ThinkPHP业务代码几乎不用做任何更改即可使用
    2、性能比传统php-fpm环境高10-20倍
    3、支持ThinkPHP的Cookie使用
    4、支持ThinkPHP的Session使用
    5、支持ThinkPHP的多应用模式
    6、支持ThinkPHP的多应用中间件
    7、多应用模式支持配置应用入口文件
    8、多应用模式支持配置应用目录以支持composer依赖包的应用
    有兴趣的话可以试试。

  • tanhongbin 7天前

    webman一撸到底

  • wwokwww 7天前

    好的,感谢各位。

×
🔝