chore(*): add leak test
This commit is contained in:
parent
f223d6d4ac
commit
33779e68a1
11
js/README.md
Normal file
11
js/README.md
Normal 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
|
||||
```
|
||||
|
||||
кажется криминала нет и в самой либе нет проблем с утечкой памяти.
|
||||
71
js/index.js
71
js/index.js
@ -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);
|
||||
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
"main": "index.js",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"hazelcast-client": "3.12.4"
|
||||
"hazelcast-client": "3.12.4",
|
||||
"lodash": "latest"
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user