Compare commits

..

No commits in common. "feat/check_for_leaks" and "main" have entirely different histories.

6 changed files with 17 additions and 85 deletions

View File

@ -1,10 +1,10 @@
FROM hazelcast/hazelcast:3.8.3
FROM hazelcast/hazelcast:3.12.10
# Копируем файлы конфигурации в контейнер
COPY ./hazelcast.xml /opt/hazelcast/
COPY ./jmx_agent_config.yaml /opt/prometheus/
ENV JAVA_OPTS="-Dhazelcast.config=/opt/hazelcast/hazelcast.xml -Dhazelcast.jmx=true -Djava.rmi.server.hostname=127.0.0.1"
ENV JAVA_OPTS="-Dhazelcast.config=/opt/hazelcast/hazelcast.xml -Dhazelcast.jmx=true -Djava.rmi.server.hostname=onaintdata1"
ENV PROMETHEUS_PORT=9100
ENV PROMETHEUS_CONFIG="/opt/prometheus/jmx_agent_config.yaml"
ENV MIN_HEAP_SIZE=1228m

View File

@ -1,15 +1,17 @@
<hazelcast xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.hazelcast.com/schema/config http://www.hazelcast.com/schema/config/hazelcast-config-3.8.xsd" xmlns="http://www.hazelcast.com/schema/config">
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.12.xsd"
xmlns="http://www.hazelcast.com/schema/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<group>
<name>superadmin</name>
<password>dev-pass</password>
</group>
<network>
<public-address>127.0.0.1</public-address>
<public-address>onaintdata1</public-address>
<port auto-increment="false">5701</port>
<join>
<multicast enabled="false"></multicast>
<tcp-ip enabled="true">
<member>127.0.0.1:5701</member>
<member>onaintdata1:5701</member>
</tcp-ip>
</join>
</network>

View File

@ -1,11 +0,0 @@
Попробовал проверить гипотезу утечки памяти в самой библиотеке при потере коннекта в базе.
Схема - каждые 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,70 +1,19 @@
const merge = require('lodash/merge');
const Haz = require('hazelcast-client');
let globalClient = null;
const clientBaseConfig = new Haz.Config.ClientConfig();
const clientConfig = 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;
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);
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;
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;
@ -77,16 +26,14 @@ Haz.Client.newHazelcastClient(clientConfig).then((client) => {
setInterval(async () => {
try {
// console.log('Client >>>>>>');
memoryUsage();
console.log('Client >>>>>>');
if (globalClient) {
const map = await globalClient.getMap('qqz');
const prev = await map.put('q', Date.now());
// console.log('value: ', prev);
console.log('value: ', await map.put('q', Date.now()));
}
} catch (e) {
// console.log('>>>>>>>>>>>>>>>>>', e)
console.log('>>>>>>>>>>>>>>>>>', e)
}
}, 30);
}, 5000);

View File

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

View File

@ -16,11 +16,6 @@ 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"