Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Частая запись в Bercley DB расходует много памяти. 
:(
    Опции темы
cuvorov
Дата 8.12.2010, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 80
Регистрация: 7.5.2007

Репутация: нет
Всего: нет



Добрый день.
Мое приложение должно писать данные в Bercley DB java edition  очень часто. При большой активности записи кончается память (java машине было выделено 20GB озу). Обычно этого хватает на 5 минут работы приложения. Если за комментировать запись в базу то тогда все нормально и память практически не используется.
Вот мой класс для работы с Bercley DB.
Код

package com.db.bdb;

import com.sleepycat.bind.EntryBinding;
import com.sleepycat.bind.serial.SerialBinding;
import com.sleepycat.bind.serial.StoredClassCatalog;
import com.sleepycat.bind.tuple.StringBinding;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.OperationStatus;
import com.sleepycat.je.Transaction;
import java.io.File;
import java.util.List;
import org.apache.log4j.Logger;

public class DbManager {
    public static final Logger LOG=Logger.getLogger(DbManager.class);
    private int i = 0;
    private String home;
    private String name;
    private Database  catalogDb = null;
    private Database db = null;
    private Environment env = null;
    private Environment env1 = null;
    private StringBinding keyBinding = new StringBinding();
    private StoredClassCatalog catalog = null;
    private DatabaseEntry key_ = new DatabaseEntry();
    private DatabaseEntry data = new DatabaseEntry();
    private EntryBinding<List> eb2 = null;
    public DbManager(){
    }
     public DbManager(String home,String name){
         openDB(home,name);
    }

    public final void openDB(String home,String name){
        this.home = home;
        this.name = name;
        if(db != null) closeDB();
        EnvironmentConfig envConfig = new EnvironmentConfig();
        envConfig.setTransactional(true);
        envConfig.setAllowCreate(true);
        envConfig.setSharedCache(true);
        env = new Environment(new File(home), envConfig);

        Transaction txn = env.beginTransaction(null, null);
        DatabaseConfig dbConfig = new DatabaseConfig();
        dbConfig.setTransactional(true);
        dbConfig.setAllowCreate(true);
        dbConfig.setSortedDuplicates(false);

        catalogDb = env.openDatabase(txn, "catalog", dbConfig);
        catalog = new StoredClassCatalog(catalogDb);

        txn.commit();

        env1 = new Environment(new File(home), envConfig);
        txn = env1.beginTransaction(null, null);

        db = env1.openDatabase(txn,name,dbConfig);        

        txn.commit();

        eb2 =  new SerialBinding<List>(catalog,null);
    }
    


    public  void  put(String key,List value) throws DatabaseException{      
        keyBinding.objectToEntry(key, key_);   
        eb2.objectToEntry(value, data);
        db.delete(null, key_);
        db.put(null, key_, data);       
    
    }

    public <T> T get(String key) throws DatabaseException {

        DatabaseEntry key_ = new DatabaseEntry();
        keyBinding.objectToEntry(key, key_);        
        EntryBinding<T> eb = new SerialBinding<T>(catalog,null);
        DatabaseEntry data = new DatabaseEntry();       
        OperationStatus status =db.get(null, key_, data, null);
        if (status == OperationStatus.SUCCESS) {
            T res = eb.entryToObject(data);
            return res;
        }
        return null;
    }

    public void closeDB(){
        if(db   != null){
           
            db.close();
        }

        if(catalog != null){
            catalog.close();
        }

        if(catalogDb != null){
            catalogDb.close();
        }

        if(env != null){
            env.close();
        }

        if(env1 != null){
            env1.close();
        }
    }
}



В чем может быть проблема? С помощью какой утилиты можно установить объект который потребляет больше всего памяти.

PM MAIL   Вверх
Andy_L20066
Дата 9.12.2010, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 10.3.2008

Репутация: нет
Всего: 1



может эсть какие то лоуд тесты которые помогут в данном случае (типа http://www.appperfect.com/products/load-te...d-testing.html)
сложно что то конкретное посоветовать smile 
PM MAIL ICQ   Вверх
jk1
Дата 9.12.2010, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Очень похоже на утечку памяти. Берите профайлер и вперед, он Вам покажет на что и где расходуется память.
Вот пара статей на этот счет:

http://habrahabr.ru/blogs/java/61857/
http://m.habrahabr.ru/post/73032/



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.