Skip to content
This repository has been archived by the owner on Oct 12, 2022. It is now read-only.

4.2版本tars框架服务没有数据上报 #518

Open
aodashuai001 opened this issue Aug 16, 2022 · 9 comments
Open

4.2版本tars框架服务没有数据上报 #518

aodashuai001 opened this issue Aug 16, 2022 · 9 comments

Comments

@aodashuai001
Copy link

aodashuai001 commented Aug 16, 2022

环境:

SkyAPM-php-sdk:4.2
php:7.2.23
swoole:4.4.6
tars:2.2.5

bug描述
按照文档安装一切顺利,swoole服务可以正常上报,但是tars框架的服务没有数据上报。
没有输出错误日志和其他异常日志

是不支持tars框架吗?

@aodashuai001 aodashuai001 closed this as not planned Won't fix, can't repro, duplicate, stale Aug 16, 2022
@aodashuai001 aodashuai001 reopened this Aug 16, 2022
@aodashuai001
Copy link
Author

@heyanlong 大佬有时间指教下吗?

@aodashuai001
Copy link
Author

aodashuai001 commented Aug 22, 2022

通过日志打印发现tars的函数入口函数应该是App\Core\{closure},对应的类应该是App\Core\Tars
但是在php_skywalking.h头文件中,定义的函数是onRequest,定义的类是Tars\core\Server,会导致请求不能开启一个trace。
在修改了php_skywalking.h的函数为App\Core\{closure},类App\Core\Tars后,却发现虽然请求进入了sky_request_init函数,但是数据依然没有上报,manager.cc文件的Manager::consumer消费并没有执行,而且接口无响应(无限等待中)
然后在应用程序日志显示:

[2022-08-22 17:03:24 $32586.0] WARNING swManager_check_exit_status: worker#2[pid=27167] abnormal exit, status=0, signal=11
A bug occurred in Swoole-v4.4.6, please report it.
The Swoole developers probably don't know about it,
and unless you report it, chances are it won't be fixed.
You can read How to report a bug doc before submitting any bug reports:

swoole/swoole-src#2000
Please do not send bug reports in the mailing list or personal letters.
The issue page is also suitable to submit feature requests.

@aodashuai001
Copy link
Author

请求的这个worker进程直接退出,信号为11,意思是读取了非法的内存。不知道为啥会这样。

@aodashuai001
Copy link
Author

定位到了SKYWALKING_G(is_swoole) = true;这一行,只要注释掉这一行,就不会报signal=11进程异常退出

@heyanlong
Copy link
Member

需要看一下tars的入口函数是什么。可以发一个最小代码吗?目前e2e没有包含tars测试。

@aodashuai001
Copy link
Author

aodashuai001 commented Aug 26, 2022

需要看一下tars的入口函数是什么。可以发一个最小代码吗?目前e2e没有包含tars测试。

tars的入口应该是没错的,我最开始出现问题的地方应该是我们这边的项目覆盖了onRequest回调,是在App\Core\Tars里。
现在的问题是进程会异常退出,报signal 11,我调试了一下,发现是在PHP里http request对象的指针地址读取错误,我目前发现了两处疑似导致问题的地方:
1 调用SKYWALKING_G(is_swoole) = true;赋值,因此我改用其他全局变量的方式实现这个逻辑,就能够恢复正常。
2 调用sky_find_swoole_fd函数就会出现,此处没有找到好的解法,我尝试注释此行,用常量1返回就可以,这里不知道怎么替换

@heyanlong
Copy link
Member

重写onRequest没关系,还是会继续处理swoole的onRequest

@aodashuai001
Copy link
Author

aodashuai001 commented Aug 26, 2022

重写onRequest没关系,还是会继续处理swoole的onRequest

现在的问题是

1 调用SKYWALKING_G(is_swoole) = true;赋值,因此我改用其他全局变量的方式实现这个逻辑,就能够恢复正常。
2 调用sky_find_swoole_fd函数就会出现,此处没有找到好的解法,我尝试注释此行,用常量1返回就可以

这两处会导致php服务读取http request header时,指针地址错误,这个问题我怎么看源码都看不出问题来,怀疑是swoole的bug。

@heyanlong
Copy link
Member

发一下你怎么改的,再发一下demo代码,我本地测试一下。

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants