검색결과 리스트
Coumputer's에 해당되는 글 15건
- 2009.03.31 malloc에 의한 무한루프
- 2008.07.01 jfreechart에서 한글 문제 해결.
글
malloc에 의한 무한루프
이번에 개발하면서 생겼던 문제를 해결했던 것을 정리합니다. 1. 발생 현상. 다음 예제와 같이 malloc_consolidate () 함수에서 무한 루프 상태임. 이와 비슷하게 다른 thread들, 즉 free를 하는 thread는 sigsuspend상태로 남아있음. 예제) #0 0x40152627 in malloc_consolidate () from /lib/libc.so.6 #1 0x40151c27 in _int_malloc () from /lib/libc.so.6 #2 0x40150e21 in malloc () from /lib/libc.so.6 #3 0x0804e39b in Init_Struct () at pcinfo.c34 #4 0x0806232b in Loading () at login.c638 2. 발생원인 분석. malloc관련 원인으로 판단하여 malloc manpage에 나와있는 환경변수를 이용하여 원인을 찾음. malloc manpage참조. " Linux libc (5.4.23 이후)의 최근 버전과 GNU libc (2.x) 버전 은 환경 변수를 통해조정할수 있는 malloc 수행을 포함한다. MALLOC_CHECK_ 이 설정되었다면, 특별한(덜 효율적이지만) 행 동이 행해지며, 이것은 같은 인자를 가지고 free() 를 두번 호 출하거나 단일 바이트(off-by-one 버그)의 초과 같은 간 단 한 에러에 대한안전을 위해 디자인되었다. 그러나 그런 에러들은 항상 보호되지는 않으며 메모리 릭이 생길수 있다. 만일 MAL- LOC_CHECK_ 을 0 으로 설정하면, 발견된 힙 오염은 무시된다; 만일 1 로 설정하면, 진단은 stderr로 출력된다; 만일 2 로 설 정 하면, abort() 가 즉시 호출된다. 이것은 유용하다. 왜냐하 면 크래쉬가 나중에 생길것이고문제의 원인을 찾아가는것이 매 우 어려워지기 때문이다. " 3. 해결. 1) "export MALLOC_CHECK_ = 1"을 setting후 엔진 동작시 "invalid free"메시지를 확인함. 2) "export MALLOC_CHECK_ = 2"를 setting시 잘못된 메모리 free시 SIGABRT발생(manpage에는 abort()를 실행한다고 나옴). core로 위치 파악을 할 수 있음을 참고하여 엔진에 SIGABRT의 핸들러 등록을 주석처리함. 3) core발생으로 위치 파악하여 원인 해결함. PS : 위 문제는 UTM엔진에서 발생한 문제를 해결했던 절차입니다. 상황에 따라 유동적으로 대처하시면 될 것같습니다. |
설정
트랙백
댓글
글
jfreechart에서 한글 문제 해결.
JRE에 한글 font가 설치 되어있지 않아서 발생하는 문제
JAVA_HOME/jre/lib 폴더에 보면 fontconfig 파일들이 존재한다.
이중 fontconfig.RedHat.properties.src 파일을 fontconfig.properties파일로 복사
fontconfig.properties파일에 쓰기 권한을 주고 편집
#> cp fontconfig.RedHat.properties.src fontconfig.properties
#> chmod +w fontconfig.properties
#> vi fontconfig.properties
--------------- font.config.properties 내용 --------------------------
# 생략
.
.
.
# AWT X11 font paths
awtfontpath.chinese-tw-iso10646=/usr/share/fonts/zh_TW/TrueType
awtfontpath.chinese-cn-iso10646=/usr/share/fonts/zh_CN/TrueType
awtfontpath.japanese-iso10646=/usr/share/fonts/ja/TrueType
awtfontpath.korean-iso10646=/usr/share/fonts/ko/TrueType <---- 이부분을 폰트 파일의 위치로 수정
서버에서 /usr/local/java...(java폴더명은 서버마다 틀릴수 있다.)/jre/lib/ 폴더에 있는
fontconfig.RedHat.properties.src 열고 가장 밑에 부분에 있는 곳을 확인해본다.
........
# AWT X11 font paths
awtfontpath.chinese-tw-iso10646=/usr/share/fonts/zh_TW/TrueType
awtfontpath.chinese-cn-iso10646=/usr/share/fonts/zh_CN/TrueType
awtfontpath.japanese-iso10646=/usr/share/fonts/ja/TrueType
awtfontpath.korean-iso10646=/usr/share/fonts/ko/TrueType
/usr/share/fonts/ko/TrueType 디렉토리를 생성하고 그 디렉토리에
batang.ttc과 gulim.ttc파일을 복사해 넣는다.
tomcat을 재구동 시켜준다.