一个月前做了一个Ruby的开源项目,用来做性能测试用的,功能是提供一个性能测试的环境,做好了写日志、存储结果、数据计算分析等方法,使用者只要用Ruby写个代码块,然后丢给这个环境的一个方法去反复迭代执行,就完成了压力的生成,这是最简单的模型。
这个版本目前已经到了3.1了,之前我用的还不错,后来发现,随着代码不断的改动,功能不断的丰富,这个环境(我就先叫这个项目为环境吧,叫XXXX框架什么的太装B了)执行迭代的速度越来越慢,抽了个空,又回头看了下我写的代码,终于发现了大部分的问题所在。
在负责迭代执行的一个方法内,有一条代码负责记录该次执行时的日志。我们都知道,日志是分级别的,当前环境变量中设定的级别要是高于代码中要显示日志的级别时,该条日志将不输出。我写代码的时候以为它不输出就不会消耗太多性能,结果注释掉这些日志方法后,发现这个环境的迭代执行效率提高了4倍!
请看下面这个代码:
self.log.debug "IterationID is #{self.iterationId};UserID is #{self.userId};This Action Cost #{rcost} seconds"
为啥呢?
我认为是:即便当前环境设定输出的日志级别是:Error或者更高,但是解释器执行到这段代码是肯定有个判断的过程,先得到环境设定好的日志级别和该代码的级别,然后做个判断,再决定是否写入。就是这个判断,消耗了太多的性能。
平时这个东东用在普通的项目里(rails,sinatra等),不太会发现有什么大问题,往往别的问题性能比较严重。但我把它用在一个压力生成的环境中,每次运行都会跑上千上万次,于是性能问题就凸现出来了。
像这种问题,如果不亲身经历,估计不太会被关注,趁着年轻,多多积累经验吧。
分享到:
相关推荐
**Ruby-Log4r:全面灵活的日志解决方案** 在Ruby编程中,日志记录是必不可少的,它帮助开发者追踪程序运行状态,...通过熟练掌握Log4r,开发者可以更有效地管理和监控程序的运行状态,提高开发效率和问题排查能力。
log4r-logstash log4r-logstash 允许您使用 json 编码将 Log4r 日志事件发送到 Logstash。 它目前仅支持 redis 传输,但可以根据需要轻松扩展到其他传输。 安装 将此行添加到应用程序的 Gemfile 中: gem 'log4r-...
在IT行业中,日志记录是不可或缺的一个环节,它在系统调试、问题排查、性能分析等方面发挥着重要作用。本文将深入探讨两种广泛使用的日志框架——NLogger和log4net,在写入日志性能方面的差异。 NLogger是一款轻量...
在软件开发过程中,日志记录是一项至关重要的任务,它可以帮助开发者追踪程序运行状态、定位问题以及进行性能优化。Log4j2作为Java领域广泛使用的日志框架,以其高效、灵活的特点深受青睐。本文将基于"Log4j2 Demo...
### log4j乱码问题解决办法 #### 一、引言 在开发过程中,日志记录是必不可少的一个环节。良好的日志系统可以帮助开发者快速定位问题并进行调试。Log4j作为一款广泛使用的Java日志框架,在很多项目中扮演着重要...
高通QXDM常规操作及外场常见性能问题分析思路 ...QXDM 和 QCAT 是高通终端调测和 Log 查看的重要工具,熟练掌握 QXDM 的常规操作和外场常见性能问题分析思路,对于解决性能问题和 Crash 问题具有重要的作用。
例如,IIS(Internet Information Services)作为Windows操作系统下的Web服务器,会生成.iis.log文件来记录服务器的请求、响应以及可能遇到的问题,这对于优化网站性能和解决服务器故障至关重要。 在开发过程中,....
与Log4j 1.x相比,Log4j2在设计上进行了重大改进,并解决了Logback等其他日志框架中存在的某些体系结构问题。 #### 特性概述 1. **审计功能**:Log4j2设计时考虑到了审计需求,这意味着即使在配置更新过程中,它也...
Log4a is an mmap based, high-performance, highly available Android log collection framework | Log4a 是一个基于 mmap, 高性能、高可用的 Android 日志收集框架
应用日志通常由开发者使用`Log.d()`, `Log.e()`, `Log.w()`, `Log.i()`等方法打印,记录程序运行过程中的状态和信息。错误堆栈信息则包含了异常发生时的详细位置和原因。 对于ANR问题,Logcat中的错误信息会指向...
然而,通过启用异步日志模式,Log4j2会将日志事件放入一个队列,然后由一个单独的后台线程处理这些事件,从而避免了主线程的阻塞,提高了应用程序的响应速度。 在"Log4j2Test"压缩包中,可能包含了以下内容: 1. ...
在IT行业中,日志记录是系统开发不可或缺的一部分,它能够帮助开发者追踪程序运行状态、定位错误及调试问题。Log4cxx是Apache软件基金会的一个开源项目,它是C++版的log4j,提供了一套强大的日志处理机制。本文将...
它使用工作队列来收集日志消息,然后由后台线程负责实际的输出工作,这样可以确保主程序的流畅运行,不会因日志操作而降低性能。 ### 4. 错误处理和崩溃安全 在发生错误或者应用程序崩溃时,g3log会尝试捕获这些...
`log4z`考虑了性能问题,当日志级别高于实际记录级别时,日志输出会被忽略,避免了不必要的计算开销。此外,多线程支持使得在高并发环境下也能稳定工作。 ### 7. 扩展与自定义 除了基础功能,`log4z`还提供了插件...
`spdlog`是一个高效、轻量级且功能丰富的C++日志库,它被设计用来在性能至关重要的环境中提供灵活的日志记录解决方案。作为C++社区中的热门选择,`spdlog`因其出色的性能、简洁的API和高度可配置性而备受赞誉。 ###...
Log4j的各个版本在功能、性能和安全性方面都有所不同,下面将详细介绍这些版本及其特点。 1. Log4j 1.2.6:这是Log4j的一个较早版本,提供了基本的日志记录功能,包括定义不同级别的日志(如DEBUG、INFO、WARN、...
Log4j2作为Log4j的升级版本,它在性能、可配置性和可扩展性上有了显著提升,同时也修复了Log4j的一些已知问题。Fastjson则是阿里巴巴的一个开源项目,它提供了快速的JSON解析和生成性能,广泛应用于Java应用程序的...
log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n') log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout log4j.appender....
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n #log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t...
Log4j是Java编程语言中最常用的日志记录框架之一,由Apache软件基金会开发。它提供了灵活的日志记录功能,使得开发者能够轻松地控制日志信息的输出格式、输出位置以及输出级别。此次提及的`log4j-api-2.12.4.jar`和`...