chore(*): add leak test

This commit is contained in:
Карпич Дмитрий Александрович 2024-12-26 13:08:37 +03:00
parent f223d6d4ac
commit 33779e68a1
4 changed files with 80 additions and 10 deletions

11
js/README.md Normal file
View File

@ -0,0 +1,11 @@
Попробовал проверить гипотезу утечки памяти в самой библиотеке при потере коннекта в базе.
Схема - каждые 30 ms делаем запрос к БД, далее гасим инстанс базы и смотрим что будет по памяти (Mb)
Результат и сразу после отключения и после полной потери коннекта в течении 3 минут (~6000 циклов):
```
RSS/Heap Total/Heap Used - start 59/18/11 | current 59/16/13 | max 109/69/43
```
кажется криминала нет и в самой либе нет проблем с утечкой памяти.

View File

@ -1,19 +1,70 @@
const merge = require('lodash/merge');
const Haz = require('hazelcast-client');
let globalClient = null;
const clientConfig = new Haz.Config.ClientConfig();
const clientBaseConfig = new Haz.Config.ClientConfig();
// И вот это - единственный корректный способ установки значений в объект
// конфигурации, который затем отдается в коннект и корректно работает
// добро пожаловать в мир ява-разработчиков от IBM !
clientConfig.groupConfig.name = 'superadmin';
clientConfig.groupConfig.password = 'dev-pass';
clientConfig.networkConfig.addresses.push('127.0.0.1:5701');
clientConfig.properties['hazelcast.client.invocation.timeout.millis'] = 2000;
// clientConfig.groupConfig.name = 'superadmin';
// clientConfig.groupConfig.password = 'dev-pass';
// clientConfig.networkConfig.addresses.push('127.0.0.1:5701');
// clientConfig.properties['hazelcast.client.invocation.timeout.millis'] = 2000;
const cfg = {
groupConfig: {
name: 'superadmin',
password: 'dev-pass',
},
networkConfig: {
addresses: ['127.0.0.1:5701']
},
// properties: {
// 'hazelcast.client.heartbeat.interval': 1000,
// 'hazelcast.client.heartbeat.timeout': 10000,
// 'hazelcast.client.invocation.timeout.millis': 2222,
// }
};
const clientConfig = merge(clientBaseConfig, cfg);
console.log(clientConfig);
const startMem = process.memoryUsage();
const us = {
rss: (startMem.rss / 1024 / 1024) | 0,
hTotal: (startMem.heapTotal / 1024 / 1024) | 0,
hUsed: (startMem.heapUsed / 1024 / 1024) | 0
}
const max = {
rss: 0,
hTotal: 0,
hUsed: 0
};
function memoryUsage() {
const usage = process.memoryUsage();
const uc = {
rss: (usage.rss / 1024 / 1024) | 0,
hTotal: (usage.heapTotal / 1024 / 1024) | 0,
hUsed: (usage.heapUsed / 1024 / 1024) | 0
}
// save peak values
if (uc.rss > max.rss) max.rss = uc.rss
if (uc.hTotal > max.hTotal) max.hTotal = uc.hTotal
if (uc.hUsed > max.hUsed) max.hUsed = uc.hUsed
const time = +Date.now();
process.stdout.write(`\r${time} RSS/Heap Total/Heap Used - start ${us.rss}/${us.hTotal}/${us.hUsed} | current ${uc.rss}/${uc.hTotal}/${uc.hUsed} | max ${max.rss}/${max.hTotal}/${max.hUsed}`);
}
Haz.Client.newHazelcastClient(clientConfig).then((client) => {
console.log('Success!');
globalClient = client;
@ -26,14 +77,16 @@ Haz.Client.newHazelcastClient(clientConfig).then((client) => {
setInterval(async () => {
try {
console.log('Client >>>>>>');
// console.log('Client >>>>>>');
memoryUsage();
if (globalClient) {
const map = await globalClient.getMap('qqz');
console.log('value: ', await map.put('q', Date.now()));
const prev = await map.put('q', Date.now());
// console.log('value: ', prev);
}
} catch (e) {
console.log('>>>>>>>>>>>>>>>>>', e)
// console.log('>>>>>>>>>>>>>>>>>', e)
}
}, 5000);
}, 30);

View File

@ -4,6 +4,7 @@
"main": "index.js",
"license": "MIT",
"dependencies": {
"hazelcast-client": "3.12.4"
"hazelcast-client": "3.12.4",
"lodash": "latest"
}
}

View File

@ -16,6 +16,11 @@ hazelcast-client@3.12.4:
long "4.0.0"
safe-buffer "5.2.1"
lodash@latest:
version "4.17.21"
resolved "http://binary.moscow.alfaintra.net/artifactory/api/npm/npm/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
long@4.0.0:
version "4.0.0"
resolved "http://binary.moscow.alfaintra.net/artifactory/api/npm/npm/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"