webman 二进制打包后,执行stop出现报错 zend_mm_heap corrupted

xiaopi

问题描述

php8.0 webman build:bin
执行./build/sentences-core-1.0.0.bin start
ctrl+C退出,出现错误 zend_mm_heap corrupted

执行./build/sentences-core-1.0.0.bin start -d 正常
执行./build/sentences-core-1.0.0.bin stop 同样报错

报错信息

Workerman[./build/sentences-core-1.0.0.bin] stop 
Workerman[./build/sentences-core-1.0.0.bin] is stopping ...
zend_mm_heap corrupted
zend_mm_heap corrupted
zend_mm_heap corrupted
zend_mm_heap corrupted
zend_mm_heap corrupted
zend_mm_heap corrupted
zend_mm_heap corrupted
zend_mm_heap corrupted
zend_mm_heap corrupted
zend_mm_heap corrupted
Workerman[./build/sentences-core-1.0.0.bin] stop success
zend_mm_heap corrupted

尝试解决方法:

原本是php8.1的开发环境以及使用php8.1打包,但是依旧出现上述相同的错误,参考以下社区答案,切换成php8.0,依旧报错。
https://www.workerman.net/q/10197

截图报错信息里报错文件相关代码

截图

操作系统及workerman/webman等框架组件具体版本

操作系统:Ubuntu 18.04.3 LTS
php版本:PHP 8.0.28 (cli)
workerman/webman-framework:v1.5.2
webman/console:v1.2.33

调试1

重新拉取初始化webman项目,仅安装了webman/console扩展,测试打包二进制,打包后执行二进制文件,虽然没有zend_mm_heap corrupted错误,但是ctrl+C还是会有exit with status 139 错误,查看社区得知是php-cli的扩展有关,这是我的扩展,尝试先调试php-cli扩展,先解决这个问题。
截图

执行php8.0 -m

[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dba
dom
enchant
exif
FFI
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
igbinary
imap
intl
json
ldap
libxml
mbstring
memcached
msgpack
mysqli
mysqlnd
odbc
openssl
pcntl
pcre
PDO
pdo_dblib
PDO_Firebird
pdo_mysql
PDO_ODBC
pdo_pgsql
pdo_sqlite
pgsql
Phar
posix
pspell
readline
redis
Reflection
session
shmop
SimpleXML
snmp
soap
sockets
sodium
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tidy
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
xsl
Zend OPcache
zip
zlib

[Zend Modules]
Xdebug
Zend OPcache

以上并未发现问题

调试2

通过移除composer包来排查
多次尝试,发现webman-tech/laravel-http-client会导致出现zend_mm_heap corrupted错误。
通过控制变量,重新克隆新webman项目到本地,仅安装webman/console,webman-tech/laravel-http-client两个包,依旧报错。 基本可以确定是http-client包导致的问题,请问大佬有解决方法么,这个包是真的好用啊 @krissss

864 3 0
3个回答

SillyDog

可以提供最小复现代码嘛?

  • xiaopi 2023-04-24

    我试试把业务代码逐个注释了,依次打包会不会出问题

  • xiaopi 2023-04-24

    老哥我新拉取的webman项目,执行ctrl+c还是会报错,虽然报错的原因换了。可能和我php-cli的扩展有关么? 我的扩展已经在问题上列出来了

  • 智佳思远 2023-04-24

    禁用 OPcache 扩展

  • xiaopi 2023-04-24

    opcache扩展没开,而且把xdebug扩展注释了,还是会出现exit with status 139错误

  • xiaopi 2023-04-24

    目前排查是因为安装了webman-tech/laravel-http-client这个HTTP包,卸载了就不会报错了,但是这个包很好用,看看还有没有解决方法

SillyDog

rootÉ97dc6763f808:/var/www/webman# export USE_ZEND_ALLOC=0
rootÉ97dc6763f808:/var/www/webman# ./build/webman.bin start -d
WorkermanÄ./build/webman.binÅ start in DAEMON mode
Segmentation fault
------------------------------------------- WORKERMAN -------------------------------------------
Workerman version:4.1.9 PHP version:8.0.28 Event-Loop:ÖWorkermanÖEventsÖEvent
-------------------------------------------- WORKERS --------------------------------------------
proto user worker listen processes status
tcp root webman http://0.0.0.0:8787 64 ÄOKÅ
tcp root monitor none 1 ÄOKÅ

Input "php ./build/webman.bin stop" to stop. Start success.

rootÉ97dc6763f808:/var/www/webman# ./build/webman.bin stop
WorkermanÄ./build/webman.binÅ stop
WorkermanÄ./build/webman.binÅ is stopping ...
WorkermanÄ./build/webman.binÅ stop success
Segmentation fault
rootÉ97dc6763f808:/var/www/webman#

尝试在命令行中使用 export USE_ZEND_ALLOC=0 可以解决
这是我查阅的文档,希望对你有帮助
https://cloud.tencent.com/developer/ask/sof/93873

  • xiaopi 2023-04-27

    十分感谢,我试试。研究下这个设置是干啥的

  • xiaopi 2023-04-28

    执行export USE_ZEND_ALLOC=0 后,stop以后,错误变成了Segmentation fault (core dumped)

crazywhalecc

这个问题我之前也遇到过,可能和 phpmicro 本身有关系。我先去和 phpmicro 的作者反馈一下,如果有人有一个简单复现的 demo 的话感激不尽!

  • 暂无评论
年代过于久远,无法发表回答
🔝