티스토리 툴바


개발환경2011/08/09 19:15

1. AsyncAppender의 buffer가 full나면, 로그 요청 thread에서 blocking 발생
   -> 자식 appender들이 buffer에 쌓인 로그 이벤트를 처리하여 buffer가 비워질때까지 blocking 유지...
   -> full-GC와 유사한 상황이 발생하게 됨
      (buffer 비우는 동안, 로그가 쌓이고 비워진 buffer가 순식간에 다시 full 되면서 "buffer 비우기 -> (blocking) -> buffer 비우기"가 반복됨)

2. 일반적으로 AsyncAppender는 remote logging시 성능향상을 가져오며, local logging시는 오히려 성능을 저하시킴 (buffering overhead로 인해...)

3. blocking을 하지 않는 옵션이 있으나, log4j 라이브러리 업데이트 필요
   -> setBlocking(false) 설정 가능, 기본 값은 true로 설정되어 있음.
   -> log4j.1.2.14 이후 버전에서 적용 가능

4. Log4j 로깅성능 향상을 위한 다른 방안
   -> WriterAppender.setImmediateFlush(false), 기본값은 true임
        . false 설정 시, 로깅 성능이 10 ~ 20% 정도 향상됨. (출처 : API 문서)
        . false 설정 시, application 종료 시, 마지막 몇 줄의 log가 disk에 기록되지 않을 수 있음 (trade-off)
   -> FileAppender.serBufferedIO(true), 기본값은 false임
        . 로깅 부하가 높은 시스템에서 성능 향상 폭이 큼 (출처 : API 문서)

5. 예시
<appender name="BUFFERED_APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="C:/Logs/myApp.log" />
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<param name="ImmediateFlush" value="false"/>
<param name="BufferedIO" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d] %-5p %C{3}.%M(%13F:%L) %3x - %m%n" />
</layout>
</appender> 

6. 참고자료
   - http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/AsyncAppender.html#setBlocking(boolean)
   - http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/WriterAppender.html#setImmediateFlush(boolean)
   - http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/FileAppender.html#setBufferedIO(boolean)
   - https://issues.apache.org/bugzilla/show_bug.cgi?id=38982
   - http://glueclue.blogspot.com/2007/01/log4j-asyncappender-is-not-always_31.html
   - http://fredpuls.com/site/softwaredevelopment/java/log4j/log4j_performance_tips.htm 
저작자 표시
Posted by 김종윤
분류없음2011/02/28 13:44
운영체제에 따라 다르겠지만 대부분의 경우, OS나 다른 어플리케이션이 해당 단축키를 중복하여 지정하고, 그 우선순위가 이클립스보다 높은 경우에 발생하게 된다.

일반적인 애플리케이션이라면, 해당 애플리케이션이 기동중인 경우에만 문제가 발생하겠지만, 백드라운드에서 항상 동작하는 애플리케이션이라면 항시 문제가 된다.

내 경우에는, 윈도우에서 Intel GMA(Graphics Media Accelerator) 드라이브(driver)를 사용하는데, 이 녀석의 단축키가 중복되어 이클립스에서 동작하지 않았다. 이 녀석 뿐만 아니라, 3rd party 그래픽 드라이버의 경우 사용자 편의를 위해, Ctrl+Alt 조합의 단축키를 제공하는 경우가 종종 있었던것 같다.

다음은 intel GMA 설정에서 단축키가 할당된 모습의 예시다(출처불명)
바로 가기 키 기능을 사용하지 않음으로 설정하여 문제 해결 !

저작자 표시
Posted by 김종윤
분류없음2010/08/18 18:07

저작자 표시
Posted by 김종윤