跨平台的 CoreCLR Profiler技术选型讨论
liuhaoyang opened this issue · 6 comments
liuhaoyang commented
目前已知如下方案可实现跨平台的CoreCLR Profiler
liuhaoyang commented
liuhaoyang commented
- 使用CoreCLR提供的非托管Profiling API实现CoreCLR监控,需使用c++实现,已知部分商业APM使用此方案,如听云。
liuhaoyang commented
netcore-jroger commented
分别实现也是为了性能数据,如果从 CoreCLR 提供的非托管 Profiling API 拿到的性能数据够用的话,那就只写一份代码多好呀。
liuhaoyang commented
@netcore-jroger Profiling API 不能调研托管代码也不能被托管代码调用,需要收集和通信全部用cpp写,开发和维护成本是问题
bittercookie commented
@netcore-jroger Profiling API 不能调研托管代码也不能被托管代码调用,需要收集和通信全部用cpp写,开发和维护成本是问题
托管代码可以调用Profiling dll里面的代码,Profiling dll也可以调用托管代码,前者容易实现,后者稍微复杂一些。
但“开发和维护成本是问题”,这个结论是没错的。
Dynatrace、AppDynamics、Newrelic 等APM架构大致如下:
工具分为Profiling dll和托管代码2部分
-
Profiling dll仅实现通用的IL改写功能,不实现任何业务逻辑。
Profiling dll通过xml或json配置文件根据定制的规则嵌入托管代码。
Profiling dll写好后,增加新的监控逻辑代码不需要改动,只需要更改配置文件和对应的托管代码就可以了。 -
托管代码实现具体的业务逻辑
实现嵌码后的数据拦截、性能数据的汇总、与报表服务器的通讯