hyj1991 / easy-monitor

企业级 Node.js 应用性能监控与线上故障定位解决方案
http://www.devtoolx.com
BSD 2-Clause "Simplified" License
3.09k stars 240 forks source link

部署报错,version 'GLIBCXX_3.4.20' not found #157

Closed beforegolive closed 2 years ago

beforegolive commented 2 years ago

尝试在公司内网使用xprofiler,部署时报错,如标题。 连到docker镜像里,列了一下此组件的信息,发现版本只支持到到GLIBCXX_3.4.19。

docker内的系统是centos 7,试着升级组件libstdc++,未成功。

请问,有没有碰过此类问题?建议的解决方案是什么?

hyj1991 commented 2 years ago

你可以升级下 gcc,这里的编译工具链基本都是用的 devtoolset-6 / 8 了

hyj1991 commented 2 years ago

先关闭了,如果有其它问题,欢迎继续回复讨论

beforegolive commented 2 years ago

你好,我直接升级了libstdc++.so.6解决了这个问题,但碰到了另外的问题。

测试环境里,我把每个服务部署好后,console控制台那边看不到数据,不知道该怎么定位。

我弄了一个demo项目,内含一个接口,没有逻辑,直接返回字符串。主入口文件第一行也加了下面代码采集数据: require('xprofiler').start()

引用的xtransit插件配置如下:

image

服务器端方面分别部署了server、manager和console,也填入了相关的配置,服务器之间能相互ping通。

demo项目每次启动时,server那边会写入一条下面这样的日志,然后就没有动静了。 ERROR 52 [-/127.0.0.1/-/2397171ms GET /] client [1, demo-node-first-server-xxxxxxxxxx-xxx, xxxxxxx2342342343242xxx] has been closed.

我尝试用ws工具直连server是能捕捉到对应的日志信息的。

另外,demo项目所在服务器的/tmp目录下有xprofiler-xxxx.log这样的日志信息,如下: image

目前,控制台那边看不到对应的实例信息,日志这边只能查到这一步,然后就不知道该怎么办了。

请问,在部署的easy-monitor的过程中,有没有好的调试和定位问题的办法?

beforegolive commented 2 years ago

补充:在manager的服务器里有下面这样的日志,会请求server服务IP的9090端口,奇怪,我明明在npm start时通过--port把所有端口都改成80了,为啥还有9090端口?

image

hyj1991 commented 2 years ago

补充:在manager的服务器里有下面这样的日志,会请求server服务IP的9090端口,奇怪,我明明在npm start时通过--port把所有端口都改成80了,为啥还有9090端口?

image

更新下 xtransit-server 的代码到最新试试,之前端口是通过读取配置设置进 redis 的,最新的版本修改成从 server info 中获取

hyj1991 commented 2 years ago

参见:https://github.com/X-Profiler/xtransit-server/blob/master/app/service/manager.js#L50

beforegolive commented 2 years ago

拿了xtransit-server最新的代码【master分支】并部署后,依然报错,manager服务的日志报错出现了陌生端口40969。 其中119对应server服务的IP地址,160后缀的IP不知道是哪个服务,和我搭建的服务器的IP对应不上,不知是不是因为docker的缘故。

image

新部署的server端依然只有一行日志: [-/127.0.0.1/-/4055598ms GET /] client [1, demo-node-first-server-xxxxxx-svh5x, 8bae5xxxxxxxxxxxxxxf2090a31aaf7e] has been closed.

server项目的配置项里我多加了一句,不知是否有必要,虽然start脚本里已有--port指定。 config.serverPort = 80;

beforegolive commented 2 years ago

找到原因! egg-scripts start启动时需要指定参数 --daemon,这样端口设置才会生效,不然cluster端口会随机生成一个。

easy-monitor终于跑起来啦 ^_^

多谢帮忙。