Firebird embedded жрет память при чтении blob

Access Violation, некорректное выполнение запросов или вызовов API, ошибки утилит командной строки, в общем все, что вам мешает работать

Модераторы: kdv, dimitr

Ответить
3m
Сообщения: 13
Зарегистрирован: 05 ноя 2006, 19:48

Firebird embedded жрет память при чтении blob

Сообщение 3m » 05 янв 2007, 23:47

Использую FB embedded 1.5.3.4870.
При чтении blob растет занимаемый приложением объем RAM, величина прироста по объему примерно соответствует объему вычитываемых из blob данных.
Если вместо использования embedded сервера коннектиться к Classic серверу (той же версии) то сжирания памяти как сервером так и моим приложением не наблюдается.

Как быть в данной ситуации? Отказаться от embedded версии я не могу.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 06 янв 2007, 00:59

Память жрёт не embedded, а приложение

AL-GALI
Сообщения: 25
Зарегистрирован: 03 янв 2007, 15:24

Сообщение AL-GALI » 06 янв 2007, 03:35

Embeded - это же динамическая библиотека вроде бы, работающая в контексте вызывающего процесса. Да, в итоге память потребляет процесс, но это не значит, что библиотека не может являться причиной утечки памяти...
Или я ошибаюсь?
С другой стороны, если приложение читает BLOB, то где-то оно должно подготовить буфер для этого блоба, вот и расход памяти. Функции типа malloc/free, даже при правильном использовании, могут увеличивать занимаемую приложением память (особенности работы менеджера памяти, фрагментация).

3m
Сообщения: 13
Зарегистрирован: 05 ноя 2006, 19:48

3m

Сообщение 3m » 06 янв 2007, 15:12

hvlad писал(а):Память жрёт не embedded, а приложение
Если бы память жрало приложение то оно бы его продолжало жрать и при работе с Classic сервером. Это было второе, что я проверил (в исходном посте описано). Остается вариант с кэшированием, но это в любом случае дела FB.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 06 янв 2007, 16:05

простейшим test case повторяется?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: 3m

Сообщение Dimitry Sibiryakov » 09 янв 2007, 07:55

3m писал(а):Если бы память жрало приложение то оно бы его продолжало жрать и при работе с Classic сервером.
Чем читаешь блобы?

3m
Сообщения: 13
Зарегистрирован: 05 ноя 2006, 19:48

Re: 3m

Сообщение 3m » 17 янв 2007, 23:26

Dimitry Sibiryakov писал(а):
3m писал(а):Если бы память жрало приложение то оно бы его продолжало жрать и при работе с Classic сервером.
Чем читаешь блобы?
Читаю самопально доработанным IBPP-2.5.2.2 с поддержкой потоковых blob и позиционированием http://c5r.narod.ru/ibpp-with-stream-blobs.html

Я еще потестировал и получается что память жрет агрессивное кэширование блобов Embedded версией. У меня сложилось впечатление что стратегия кэширования у embedded и classic server в корне различна: embedded как при чтении так и при записи blob старается по максимуму использовать ОЗУ (держит в ОЗУ сразу несколько многомегабайтных blob не выгружая их после закрытия), обмен с HDD сведен к минимуму минимален; classic server поступает прямо наоборот - использование ОЗУ минимально, а обмен с HDD очень интенсивен.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: 3m

Сообщение hvlad » 18 янв 2007, 01:03

3m писал(а):Я еще потестировал и получается что память жрет агрессивное кэширование блобов Embedded версией. У меня сложилось впечатление что стратегия кэширования у embedded и classic server в корне различна: embedded как при чтении так и при записи blob старается по максимуму использовать ОЗУ (держит в ОЗУ сразу несколько многомегабайтных blob не выгружая их после закрытия), обмен с HDD сведен к минимуму минимален; classic server поступает прямо наоборот - использование ОЗУ минимально, а обмен с HDD очень интенсивен.
Код супера\классика\embedded для блобов не отличается.

Сколько памяти отъедает приложение с embedded ?
Чему равно DefaultDbCachePages в firebird.conf в корне приложения ?

3m
Сообщения: 13
Зарегистрирован: 05 ноя 2006, 19:48

Re: 3m

Сообщение 3m » 22 янв 2007, 21:21

hvlad писал(а): Сколько памяти отъедает приложение с embedded ?
Чему равно DefaultDbCachePages в firebird.conf в корне приложения ?
Это оно.
Используется дефолтный firebird.conf из дистибутива. Наблюдения за использованием ram показали что embedded версия по умолчанию использует DefaultDbCachePages=2048, в то время как classic server - 75.
Это примерно объясняет (+-2-3Мб) потребление памяти моим приложением.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: 3m

Сообщение hvlad » 22 янв 2007, 22:10

3m писал(а):
hvlad писал(а): Сколько памяти отъедает приложение с embedded ?
Чему равно DefaultDbCachePages в firebird.conf в корне приложения ?
Это оно.
Используется дефолтный firebird.conf из дистибутива. Наблюдения за использованием ram показали что embedded версия по умолчанию использует DefaultDbCachePages=2048, в то время как classic server - 75.
Это примерно объясняет (+-2-3Мб) потребление памяти моим приложением.
И это называется "отжирает" ? :lol:

3m
Сообщения: 13
Зарегистрирован: 05 ноя 2006, 19:48

Re: 3m

Сообщение 3m » 23 янв 2007, 18:55

hvlad писал(а):...
И это называется "отжирает" ? :lol:
Если реальный расход памяти в 4 раза превышает расчетное значение, то стоит задуматься.

Ответить