powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / При долгой работе переполняется память сервера Firebird 1.5.1.4481
25 сообщений из 42, страница 1 из 2
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203359
vs815
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Описание проблемы:

СУБД Firebird 1.5.1.4481 стоит на сервере Windows Server 2008 R2 Enterprise 64 bit с 8 Гб ОЗУ.
С течением времени память процесса fbserver постоянно растет. При достижение 1,9 Гб Firebird начинает глючить и выдавать ошибки. Отключение пользователей от базы данных не уменьшает память процесса. Помогает только перезапуск Firebird.

По совету из FAQ http://www.ibase.ru/firebird-interbase-yaffil-faq/#При долгой работе переполняется память сервера
проверил самописную udf на предмет утечки памяти. Проблема в udf. Понять что не правильно написано в udf не могу. Помогите, пожалуйста, решить проблему с утечкой памяти.

Текст udf (написана на Delphi 7):

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
library monDLL;

uses
  SysUtils,
  Classes,
  Dialogs;

{$R *.res}

function ib_util_malloc(l: integer): pointer; cdecl; external 'ib_util.dll';

function fn_rupper (sSmall: PChar): PChar; cdecl; export;
begin
  Result := ib_util_malloc(Length(sSmall)+1);
  StrPCopy(Result, AnsiUpperCase(sSmall));
end;

exports
  fn_rupper;

end.
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203364
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vs815
Код: pascal
1.
2.
  Classes,
  Dialogs;


Вот эти две строки удали. Они гадят.
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203365
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vs815СУБД Firebird 1.5.1.4481
Серия 1.5 кончилась на 1.5.6: http://www.firebirdsql.org/en/firebird-1-5/

vs815Текст udf
А её объявление в базе?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203417
vs815
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

DECLARE EXTERNAL FUNCTION RUPPER
CSTRING(16383)
RETURNS CSTRING(16383)
ENTRY_POINT 'fn_rupper' MODULE_NAME 'mondll';
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203418
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где FREE_IT?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203433
vs815
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

А где FREE_IT должен быть? Не могли бы привести пример на базе моей udf?
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203435
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мелочь, возможно, но зачем два раа подряд создавaть паскаль-строки из с-строки ?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function fn_rupper (sSmall: PANSIChar): PANSIChar; cdecl; export;
VAR TMP: ANSISTRING; 
// "string" - не вполне определенный тип - в разных версиях он разной длины
// то жe самое про char и PChar
begin
  TMP := sSmall;
  TMP := AnsiUpperCase(TMP);

  Result := ib_util_malloc( (Length(TMP)+1)*SizeOf(TMP[1]));
  IF nil <> Result THEN
      StrPCopy(Result, TMP);
end;

[/quote]

И в SQL-объявлении функции xорошо бы наверное прописать кодировку Windows-1251

А то поступит строка, например, в UTF-8 - что делать функции ?
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203437
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vs815Dimitry Sibiryakov,

А где FREE_IT должен быть? Не могли бы привести пример на базе моей udf?

смотри пример http://www.firebirdsql.org/en/writing-udfs-for-interbase/#writing_udfs_in_delphi_for_windows_platforms
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203440
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203446
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

ну какой UTF-8 в 1.5
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203452
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovГде FREE_IT?
+1 и выкинуть лишние модули из udf.
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203453
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

ну мало ли что туда еще по факту придет ?

в параметрах соединения забудут поставить кодировку или перепутают - и приедет КОИ8-Р с юниксов. UTF-16 с Явы или новой Дельфи, да хоть Unicode_fss

причем ещё и осядет где-нибудь в PSQL, xрен потом найдешь
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203456
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vs815А где FREE_IT должен быть?
Там, где ему положено быть согласно
Language Reference .
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203471
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

...и поменять RTL, и в итоге сделать DLL настолько маленькую, что Windows ее загрузить не смoжет :-)
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203481
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,
нормально все будет :) 17210217
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203483
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

ну и какой размер скомпилированного файла? в 2KB влезло ?
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203501
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,
2кб это психологический барьер?
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203554
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

Вопрос к разработчикам Windows, для меня это было неожиданностью. По факту оказалось, что Windows не способна загрузить DLL такого размера.

Я подозреваю, что настоящая граница - 4KB - размер страницы виртуальной памяти в 80386, каковых в бинарнике под Win32 загрузчиком ожидается целое число.
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203571
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,
компилятор делфи и ртл успешно обходят этот маленький недостаток. :)
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203627
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanкомпилятор делфи

нет, D5 вполне создает 2KB

что до RTL - 18992590
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203628
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochwadmanкомпилятор делфи

нет, D5 вполне создает 2KB

что до RTL - 18992590
Меняет регистр в качестве удф? Или речь о пустой заглушке?
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203674
vs815
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

В UDF много различных функций для работы с текстом. Я привел пример одной из них (предварительно удалив лишнее). В таком варианте также идет утечка памяти. Как подсказали выше (и особенно помогла статья https://ibase.ru/udf_ok/ ) проблема в неправильной регистрации функции в базе. Отсюда возник и вопрос: а можно ли оставить объявление функции в базе как было

Код: plsql
1.
2.
3.
4.
DECLARE EXTERNAL FUNCTION RUPPER
CSTRING(16383)
RETURNS CSTRING(16383)
ENTRY_POINT 'fn_rupper' MODULE_NAME 'mondll';



а освобождение памяти реализовать в udf вот так:

Код: pascal
1.
2.
3.
4.
5.
6.
function fn_rupper (sSmall: PChar): PChar; cdecl; export;
begin
  Result := ib_util_malloc(Length(sSmall)+1);
  StrPCopy(Result, AnsiUpperCase(sSmall));
  FreeMem(sSmall);
end;
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203684
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vs815можно ли
Нельзя, запрещаю.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203722
vs815
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Попробовал освобождать память в UDF - сервер упал. В логе написано следующее:



SUPER (Client) Tue Mar 29 23:14:24 2016
INET/inet_error: send errno = 10054

SUPER (Client) Tue Mar 29 23:14:24 2016
REMOTE INTERFACE/gds__detach: Unsuccesful detach from database.
Uncommitted work may have been lost

SUPER (Client) Tue Mar 29 23:14:24 2016
INET/inet_error: send errno = 10054

Что я сделал не правильно?
...
Рейтинг: 0 / 0
При долгой работе переполняется память сервера Firebird 1.5.1.4481
    #39203731
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vs815Что я сделал не правильно?
1. Не используешь мозг.
2. Не слушаешь старших.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 42, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / При долгой работе переполняется память сервера Firebird 1.5.1.4481
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]