Background Image
조회 수 40190 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

CUBRID Java Stored Procedure DB Server Memory 관계

소개: CUBRID Java Stored Procedure(이하 JSP)를 사용하는 중 java.lang.OutOfMemoryError: unable to create new native thread 라는 오류가 발생하는 경우 원인을 파악하기 위해 JSP DB Server Memory의 관계를 알아보고, 해결 방법을 제시하고자 한다.

 

JSP DB Server Process 관계

JSP DB Server Process와의 관계를 먼저 간단히 설명하겠다.

JSP를 사용하기 위해 CUBRID 설정 파일인 cubrid.confjava_stored_procedure=yes로 설정한 후 cubrid server start를 수행하면 DB Server Process JVM을 포함하여 함께 구동된다. 이때부터 CUBRID JSP를 사용할 수 있는 환경이 구성되는 것이다.

다음은 수행하고자 하는 로직을 java로 작성하여 compile 한 후 loadjava를 수행하여 DB Server에 로딩하고, DB에 해당 클래스를 사용할 수 있도록 등록해준다.(자세한 사용법은 매뉴얼 CUBRID SQL 설명서 > Java 저장 함수/프로시저 부분 참고)

여기까지 완료되고 나면 JAVA 프로그램이나, CUBRID Manger를 통해 JSP를 요청하게 되는데, 이 요청을 받은 Broker는 가용한 cas에게 작업을 할당하게 되고, cas DB Server process에 포함되어 있는 JVM 내부에 JSP thread를 생성한다.

따라서 JVM JSP thread는 최대 MAX_NUM_APPL_SERVER(cubrid_broker.conf)에 설정되어 있는 값만큼 생성된다.

JSP DB Server Memory관계

지금부터는 이 문서에서 다루고자 하는 JSP DB Server Memory관계를 설명하고, OutOfMemoryError이 발생하는 원인을 설명하도록 하겠다.

DB Server가 사용하는 Memorydata buffer, log buffer 등 데이터 처리를 위해 사용하는 부분과 JVM이 사용하는 부분으로 구분할 수 있다.

위에서 JSP가 요청되면 JVM 내부에 thread가 생성된다고 하였다. thread JVM Memory영역 중 Stack 영역에 Java Stack을 생성한다.

아래는 이것을 간단히 도식화한 그림이다.



“java.lang.OutOfMemoryError: unable to create new native thread” JVM Java Stack을 생성해야 하는데 Memory가 부족하여 Java Stack를 생성하지 못하여 thread도 생성하지 못하여 발생하는 오류이다.

이것은 경우에 따라 세 가지로 구분해볼 수 있고, 해결 방법은 아래와 같다.

1.     JSP로 사용될 JAVA Program에서 메모리 누수가 발생하여, Heap 영역에 리소스가 부족하게 되고, Stack 생성에 필요한 Heap 영역 리소스 확보가 안 되는 경우

è JAVA Program에서 메모리 누수가 발생하는 부분을 해결한다.

2.     JVM에 할당된 Memory를 넘는 Java Stack 생성을 요청한 경우

è 이러한 경우 JVM thread stack 사이즈를 줄여 주면 생성될 수 있는 Java Stack의 개수가 늘어난다.

설정 방법 : ex) .bash_profile export _JAVA_OPTIONS=”-XX:ThreadStackSize=128

è Heap 영역의 사이즈를 줄여 Stack영역에서 더 많이 사용할 수 있게 한다.

설정 방법 : ex) .bash_profile export _JAVA_OPTIONS=”-Xmx512m

3.     32bit OS Process 별 메모리 사용한도인 3G를 넘는 Memory를 사용하려 하는 경우

è DB Server process 메모리에 영향을 주는 data_buffer_pages 값을 줄여 준다.

설정 방법 : $CUBRID/conf/cubrid.conf data_buffer_pages 값을 변경하고, cubrid server restart db_name 을 수행

è 1번의 두 번째처럼 Heap 영역의 사이즈를 줄여 준다.

è MAX_NUM_APPL_SERVER를 줄여 JSP 요청을 줄여 준다.

설정 방법 : $CUBRID/conf/cubrid_broker.conf의 해당 브로커의 MAX_NUM_APPL_SERVER의 값을 변경하고, cubrid broker restart broker_name을 수행.

TAG •

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
166 기타 [10.2 path] - 생성된 view구문을 'show create view' 수행 시 정상적으로 출력되지 않던 이슈 patch 큐브리드_김주현 2020.11.09 886
165 기타 큐브리드10.1 에서 윤초 지원 옵션 사용하기 최광일 2017.09.13 1419
164 Linux <주의> 생성한 DB볼륨을 절대! 삭제하지 말자 큐브리드_김주현 2019.09.30 1598
163 Install [linux] wget으로 제품 다운로드 시 "wget: unable to resolve host address ‘ftp.cubrid.org’" 해결방 큐브리드_김주현 2021.07.02 2264
162 기타 ERwin을 이용한 CUBRID 포워드 엔지니어링 file 민순 2020.07.14 2316
161 기타 따라하면 쉬운 compactdb 사용법 file 허서진 2017.07.01 2528
160 기타 ERwin을 이용한 CUBRID 리버스 엔지니어링 file 민순 2020.07.13 3462
159 Java JDBC를 사용한 다중화 구성 SELECT Query 부하 분산 가이드 file 윤준수 2017.03.30 3946
158 튜닝 다중컬럼 조건에 대한 인라인뷰 처리방안 2 박동윤 2016.12.27 6012
157 기타 PyCharm을 이용한 CUBRID, Django 연동 가이드 file 진우진 2016.04.11 8152
156 Java CUBRID에서 Java AddBatch 사용 엄기호 2016.06.28 8365
155 기타 CUBRID Migration Toolkit을 이용한 단계별 마이그레이션 진행 방법 file 진우진 2015.12.15 9542
154 PHP CUBRID HA 환경에서 Apache-PHP 설정 가이드 이용미 2015.06.16 10665
153 기타 CUBRID isolation level & Dirty Read 정만영 2015.05.29 11314
152 기타 알고 보면 쉬운 cubrid lockdb 유틸리티 file 김승훈 2015.12.08 12076
151 Windows Windows 에 설치 된 JRE 설치 위치 확인 하기. file 성진 2015.05.28 12571
150 기타 데이터 확인에 정규표현식을 사용 해 보자. 성진 2016.03.01 12759
149 기타 CUBRID 2008 R4.0 파라미터 변경 사항 (일부) file admin 2011.07.14 13154
148 Linux 가상머신 환경에서 리눅스 및 큐브리드 설치 가이드 file 이경오 2015.07.14 13399
147 기타 콘솔에서 마이그레이션 하기. file 권호일 2015.06.19 13432
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales