>  Reproducible test case would be ideal

Hello Vlad, hello Alexey, and other interested people!

I have prepared a test case now showing the memory leak with a simple fresh 
database and many many connect / select / disconnect sequences.

Take the below script (also attached, but don’t know if group allows this), 
place it in a file named connleak.cmd in a new empty directory and call it:

1st: connleak init
2nd: connleak run

You can open the task manager and see fbserver.exe memory consumption growing.

Hope this helps to investigate the problem.

--
Joja


@echo off
setlocal
set db=%~pd0\connleak.fdb
set init=%~pd0\connleak_init.sql
set tst=%~pd0\connleak_test.sql
set mem=%~pd0\connleak_mem.sql
set wait=%~pd0\connleak_wait
set usr=SYSDBA
set pwd=masterkey
set cycles=10000

if "%1"=="init" goto init_
if "%1"=="run" goto run_
if "%1"=="internal" goto internal_
echo First:  call   connleak init
echo Second: call   connleak run
exit /B

:init_
if exist %db% (
echo Sorry, connleak.fdb already exists
echo Delete it and try again
exit /B
)

echo create database '%db%' user '%USR%' password '%PWD%' page_size 8192;>%init%
echo exit;>>%init%

echo connect '%db%' user '%USR%' password '%PWD%';>%tst%
echo select * from RDB$BACKUP_HISTORY;>>%tst%
echo select * from RDB$CHECK_CONSTRAINTS;>>%tst%
echo select * from RDB$DATABASE;>>%tst%
echo select * from RDB$EXCEPTIONS;>>%tst%
echo select * from RDB$FIELD_DIMENSIONS;>>%tst%
echo select * from RDB$FILTERS;>>%tst%
echo select * from RDB$FUNCTIONS;>>%tst%
echo select * from RDB$GENERATORS;>>%tst%
echo select * from RDB$INDICES;>>%tst%
echo select * from RDB$PAGES;>>%tst%
echo select * from RDB$PROCEDURE_PARAMETERS;>>%tst%
echo select * from RDB$RELATIONS;>>%tst%
echo select * from RDB$RELATION_FIELDS;>>%tst%
echo select * from RDB$SECURITY_CLASSES;>>%tst%
echo select * from RDB$TRIGGERS;>>%tst%
echo select * from RDB$TYPES;>>%tst%
echo select * from RDB$VIEW_RELATIONS;>>%tst%
echo select * from RDB$CHARACTER_SETS;>>%tst%
echo select * from RDB$COLLATIONS;>>%tst%
echo select * from RDB$DEPENDENCIES;>>%tst%
echo select * from RDB$FIELDS;>>%tst%
echo select * from RDB$FILES;>>%tst%
echo select * from RDB$FORMATS;>>%tst%
echo select * from RDB$FUNCTION_ARGUMENTS;>>%tst%
echo select * from RDB$INDEX_SEGMENTS;>>%tst%
echo select * from RDB$LOG_FILES;>>%tst%
echo select * from RDB$PROCEDURES;>>%tst%
echo select * from RDB$REF_CONSTRAINTS;>>%tst%
echo select * from RDB$RELATION_CONSTRAINTS;>>%tst%
echo select * from RDB$ROLES;>>%tst%
echo select * from RDB$TRANSACTIONS;>>%tst%
echo select * from RDB$TRIGGER_MESSAGES;>>%tst%
echo select * from RDB$USER_PRIVILEGES;>>%tst%
echo exit;>>%tst%

echo connect '%db%' user '%USR%' password '%PWD%';>%mem%
echo set list;>>%mem%
echo select cast('NOW' as timestamp) TS, m.*, (select count(*) from 
mon$attachments) ATTACHMENTS, (select count(*) from mon$statements) STATEMENTS 
from mon$memory_usage m where m.mon$stat_group=0;>>%mem%
echo commit;>>%mem%
echo shell %0 internal;>>%mem%
echo select cast('NOW' as timestamp) TS, m.*, (select count(*) from 
mon$attachments) ATTACHMENTS, (select count(*) from mon$statements) STATEMENTS 
from mon$memory_usage m where m.mon$stat_group=0;>>%mem%
echo commit;>>%mem%
echo shell echo Now, when you press the key again, isql will be closed and 
memory released;>>%mem%
echo shell pause;>>%mem%

isql -q -i %init%
gfix %DB% -buffers 8192 -user %USR% -password %PWD%

exit /B

:run_
if exist %wait%1 del %wait%1
if exist %wait%2 del %wait%2
if exist %wait%3 del %wait%3
if exist %wait%4 del %wait%4

isql -q -i %mem%
exit /B

:internal_
start "Test 1" cmd /C (for /L %%i in (1,1,%cycles%) do @isql -q -i %tst%^>nul 
^& @echo %%i) ^& echo Ended^>%wait%1
start "Test 2" cmd /C (for /L %%i in (1,1,%cycles%) do @isql -q -i %tst%^>nul 
^& @echo %%i) ^& echo Ended^>%wait%2
start "Test 3" cmd /C (for /L %%i in (1,1,%cycles%) do @isql -q -i %tst%^>nul 
^& @echo %%i) ^& echo Ended^>%wait%3
start "Test 4" cmd /C (for /L %%i in (1,1,%cycles%) do @isql -q -i %tst%^>nul 
^& @echo %%i) ^& echo Ended^>%wait%4

:wait_
ping localhost -t 2 -w 2000>nul
if not exist %wait%1 goto wait_
if not exist %wait%2 goto wait_
if not exist %wait%3 goto wait_
if not exist %wait%4 goto wait_



[Non-text portions of this message have been removed]

  • ... 'Jojakim Stahl' joja.li...@jojakim.de [firebird-support]
    • ... Hugo Eyng hugoe...@msn.com [firebird-support]
      • ... 'Jojakim Stahl' joja.li...@jojakim.de [firebird-support]
    • ... hv...@users.sourceforge.net [firebird-support]
      • ... 'Jojakim Stahl' joja.li...@jojakim.de [firebird-support]
        • ... 'Jojakim Stahl' joja.li...@jojakim.de [firebird-support]
          • ... Fabiano Kureck - Desenvolvimento SCI fabi...@sci10.com.br [firebird-support]
            • ... 'Jojakim Stahl' joja.li...@jojakim.de [firebird-support]
          • ... hv...@users.sourceforge.net [firebird-support]
            • ... 'Jojakim Stahl' joja.li...@jojakim.de [firebird-support]
            • ... 'Jojakim Stahl' joja.li...@jojakim.de [firebird-support]
              • ... hv...@users.sourceforge.net [firebird-support]
                • ... hv...@users.sourceforge.net [firebird-support]
                • ... 'Jojakim Stahl' joja.li...@jojakim.de [firebird-support]
                • ... hv...@users.sourceforge.net [firebird-support]
                • ... 'Jojakim Stahl' joja.li...@jojakim.de [firebird-support]
                • ... 'Jojakim Stahl' joja.li...@jojakim.de [firebird-support]
                • ... hv...@users.sourceforge.net [firebird-support]
                • ... Jesus Garcia jeg...@gmail.com [firebird-support]
                • ... fabianoas...@gmail.com [firebird-support]
                • ... 'Thomas Steinmaurer' t...@iblogmanager.com [firebird-support]

Reply via email to