Oracle 데이터베이스에서 스트레스 테스트의 일부로 오랫동안 코드를 실행하고 Java 버전 "1.4.2"를 사용하고 있습니다. 간단히 말해서, 내가하고있는 일은 다음과 같습니다.내 코드의 메모리 부족 예외
while(true)
{
Allocating some memory as a blob
byte[] data = new byte[1000];
stmt = fConnection.prepareStatement(query); // [compiling an insert query which uses the above blob]
stmt.execute(); // I insert this blob-row in the database.
stmt.close();
}
이제이 테스트를 8-10 시간 동안 실행하고 싶습니다. 그러나 분명히 약 15million 레코드를 삽입 한 후에 나는 java.lang.OutOfMemoryError
을 -Xms512m -Xmx2g와 함께 실행하고 있습니다. 나는 더 높은 값을 사용하여 시도하지만 난 그렇게 많은 하드웨어를 갖고있는 것 같다 해달라고하지 어느 쪽도 아니 나는 그것이 REQ 생각하십시오
java -Xms512m -Xmx4g -jar XX.jar
Invalid maximum heap size: -Xmx4g
The specified size exceeds the maximum representable size.
Could not create the Java virtual machine.
java -Xms2g -Xmx3g -jar XX.jar
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
난이 다중 스레드 프로그램으로 실행합니다. 이렇게 arnd 10 개의 실은 삽입을하고있다.
아마도이 프로그램을 이식 할 수있는 방법이있을 수 있습니다. 나는 이것을 8-10 시간 대신 15-20 시간 동안 달리기로 결심했다면 어떨까요?
편집 : stmt.close를 추가했습니다. 이미 코드에서 사용하고 있습니다. 의견에 따라 일부 변경
감사
PS : NDA
의 코드 벡를 게시하지 못할 미안
프로세스에 대한 시스템 하드 제한을 확인 했습니까? 사용중인 쉘에 따라 limit 또는 ulimit을 사용하여 확인할 수 있습니다. – Pirooz
"당신 생각"? 프로파일 러를 나가서 실제로 무슨 일이 일어나는지보십시오. –
예외는 코드 행에서 byte []를 수행합니다. data = new byte [1000]; – codeObserver