首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
swoole怎么无缝升级(v4.4.16内存泄漏,经测试v4.5.2没问题)
### 问题描述 守护进程循环读取消息队列,发送http通知,使用v4.4.16占用内存逐渐上升,经测试用v4.5.2不会上涨,目前想升级,但是碰到以下问题: 1.直接替换swoole.so时导致master挂掉,子进程成了僵尸进程(这个影响还好); 2.同一服务器跑了两个swoole的server进程,目前没有问题,但是有上千个连接,so替换时server进程暂时没有异常,但是已经不敢在正式上这么操作 所以请教下大神们有没有什么办法,可以实现影响比较小的升级 我是想先把通知服务用v4.5.2,两个server不中断重启,估计很难吧 另外如果能不升级把内存泄漏问题解决也是很好的 ### Swoole版本,PHP版本,以及操作系统版本信息 ```php centos7 ``` ```php 7.4.3 (cli) (built: Mar 12 2020 15:56:06) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies ``` ```php swoole Swoole => enabled Author => Swoole Team <team@swoole.com> Version => 4.4.16 Built => Mar 12 2020 16:08:43 coroutine => enabled epoll => enabled eventfd => enabled signalfd => enabled cpu_affinity => enabled spinlock => enabled rwlock => enabled openssl => OpenSSL 1.0.2k-fips 26 Jan 2017 pcre => enabled zlib => 1.2.7 mutex_timedlock => enabled pthread_barrier => enabled futex => enabled mysqlnd => enabled async_redis => enabled Directive => Local Value => Master Value swoole.enable_coroutine => On => On swoole.enable_library => On => On swoole.enable_preemptive_scheduler => Off => Off swoole.display_errors => On => On swoole.use_shortname => On => On swoole.unixsock_buffer_size => 8388608 => 8388608 ``` ### 相关代码 ```php $config = Config::get('notify.client'); $desKey = Config::get('notify.des.key'); $time = time().'000'; $iv = substr($time,0,8); $requestHeaders = array_merge([ 'SERVER-TOKEN'=>base64_encode(openssl_encrypt($boxId, 'des-ede3-cbc', $desKey, OPENSSL_RAW_DATA,$iv)), 'SERVER-FACTORY'=>$factory, 'SERVER-TIMESTAMP'=>$time, 'SERVER-KEY'=>strtoupper(md5($path.Config::get('notify.des.key').$iv)), ],$requestHeaders); $client = new \Swoole\Coroutine\Http\Client($config['host'],$config['port'],$config['ssl']); return $client->post($path,$params); ```
发布于4年前 · 2 次浏览 · 来自
提问
sirnice
### 问题描述 守护进程循环读取消息队列,发送http通知,使用v4.4.16占用内存逐渐上升,经测试用v4.5.2不会上涨,目前想升级,但是碰到以下问题: 1.直接替换swoole.so时导致master挂掉,子进程成了僵尸进程(这个影响还好); 2.同一服务器跑了两个swoole的server进程,目前没有问题,但是有上千个连接,so替换时server进程暂时没有异常,但是已经不敢在正式上这么操作 所以请教下大神们有没有什么办法,可以实现影响比较小的升级 我是想先把通知服务用v4.5.2,两个server不中断重启,估计很难吧 另外如果能不升级把内存泄漏问题解决也是很好的 ### Swoole版本,PHP版本,以及操作系统版本信息 ```php centos7 ``` ```php 7.4.3 (cli) (built: Mar 12 2020 15:56:06) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies ``` ```php swoole Swoole => enabled Author => Swoole Team <team@swoole.com> Version => 4.4.16 Built => Mar 12 2020 16:08:43 coroutine => enabled epoll => enabled eventfd => enabled signalfd => enabled cpu_affinity => enabled spinlock => enabled rwlock => enabled openssl => OpenSSL 1.0.2k-fips 26 Jan 2017 pcre => enabled zlib => 1.2.7 mutex_timedlock => enabled pthread_barrier => enabled futex => enabled mysqlnd => enabled async_redis => enabled Directive => Local Value => Master Value swoole.enable_coroutine => On => On swoole.enable_library => On => On swoole.enable_preemptive_scheduler => Off => Off swoole.display_errors => On => On swoole.use_shortname => On => On swoole.unixsock_buffer_size => 8388608 => 8388608 ``` ### 相关代码 ```php $config = Config::get('notify.client'); $desKey = Config::get('notify.des.key'); $time = time().'000'; $iv = substr($time,0,8); $requestHeaders = array_merge([ 'SERVER-TOKEN'=>base64_encode(openssl_encrypt($boxId, 'des-ede3-cbc', $desKey, OPENSSL_RAW_DATA,$iv)), 'SERVER-FACTORY'=>$factory, 'SERVER-TIMESTAMP'=>$time, 'SERVER-KEY'=>strtoupper(md5($path.Config::get('notify.des.key').$iv)), ],$requestHeaders); $client = new \Swoole\Coroutine\Http\Client($config['host'],$config['port'],$config['ssl']); return $client->post($path,$params); ```
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2020-08-12
鲁飞
client执行完以后close掉。 替换扩展自然是需要重启的,自行处理好重连的一些逻辑,考虑滚动更新等方式。
赞
0
回复
2020-08-12
sirnice
回复
鲁飞
试了执行了close还是一样的
赞
0
回复
2020-08-12
sirnice
回复
鲁飞
暂时用一个静态变量解决了 if(null === self::$client) { self::$client = new \Swoole\Coroutine\Http\Client($config['host'],$config['port'],$config['ssl']); }
赞
0
回复
微信公众号
热门内容
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。