Доступ к памяти в диспетчере задач с использованием java - PullRequest
1 голос
/ 09 июля 2020

Я хотел бы просмотреть память, используемую в данный момент MySQL, MongoDB и Neo4j, используя java. Я искал это, но не нашел ничего подходящего. Моя ОС - Windows, и я использую Eclipse. Спасибо

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Я не знаю ничего, о чем я знаю в API JDK, который может запрашивать процессы операционной системы хоста. Следовательно, единственный вариант, который я могу придумать, - это использовать класс ProcessBuilder для выполнения команды ОС хоста.

Поскольку вы указываете, что ваша ОС - Windows, следующие Команда * PowerShell выведет имя процесса и использование памяти выбранными вами процессами.

Get-Process | Where-Object {$_.ProcessName -in 'MySQL','MongoDB','Neo4j'} | Select-Object -Property 'ProcessName','WorkingSet' | Format-Table -HideTableHeaders

Обратите внимание, что я не уверен в именах процессов, потому что я не использую никакие из MySQL, MongoDB или Neo4j . Я предполагаю, что вы знаете правильные имена процессов, поэтому не забудьте исправить их в приведенной выше команде перед ее запуском.

В приведенном ниже коде используется ProcessBuilder для выполнения указанной выше команды [PowerShell] и перенаправления вывода команды к System.out

import java.io.IOException;
import java.lang.ProcessBuilder;

public class PrcBldT2 {

    public static void main(String[] args) {
        ProcessBuilder pb = new ProcessBuilder("C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
                "Get-Process | Where-Object {$_.ProcessName -in 'eclipse','oracle'} | Select-Object -Property 'ProcessName','WorkingSet' | Format-Table -HideTableHeaders");

        pb.redirectError(ProcessBuilder.Redirect.INHERIT);
        pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
        try {
            Process p = pb.start();
            int result = p.waitFor();
            System.out.println("Exit status = " + result);
        }
        catch (IOException | InterruptedException x) {
            x.printStackTrace();
        }
    }
}
0 голосов
/ 09 июля 2020

Я только что придумал шаблон кода java для запуска команды windows, вам нужно запустить команду tasklist, чтобы получить всю таблицу процессов со всей информацией, включая память, используемую каждым процессом.

Вот код:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class TaskMemory {

    public static void main(String[] args) {
        Process process = null;
        if (System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0) {
            String command = "cmd.exe /c tasklist";
            try {
                process = Runtime.getRuntime().exec(command);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (process != null) {
            InputStream good = process.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(good));
            StringBuffer sb = new StringBuffer();
            String str;

            try {
                for(int i = 0; i < 3; i++){
                    if((str = bufferedReader.readLine()) != null){
                        sb.append(str).append("\n");
                    }
                }
                while ((str = bufferedReader.readLine()) != null) {
                    if(str.matches("(.*)mysqld.exe(.*)|(.*)mongod.exe(.*)|(.*)neo4j.exe(.*)")){
                        sb.append(str).append("\n");
                    }
                }
                if (sb.toString().trim().isEmpty()) {
                    InputStream error = process.getErrorStream();
                    bufferedReader = new BufferedReader(new InputStreamReader(error));

                    while ((str = bufferedReader.readLine()) != null) {
                        sb.append(str).append("\n");
                    }
                }
                System.out.println(sb.toString());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

}

Я просто редактирую свое решение, чтобы оно могло захватить только процессы mysql, mongodb и neo4j.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...