Java Agent对系统性能影响有多大

admin 2022年5月8日15:37:38评论173 views字数 997阅读3分19秒阅读模式

背景介绍


    现有基于Java Agent的产品比如APM(Application Performance Management)、RASP诊断工具、跟踪工具、测试平台一般声称他们产品对系统性能影响大概是X%。

    事实上,Java Agent对原始Java应用程序的影响真的可以用一个简单的数字表示么?网上有篇文章[1]分析的比较有意思,下文主要是参考原始作者的文章进行阐述。


系统资源损耗

    业务应用应该避免系统资源耗尽。引起这种问题的原因可能是业务应用本身,可能是Java Agent,也可能是同台主机上的其他进程。

  • CPU

  需要加入限流(throttling)机制,或者消耗cpu的计算放到另外的主机服务器上进行,同注入的Java进程隔离。
  • 内存

 堆内内存+堆外内存(本地内存)损耗,甚至可能引起OOM Killer直接杀掉内存占用大的进程。
  • 磁盘空间和磁盘I/O

  避免日志文件把磁盘空间撑爆了。
  • 网络I/O

  对应采集数据并上报的Java agent需要避免过多占用网络带宽。考虑高效的数据结构或者压缩数据或者采样等。

  

常见问题

  •  GC

 Java Agent逻辑中new了堆对象。这些对象会增加GC的频率和STW的时间,影响系统吞吐量和响应时间。比如 java agent 修改的是一个Http请求的入口类,并获取Http header等请求参数,如果按照流行的greys[2]的SPY方式,是会创建很多的对象。
  • 破坏JIT优化

  Java Agent动态修改运行时Java应用的字节码会破坏JIT优化。简单的例子比如增加方法的大小,会影响内联(inlining)优化。另外一个是逃逸分析(Escape Analysis)。简单来说,就是堆对象栈上分配。如果java agent中用到了堆上对象就不会进行栈上分配的优化了。
  • 其他

结论

    不要相信产品提供的通用性能指标。在自己的环境,压测开启和关闭Java Agent的性能指标数据,测试对比系统性能比如吞吐量/延迟/TPS等。


参考链接:

  1. https://plumbr.io/blog/java/lies-damn-lies-and-our-performance-overhead-is-2 

  2. https://github.com/oldmanpushcart/greys-anatomy


原文始发于微信公众号(RASP安全技术):Java Agent对系统性能影响有多大

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月8日15:37:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Java Agent对系统性能影响有多大http://cn-sec.com/archives/986854.html

发表评论

匿名网友 填写信息