Firebird-сервер жрёт много памяти

Администирование клиентской и серверной части InterBase, Firebird, Yaffil. Настройка файла конфигурации и т.п.

Модераторы: kdv, Alexey Kovyazin

Ответить
AlekseyTabakov
Сообщения: 11
Зарегистрирован: 21 янв 2013, 09:07

Firebird-сервер жрёт много памяти

Сообщение AlekseyTabakov » 20 ноя 2014, 14:12

Добрый день.
Прошу без ответов вида "погугли", уже гуглил, ничего полезного не нашел.
Имеем Windows Server 2008, 64-разрядный. 8 гигов оперативки, 2 ядра по 3.5 Гц. На системе установлен Firebird 2.5 (х64) как SuperServer.
Есть база данных. Размер почти 10 гигов, page size=16384. В течение рабочего дня около 70 пользователей подключены к базе. К концу дня процесс жрет 5-6 гигов оперативной памяти. В firebird.conf все настройки по умолчанию, кроме FileSystemCacheSize = 10. Но получается, что система не обращает внимания на эту настройку и потребляем всю память, что есть.
Подскажите пожалуйста, куда копать, что менять?

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

Re: Firebird-сервер жрёт много памяти

Сообщение Dimitry Sibiryakov » 20 ноя 2014, 14:26

Наиболее частой причиной утечки памяти являются пользовательские UDF.

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

Re: Firebird-сервер жрёт много памяти

Сообщение kdv » 20 ноя 2014, 16:55

"Суперсервер" и "70 пользователей" - это нонсенс какой-то. Удивительно, как это у вас работает. Впрочем, Классик вам не светит с вашими 2 ядрами.
http://www.ibase.ru/devinfo/optimize.htm
потребляем всю память, что есть.
кто именно потребляет? процесс fbserver.exe? какая версия - надеюсь, именно 2.5.3? Если нет, нужно срочно обновлять.

И, да, udf надо проверять на утечки памяти.

AlekseyTabakov
Сообщения: 11
Зарегистрирован: 21 янв 2013, 09:07

Re: Firebird-сервер жрёт много памяти

Сообщение AlekseyTabakov » 20 ноя 2014, 17:05

Dimitry Sibiryakov писал(а):Наиболее частой причиной утечки памяти являются пользовательские UDF.
UDF применяю. Чаще это из библиотеки rfunc: datetostr, extract...(year,day и др.), lastsaymount, ltrim, padleft, strreplace и другие.
Т.е. лучше отойти от них к применению стандартных функций sql?
Ещё в базе есть сотня неиспользуемых udf, они тоже могут влиять или только те, что применяю?

AlekseyTabakov
Сообщения: 11
Зарегистрирован: 21 янв 2013, 09:07

Re: Firebird-сервер жрёт много памяти

Сообщение AlekseyTabakov » 20 ноя 2014, 17:08

kdv писал(а):"Суперсервер" и "70 пользователей" - это нонсенс какой-то. Удивительно, как это у вас работает. Впрочем, Классик вам не светит с вашими 2 ядрами.
http://www.ibase.ru/devinfo/optimize.htm
потребляем всю память, что есть.
кто именно потребляет? процесс fbserver.exe? какая версия - надеюсь, именно 2.5.3? Если нет, нужно срочно обновлять.

И, да, udf надо проверять на утечки памяти.
Да, процесс fbserver.exe. Версия 2.5.2.
Извините, если вопрос глупый, но как нужно проверять udf на утечки памяти?

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

Re: Firebird-сервер жрёт много памяти

Сообщение kdv » 20 ноя 2014, 20:45

Извините, если вопрос глупый, но как нужно проверять udf на утечки памяти?
да очень просто. берете запрос типа select * from where myudf..., к мелкой таблице, а потом к "крупной", чтобы на несколько миллионов вызовов udf хватило. И замеряете память, до и после.
Чаще это из библиотеки rfunc
нужно убедиться, что она самая свежая.
Версия 2.5.2.
надо 2.5.3
они тоже могут влиять или только те
те udf, которые не вызываются, не могут приводить к утечке памяти, в принципе. Странный вопрос.

AlekseyTabakov
Сообщения: 11
Зарегистрирован: 21 янв 2013, 09:07

Re: Firebird-сервер жрёт много памяти

Сообщение AlekseyTabakov » 21 ноя 2014, 10:57

да очень просто. берете запрос типа...
не факт, что моя проверка была выполнена правильно, но некоторая утечка вроде есть.
буду переходить на стандартные sql функции. правда не все udf имеют аналоги среди стандартных, придется как-то выкручиваться.
нужно убедиться, что она самая свежая.
странно. у моей rfunc в свойствах указано, что версия 5.4.0.29, хотя в инете самая последняя 2.1.3. чудеса :D
надо 2.5.3
это решит мою проблему?
те udf, которые не вызываются, не могут приводить к утечке памяти, в принципе. Странный вопрос.
просто на всякий случай спросил, так же думал

И всё же, почему не срабатывает ограничение FileSystemCacheSize в конфиге?

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

Re: Firebird-сервер жрёт много памяти

Сообщение hvlad » 21 ноя 2014, 11:28

AlekseyTabakov писал(а):И всё же, почему не срабатывает ограничение FileSystemCacheSize в конфиге?
Оно никак не относится к размеру памяти процесса.

AlekseyTabakov
Сообщения: 11
Зарегистрирован: 21 янв 2013, 09:07

Re: Firebird-сервер жрёт много памяти

Сообщение AlekseyTabakov » 21 ноя 2014, 11:40

hvlad писал(а):
AlekseyTabakov писал(а):И всё же, почему не срабатывает ограничение FileSystemCacheSize в конфиге?
Оно никак не относится к размеру памяти процесса.
Значит я не так понял описание этого параметра. А который параметр позволит ограничить потребление оперативки? И есть ли такой?
Как я понимаю, немалую часть памяти потребляет кэш базы данных. Думал, FileSystemCacheSize как раз к этому и относится.

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

Re: Firebird-сервер жрёт много памяти

Сообщение hvlad » 21 ноя 2014, 12:39

AlekseyTabakov писал(а):А который параметр позволит ограничить потребление оперативки? И есть ли такой?
Нет такого параметра

AlekseyTabakov
Сообщения: 11
Зарегистрирован: 21 янв 2013, 09:07

Re: Firebird-сервер жрёт много памяти

Сообщение AlekseyTabakov » 21 ноя 2014, 14:00

Что же тогда делать, чтобы процесс fbserver.exe не съедал всю имеющуюся свободную память?

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

Re: Firebird-сервер жрёт много памяти

Сообщение kdv » 22 ноя 2014, 00:17

это решит мою проблему?
эту может и не решит, зато решит другие проблемы. Вы считаете, что обновления Firebird выпускаются просто так, от нечего делать? Вам неинтересно почитать, какие баги исправлены в 2.5.3 относительно 2.5.2 ?
Что же тогда делать, чтобы процесс fbserver.exe не съедал всю имеющуюся свободную память?
какой-то беспредметный разговор. Если есть udf с утечкой, то НИЧЕМ ограничить потребляемую приложением память невозможно.
Дальше - если есть не утечки памяти, а например, повышенное потребление памяти, то теоретически его можно обнаружить через таблицы mon$.
Через mon$ можно найти вообще все "длительное" - коннекты, транзакции, запросы, т.е. все то, что мешает производительности.
Еще дальше - утечка может быть общая, если "утекающая udf" используется многими коннектами. А может быть частная, если udf используется какой-то одной задачей (или пользователем).
Ну и наконец - я вам уже сказал, что для 70 пользователей superserver не подходит. Дал ссылку на статью. Вы ее, похоже, читать не стали. В Классике, например, вы бы увидели, все процессы пожирают память, или только часть.
Либо у вас там не 70 пользователей, а 7, либо эти пользователи выполняют по одному простому запросу в час. В нормальной системе FB SuperServer с вашими 70 пользователей загнулся бы моментально (уперся в процессор, в 1 ядро).

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

Re: Firebird-сервер жрёт много памяти

Сообщение hvlad » 22 ноя 2014, 17:54

AlekseyTabakov писал(а):Что же тогда делать, чтобы процесс fbserver.exe не съедал всю имеющуюся свободную память?
Для начала - разобраться с утечкой

AlekseyTabakov
Сообщения: 11
Зарегистрирован: 21 янв 2013, 09:07

Re: Firebird-сервер жрёт много памяти

Сообщение AlekseyTabakov » 16 дек 2014, 13:26

Добрый день.
Извините за долгое отсутствие, был занят другими задачами.
Пару недель назад избавился от всех udf. Даже удалил саму папку, в которой они лежали. К сожалению, это не помогла, к концу дня потребление процессом fbserver.exe оперативки часто достигает 4-6 гигов.

kdv, конечно я не считаю, что новые версии выходят просто так. Просто я не считаю, что моя проблема связана с версией 2.5.2. Такую вещь как утечку исправили бы давным давно, ещё до выходе 2 версии полагаю. Думаю, что проблема именно у меня где-то. В неправильном обращении к базе или каких-либо настройках или ещё в чем-либо, не знаю.
Статью по вашей ссылке читал.
Ну 70 пользователей это скорее максимальная нагрузка за день. Но в порядке 40 человек в течение рабочего дня сидят в программе постоянно, и там далеко не по 1 запросу в час. Не знаю, почему мой SuperServer не загнулся.

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

Re: Firebird-сервер жрёт много памяти

Сообщение kdv » 17 дек 2014, 01:01

ещё до выходе 2 версии полагаю
не надо полагать. может, действительно, вы какой-то SQL вызываете, который больше никто не пишет, и поэтому проблема только у вас.

Ответить