Контроль использования памяти для DLL C, названного с Java через JNI?

Вы пишете бэкэнд-сервис для вашего приложения, который должен извлекать данные из вашего MongoDB. Проблема в том, что ваша обработка работает в синхронном режиме - вместо этого вам нужно работать как асинхронный.

// Quick fix for your code

const findData = (myColl, myDb) => {
    return new Promise(function (resolve, reject) {
        MongoClient.connect(url)
            .then((client) => {
                return client.db(myDb)
            }).then((db) => {
                return db.collection(myColl).find().sort({ nmFull: 1 })
                    .toArray((err, result) => { resolve(result); });
            }).catch((err) => {
                reject(err);
            });
    });
};

Вот несколько рекомендаций по подключению MongoDB на Node.js,

6
задан lawsonj2019 8 October 2008 в 20:48
поделиться

4 ответа

Можно контролировать собственную "кучу" со счетчиками в производительности montitor. (perfmon32) однако она, привычка ломает его для Вас на на основание DLL, даже jvm.dll, будет включена здесь.

Самые профильные инструменты там могут присоединить к процессу и получить и отследить выделения памяти и освобождение. Это позволяет им размышлять, где утечки. Один довольно хороший, который я нашел при недавней попытке разыскать утечки памяти в собственном коде, который назвали от Java, является Блоком проверки допустимости Памяти

3
ответ дан 17 December 2019 в 20:36
поделиться

Я верю даже выполнению этой внутренней части, DLL C не был бы очень легок.

Насколько я понимаю, что инструменты Standard Java Monitoring собирают информацию путем запросов Виртуальной машины, таким образом даже при том, что та память находится в том же процессе, если виртуальная машина не знает, как осмотреть динамически подключаемую библиотеку, это не сможет видеть что-либо. Я полагаю, что необходимо было бы использовать внешний инструмент или сделать несколько крупные модификации к DLL для отслеживания его использования памяти.

-1
ответ дан 17 December 2019 в 20:36
поделиться

Вы попытались использовать Средство просмотра Процесса для рытья глубже.

Если у Вас есть источник к DLL, Вы могли бы восстановить с библиотеками отладки и возможно средством отслеживания выделения мадам - и отладка с помощью отладчика Visual C++ (необходимо будет сказать этому использовать JAVA-приложение).

Если у Вас нет источника - затем, опции ограничены.

1
ответ дан 17 December 2019 в 20:36
поделиться

Ну, так как DLL не является действительно частью "кучи" Java, я думаю, что наиболее точные показания должны были бы записать, что маленькая профильная программа (или маленькое программа Java/JNI или C++/C#, и т.д.), чтобы импортировать и использовать DLL похожим способом к Вашему приложению и не сделать НИЧЕГО ИНОГО - просто использует DLL, как Вы делаете - получающийся профиль памяти этого профильного приложения должен быть хорошим приближением к профилю памяти DLL.

Необходимо также протестировать, чтобы видеть, существует ли форма статического ЗУ или динамической памяти DLL - берут память measurments непосредственно прежде и после того, как DLL загружается, чтобы видеть, существует ли одноразовый хит ~130MB, или если память медленно повышается со временем.

На Солярисе / Linux, я услышал, что Коллектор Studio Sun / Анализатор является хорошим инструментом для этого, но Вы застреваете на земле DLL (или DLL черт, как это было),

-1
ответ дан 17 December 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: