I've incorporated je berkeleydb into my application and it seems to be working very well. Today a user reported the exception I pasted below. As far as I can tell from the log file, heap memory was available. I've pasted my config below, too.
Any ideas?
java.lang.OutOfMemoryError: null
at java.io.RandomAccessFile.writeBytes0(Native Method) ~[na:1.7.0_45]
at java.io.RandomAccessFile.writeBytes(Unknown Source) ~[na:1.7.0_45]
at java.io.RandomAccessFile.write(Unknown Source) ~[na:1.7.0_45]
at com.sleepycat.je.log.FileManager.writeToFile(FileManager.java:1749) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.je.log.FileManager.writeLogBuffer(FileManager.java:1663) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.je.log.LogBufferPool.writeBufferToFile(LogBufferPool.java:449) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.je.log.LogBufferPool.writeDirty(LogBufferPool.java:408) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.je.log.LogManager.log(LogManager.java:365) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.je.tree.LN.logInternal(LN.java:728) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.je.tree.LN.optionalLog(LN.java:447) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.je.dbi.CursorImpl.insertRecordInternal(CursorImpl.java:1478) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.je.dbi.CursorImpl.insertOrUpdateRecord(CursorImpl.java:1280) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.je.Cursor.putNoNotify(Cursor.java:2504) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.je.Cursor.putNotify(Cursor.java:2365) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.je.Cursor.putNoDups(Cursor.java:2223) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.je.Cursor.putInternal(Cursor.java:2060) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.je.Cursor.put(Cursor.java:730) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.util.keyrange.RangeCursor.put(RangeCursor.java:1066) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.collections.DataCursor.put(DataCursor.java:788) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.collections.StoredContainer.putKeyValue(StoredContainer.java:359) ~[je-6.4.25.jar:6.4.25]
at com.sleepycat.collections.StoredMap.put(StoredMap.java:315) ~[je-6.4.25.jar:6.4.25]
private void initDb(File file) throws IOException {
log.info("opening cache " + file);
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setTransactional(false);
envConfig.setAllowCreate(true);
DbInternal.disableParameterValidation(envConfig);
envConfig.setConfigParam(EnvironmentConfig.CLEANER_MIN_UTILIZATION,"90");
envConfig.setConfigParam(EnvironmentConfig.LOG_FILE_MAX,"10000000");
envConfig.setDurability(Durability.COMMIT_NO_SYNC);
envConfig.setCacheSize(128000000);
env = new Environment(file,envConfig);
DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setTransactional(false);
dbConfig.setAllowCreate(true);
Database catalogDb = env.openDatabase(null,CLASS_CATALOG,dbConfig);
classCatalog = new StoredClassCatalog(catalogDb);
db = env.openDatabase(null,"mydatastore",dbConfig);
// setup binding
EntryBinding<K> keyBinding = new SerialBinding<K>(classCatalog,keyType);
EntryBinding<V> valueBinding = new SerialBinding<V>(classCatalog,
valueType);
keyValueMap = new StoredMap<K, V>(db,keyBinding,valueBinding,true);
}