log4j 日志过多会影响应用程序性能的原因/影响程度?

pcrecxhr  于 2022-11-06  发布在  其他
关注(0)|答案(4)|浏览(1732)

我最近才听说过多的日志记录会影响我们应用程序的性能。(如将字节流发送到控制台或写入文件),并且我们还了解到,当发生IO绑定作业时,不会使用CPU周期(此时CPU处于空闲状态)那么,如果IO没有占用CPU周期,它为什么会影响应用程序的性能呢?

ss2ws0br

ss2ws0br1#

日志记录会以两种方式影响应用程序的性能。
首先,您正在使用的API可能会在应用程序代码中创建大量字符串,这会占用CPU周期,并创建需要收集的垃圾。
其次,日志记录线程需要在将字符串写入磁盘之前对其进行格式化。
根据日志记录的频率和所记录消息的复杂性,这可能会消耗比预期更多的CPU周期。请注意,存在许多未知数,如计算机拥有的内核数、应用程序代码需要的内核数等...
理想的做法是分析应用程序,以了解CPU使用率实际来自何处。

aiqt4smr

aiqt4smr2#

所以这样对待它:
当您在调试级别添加大量日志并在信息级别配置上运行应用程序时,您的程序仍然会计算消息并评估日志级别条件。
然后是GC的开销,你可能会把你的日志发送到一些监控系统,或者一个集中的日志记录机制,等等,这都需要CPU周期和内存。
使用lambda在java中写日志有很强的论据,因为如果你写一个带有字符串计算的日志,计算只会在满足级别检查后发生。

3mpgtkmj

3mpgtkmj3#

日志记录对于应用程序开发非常重要,因为它会影响性能。
日志记录通常涉及写入文件,并且此类I/O操作比基本CPU/内存中流消耗更多的资源,正如在示例高规模测试执行中所看到的,在该示例中,我们可以看到长时间的处理时间忙碌日志记录:

注意:我是这篇博客文章的作者,Logging impact on application performance

hrysbysz

hrysbysz4#

它肯定会影响应用程序的性能。
1.当你调用一个日志方法时,你为这个调用分配了一个特定的堆栈。根据你记录日志的位置(控制台,文件等),CPU的使用可能会不同。
1.从内存和垃圾收集的Angular 来看,字符串本身是很重的对象。通常,string-pool在日志语句中没有用处。
1.您的日志提取器通常作为库添加到您的应用中,它读取这些日志并将它们推送到远程服务器(AppInsights)。这会占用您的应用进程的一定CPU和I/O。这些库通常实现了微批处理以减少副作用,但它仍然存在。
1.通常日志记录是异步的,所以它不会对你当前的调用造成太大影响,但是整个应用可能会面临一些压力。理想情况下,在我们真正开始批量日志记录之前,这应该不会太大。这就是为什么我们通常只在生产中启用警告和更高级别。

相关问题