전체 글
322[H2] insert 방식에 따른 성능 테스트
사용중인 h2 database의 insert 방식을 개선하기 위해서 성능을 테스트해 보았습니다. 현재 구성된 간단한 구조는 다음과 같습니다. - 구성: Java, h2 database(Embedded mode-1.3.169), mybatis, RMI(Remote Method Invocation) - 시나리오 1) 다른 프로세스로 부터 RMI(Remote Method Invocation)를 통하여 로그를 수신 받는다. 2) 수신된 로그는 곧바로 h2 database에 insert 한다. 3) h2 database를 통하여 모니터링 정보를 표시한다. 위 시나리오 중에서 2)번에 해당하는 insert 부분에 대하여 성능 테스트를 해 보았습니다. 1) 방식 1 - 단일 쿼리수신된 로그를 곧바로 insert 한다..
Programming/Database 2016.09.26 Joshua95리눅스 계정 관련
리눅스를 사용하다 보면 빈번하게 필요한데 헷갈리는 명령어들이 있습니다.이번에는 사용자 변경과 권한 주기 입니다. * 사용자 변경하기 > chown -R tuser:users ${CUSTOM_DIR} * 사용자 권한 변경하기 (root 권한주기-tuser) 1) /etc/group 에서 tuser 계정 추가root:x:0:root,tuser 2) 리눅스 일반 사용자에게 루트 권한주기 2-1) sudoers 파일 권한 설정 변경 # chmod 660 /etc/sudoers 2-2) /etc/sudoers 에서 tuser를 root 그룹에 추가 root ALL=(ALL) ALLtuser ALL=(ALL) ALL 2-3) 파일 권한 원상복귀하기 # chmod 440 /etc/sudoers 처음부터 리눅스 개발자..
Programming/Linux 2015.11.09 Joshua95[Lucene] Index Merge 중 에러
lucene index를 시간 단위로 저장하다 보니, 파일의 개수가 많아지는 문제가 있습니다.이를 해결하고자 하루에 한번 인덱스를 머지해 주는 작업을 추가했습니다. 한참 추가한 기능을 테스트해 보던 차에 아래와 같은 처음보는 오류가 나서 화들짝 놀랐습니다. [ 에러 메시지 ]java.io.IOException: background merge hit exception: _12y(4.9):C24447062 _tl(4.9):C23308858 _7l(4.9):C18047857 _go(4.9):C14199334 _19d(4.9):c11862652 _l4(4.9):C11815951 원인을 분석해 보니 해당 오류는 lucene forceMerge 중에 디스크가 Full이 되면서 디스크 확보가 되지 않아서 발생한 것이..
Programming/Lucene 2015.06.03 Joshua95[Lucene] 3.5에서 4.9로 업그레이드 시 고려사항
사용하던 Lucene의 버전을 3.5에서 4.9로 업그레이드 하려고 합니다.우선 라이브러리 교체 후 코드가 돌아가기 위한 최소한의 고려 사항을 정리해 보았습니다. 루씬의 버전을 3.5에서 4.9로 업그레이드 시에 고려해야 될 사항입니다. 1) Field 사용 변경 (Field.Store.YES + NOT_ANALYZED_NO_NORMS -> StringField)document.add(new Field("Name", texts, Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS)); --> document.add(new StringField("Name", texts, Field.Store.YES)); 2) Field 사용 변경 (Field.Store.YES + A..
Programming/Lucene 2014.09.29 Joshua95Quartz의 misfired trigger 처리 정책
특정 데몬 hang을 분석하면서 Quartz를 의심하여 추적하다보니 (미안하다 쿼츠야, 내가 널 의심했구나아. ^^;) 평소 궁금했던 내용을 만나게 되어 저처럼 궁금한 사람이 있을 듯 하여 정리합니다. Q. 스케쥴러가 제때 실행이 안되면 어떻게 되나요?데몬이 멈추는 이슈가 Quartz의 스케쥴러가 밀리면서 해당 작업에 대한 일이 밀려서가 아닐까 의심하다. A.그건 오해야~ ^^스케쥴링을 하다보면 시간내 작업이 끝나지 않을 경우, 다음 스케쥴을 실행 할 수 없습니다.이처럼 다음 스케쥴이 실행되지 않을 경우를 misfired trigger 라고 하는데, 이러한 misfired trigger만을 위한 별도 정책을 설정하여 처리할 수 있습니다. misfired로 인식하는 시간은 설정이 가능하며 (misfired..
Programming/Java 2014.05.19 Joshua95JVM 메모리 설정
* JVM 메모리 설정 Java 데몬을 구동하다 보면 JVM 메모리를 직접 설정해 주어야 할 때가 많습니다.특히 공포의 OOM(Out Of Memeory)를 만나고 나면 이 설정을 피할수가 없습니다. 다음은 Java 구동시 대표적인 메모리 설정 argument 입니다. -Xmx256M : 최대 Heap 크기-Xms128M : 초기 구동시 Heap 크기-Xss128K : 스레드에 할당할 스택 크기-XX:MaxPermSize : 최대 Perm 크기-XX:PermSize: 초기 Perm 크기 - From Joshua(2014.04.21)
Programming/Java 2014.04.21 Joshua95Java VisualVM을 이용해서 Remote 장비 리소스 모니터링하기
* Java VisualVM을 이용해서 Remote 장비 리소스 모니터링하기 Java로 서버를 구동하다 보면, 자바의 속이 궁금할 때가 참 많습니다.도대체 메모리를 어느 스레드가 얼마나 쓰고 있는 것인지, 어떤 스레드가 도대체 CPU를 그렇게 잡아 먹고 있는 것인지, 디스크 사용량은 얼마나 되는 것인지 등등 속을 알 수 없어서 답답합니다. 이러한 답답함을 해결할 수 있는 쉬운 방법 중에 하나가 VisualVM이라는 툴을 이용해서 서버의 내부를 들여야 보는 것지요.CPU와 메모리, 디스크는 물론이고 각 스레드별 사용 메모리까지도 파악할 수 있어서 유용하게 디버깅이나 모니터링이 가능합니다. Java VisualVM을 사용하기 위해서는 기본적으로 다음 작업을 수행해 주어야 합니다. 1) 서버의 catalina..
Programming/Java 2014.04.18 Joshua95