Мониторинг использования диска и других метрик в Java
1. обзор
В этом кратком руководстве мы обсудим, как отслеживать ключевые показатели в Java. Мы сосредоточимся наdisk space, memory usage, and thread data – using only core Java APIs.
В нашем первом примере мы будем использовать классFile для запроса конкретной информации о диске.
Затем мы проанализируем использование памяти и информацию о процессоре, погрузившись в классManagementFactory.
Наконец, коснемсяhow to monitor these key metrics at runtime using Java Profilers.
2. Введение в классFile
Проще говоря,File class represents an abstraction of a file или directory. Его можно использовать дляobtain key information about the file system and maintainOS independence относительно путей к файлам. В этом руководстве мы будем использовать этот класс для изучения корневых разделов на компьютерах с Windows и Linux.
3. ManagementFactoryс
Java provides the ManagementFactory class as a factory for getting managed beans (MXBeans)containingspecific information about the JVM. В следующих примерах кода мы рассмотрим два:
УТЕЧКА ПАМЯТИ JAVA ЗА 6 МИНУТ
3.1. MemoryMXBeanс
MemoryMXBean represents the management interface для системы памяти JVM. Во время выполнения JVM создает единственный экземпляр этого интерфейса, который мы можем получить с помощью методаManagementFactory ’sgetMemoryMXBean().
3.2. ThreadMXBeanс
ПодобноMemoryMXBean,ThreadMXBean — это интерфейс управления для системы потоков JVM. Его можно вызвать с помощью методаgetThreadMXBean(), и он содержит ключевые данные о потоках.
В следующих примерах мы будем использоватьThreadMXBean, чтобы получить доступ к JVMThreadInfo class – which contains specific information regarding threads running on the JVM..
3. Мониторинг использования диска
В этом примере кода мы будем использовать класс File для хранения ключевой информации о разделах. В следующем примере возвращается свободное, общее и доступное пространство с диска C: на компьютере с Windows:
File cDrive = new File(«C:»); System.out.println(String.format(«Total space: %.2f GB», (double)cDrive.getTotalSpace() /1073741824)); System.out.println(String.format(«Free space: %.2f GB», (double)cDrive.getFreeSpace() /1073741824)); System.out.println(String.format(«Usable space: %.2f GB», (double)cDrive.getUsableSpace() /1073741824));
Точно так же мы можем вернуть ту же информацию дляroot directory of a Linux machine:
File root = new File(«/»); System.out.println(String.format(«Total space: %.2f GB», (double)root.getTotalSpace() /1073741824)); System.out.println(String.format(«Free space: %.2f GB», (double)root.getFreeSpace() /1073741824)); System.out.println(String.format(«Usable space: %.2f GB», (double)root.getUsableSpace() /1073741824));
Приведенный выше код распечатывает общее, свободное и используемое пространство для определенного файла. По умолчанию вышеуказанные методы предоставляют количество байтов. Мы преобразовали эти байты в гигабайты, чтобы сделать результат более читабельным.
КАК ВЫДЕЛИТЬ ОПЕРАТИВНУЮ ПАМЯТЬ НА ВСЕ ЛАУНЧЕРЫ МАЙНКРАФТ УБИРАЕМ ЛАГИ
4. Мониторинг использования памяти
Теперь воспользуемся ManagementFactory class toquery the memory available to the JVM by calling the MemoryMXBean.
В этом примере мы сосредоточимся в первую очередь на запросе кучи памяти. Важно отметить, что память без кучи также может быть запрошена с помощьюMemoryMXBean:
MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); System.out.println(String.format(«Initial memory: %.2f GB», (double)memoryMXBean.getHeapMemoryUsage().getInit() /1073741824)); System.out.println(String.format(«Used heap memory: %.2f GB», (double)memoryMXBean.getHeapMemoryUsage().getUsed() /1073741824)); System.out.println(String.format(«Max heap memory: %.2f GB», (double)memoryMXBean.getHeapMemoryUsage().getMax() /1073741824)); System.out.println(String.format(«Committed memory: %.2f GB», (double)memoryMXBean.getHeapMemoryUsage().getCommitted() /1073741824));
Приведенный выше пример возвращает начальную, использованную, максимальную и фиксированную память соответственно. Вот краткое объяснение того, что это заmeans:
- Initial: начальная память, которую JVM запрашивает у ОС во время запуска
- Используется: текущий объем памяти, используемый JVM
- Макс. Максимальный объем памяти, доступный для JVM. Если этот предел достигнут, может быть брошеноOutOfMemoryException
- Committed: объем памяти, который гарантированно будет доступен JVM
5. Использование процессора
Затем мы будем использовать объектыThreadMXBean to gain a comprehensive list of ThreadInfo иquery them to gainuseful information regarding thecurrent threads, запущенные на JVM.
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); for(Long threadID : threadMXBean.getAllThreadIds())
Во-первых, код получает список текущих потоков с помощью методаgetAllThreadIds . Для каждого потока он выводит имя и состояние потока, а затем процессорное время для потока в наносекундах.
6. Мониторинг показателей с помощью профилировщиков
Наконец, стоит упомянуть, чтоwe can monitor these key metrics without using any Java code. Профилировщики Java тщательно отслеживают ключевые конструкции и операции на уровне JVM и предлагают анализ памяти, потоков и многое другое в режиме реального времени.
VisualVM является одним из таких примеров профилировщика Java и входит в состав JDK начиная с Java 6. Многие интегрированные среды разработки (IDE) содержат плагины для использования профилировщиков при разработке нового кода. Вы можете узнать больше о профилировщиках Java и VisualVMhere.
7. Заключение
В этой статье мы коснулись использования основных API-интерфейсов Java для запроса ключевой информации об использовании диска, управлении памятью и информации о потоках.
Как узнать используемую память
Как можно узнать сколько памяти занимает выполнение программы или класса в Intellij Idea?
Ответы (3 шт):
Можете включить индекатор памяти в
File | Settings | Appearance and Behavior | Appearance
поставить галочку в Show Memory Indecator
Можно запустить java с выводом данных gc, например -verbose:gc параметр, посмотреть что он будет выводить, там данных будет достаточно.
Второй вариант, использовать jstat
Есть такой инструмент как jmap, выводящий гистограмму с показателями сколько памяти занимают объекты и т.п.
Также, утилиту jstat можно использовать для сбора самых разнообразных статистических данных. Статистика jstat сортируется в «свойства», указанные первым параметром командной строки. Чтобы увидеть список свойств, нужно запустить jstat с параметром -options.
В документации утилиты в JDK говорится, что именно показывает каждое из свойств, но большинство из них используется для сбора информации о работе сборщика мусора или его компонентов. Свойство -class показывает загруженные и выгруженные классы (что делает утилиту полезной для обнаружения утечек ClassLoader в пределах сервера приложений или вашего кода), а -compiler и -printcompilation предоставляют сведения о JIT-компиляторе Hotspot. По умолчанию jstat отображает информацию по состоянию на момент обращения. Если нужны регулярные снимки текущего состояния, укажите после -свойств интервалы в миллисекундах. jstat будет постоянно отображать снимки текущего состояния контролируемого процесса. Если нужно, чтобы jstat сделал лишь определенное количество снимков, укажите его за значением интервала/периода.
Источник: husl.ru
Как отслеживать использование памяти CPU и загруженность диска в Java
В этой статье, мы обсудим некоторые начальные команды, инструменты и методы, которые помогут отслеживать использование памяти CPU и загруженность диска в Java.
Java инструменты наблюдают за конструкциями и процессами байткода Java. Профайлеры Java следят за всеми системными командами и использованием процессора. Это позволяет вам вызвать средства в любой момент.
Стандартный профайлер предоставляет большой объем знаний, ценность которых зависит от назначения отладки. Некоторые инструменты лучше для объединения логов для всех приложений и серверов, таких как Stackify Retrace, настраивая и отслеживая автоматический лог запросов. Инструменты: Stackify’s Application Performance Management, Retrace — предлагают Java пользователям лучшее понимание устройства приложения при помощи внедренного логирования и профилирования кода. Вместе с внедренным централизованным и структурированным логированием, можно получить доступ ко всем логам приложения из единой точки для всех приложений и серверов.
Здесь мы перечислили способы демонстрации памяти и отслеживания CPU в Java для оптимизации кода.
5 способов для наблюдения за памятью CPU и загруженностью диска в Java!
- Базовые Linux команды для отслеживания использования памяти CPU и загруженности диска a)free –m Команда передает доступную и занятую память вашей виртуальной машины. b)top Эта команда для просмотра использования CPU и памяти.
Когда вы введете 1 на клавиатуре, тогда topсработает и отобразит все возможные CPU и использование каждого. Всего 4 CPU — CPU0, CPU1, CPU2, CPU3 — и вся их статистика использования.
c)meminfo и cpuinfo Используйте следующие команды для детальной информации относительно памяти и процессоров виртуальной машины. $cat /proc/cpuinfo$cat /proc/meminfo d) Память CPU и использование диска конкретного процесса. $ps -p [pid] -o %cpu,%mem,cmd
Эта команда для отслеживания использования CPU и загруженности памяти методом приложения Java. Также отображает какие команды запустили процесс. e) Это статистика потока Java метода. $ps uH –p [pid] Эта команда предоставляет число потоков в процессе и их статистику.
Это показывает как много памяти и CPU использовано для каждой угрозы и как долго они работают. Когда приложение не отвечает, эти команды могут использоваться для выполнения предыдущих запросов, прежде чем переходить к памяти и дырам в потоках. Это важные команды для первоначального исследования кроме статистики памяти и CPU. df –k –> Для проверки места на диске lsof -i : –> Для проверки, является ли данный порт открытым lsof –i: tcp –> Все установленные и слушающие TCP подключения netstat -plunt –> Подключение к сети
- Отслеживание использования памяти Далее рассмотрим класс ManagementFactory для отслеживания использования памяти. Это реализовано путем запроса к MemoryMXBean. Раздел памяти куча необходим для использования MemoryMXBean:
MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); System.out.println(String.format(“Initial memory: %.2f GB”, (double)memoryMXBean.getHeapMemoryUsage().getInit() /1073741824)); System.out.println(String.format(“Used heap memory: %.2f GB”, (double)memoryMXBean.getHeapMemoryUsage().getUsed() /1073741824)); System.out.println(String.format(“Max heap memory: %.2f GB”, (double)memoryMXBean.getHeapMemoryUsage().getMax() /1073741824)); System.out.println(String.format(“Committed memory: %.2f GB”, (double)memoryMXBean.getHeapMemoryUsage().getCommitted() /1073741824));
Источник: habr.com