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
操作系统:Ubuntu 18.04.3 LTS
php版本:PHP 8.0.28 (cli)
workerman/webman-framework:v1.5.2
webman/console:v1.2.33
重新拉取初始化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
以上并未发现问题
通过移除composer包来排查
多次尝试,发现webman-tech/laravel-http-client
会导致出现zend_mm_heap corrupted
错误。
通过控制变量,重新克隆新webman项目到本地,仅安装webman/console
,webman-tech/laravel-http-client
两个包,依旧报错。 基本可以确定是http-client包导致的问题,请问大佬有解决方法么,这个包是真的好用啊 @krissss
可以提供最小复现代码嘛?
我试试把业务代码逐个注释了,依次打包会不会出问题
老哥我新拉取的webman项目,执行ctrl+c还是会报错,虽然报错的原因换了。可能和我php-cli的扩展有关么? 我的扩展已经在问题上列出来了
禁用 OPcache 扩展
opcache扩展没开,而且把xdebug扩展注释了,还是会出现exit with status 139错误
目前排查是因为安装了
webman-tech/laravel-http-client
这个HTTP包,卸载了就不会报错了,但是这个包很好用,看看还有没有解决方法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
十分感谢,我试试。研究下这个设置是干啥的
执行export USE_ZEND_ALLOC=0 后,stop以后,错误变成了Segmentation fault (core dumped)
这个问题我之前也遇到过,可能和 phpmicro 本身有关系。我先去和 phpmicro 的作者反馈一下,如果有人有一个简单复现的 demo 的话感激不尽!