Список процессов Java
Как я могу перечислить все процессы Java в bash? Мне нужна командная строка. Я знаю, что есть команда ps , но я не знаю, какие параметры мне нужно использовать.
Jacek Koralik 08 июнь 2011, в 19:20
Поделиться
пожалуйста, приложите больше усилий для изучения этой проблемы и описания вашей проблемы, есть много возможностей в зависимости от того, что именно вы ищете.
Mat 08 июнь 2011, в 18:03
Если вы знаете, что есть ps сначала попробуйте man ps , info ps и узнайте об этом в Интернете.
ssapkota 08 июнь 2011, в 23:10
Поделиться:
command-line
16 ответов
ps aux | grep java
и посмотрите, как вы попадаете на
Rich 08 июнь 2011, в 18:13
Поделиться
или используйте «jps» .
Thomas Jungblut 08 июнь 2011, в 18:06
Недавняя Java-версия оснащена инструментом «jps» для процесса обработки виртуальной машины Java
[nsushkin@fulton support]$ jps -m 2120 Main --userdir /home/nsushkin/.netbeans/7.0 --branding nb 26546 charles.jar 17600 Jps -m
Nicholas Sushkin 08 июнь 2011, в 22:10
Поделиться
Только примечание: jps поставляется только с JDK, а не с JRE. Машины с простой средой выполнения Java на них не будут иметь этого инструмента.
aguazales 17 июнь 2015, в 17:43
Как я могу получить только счет запуска процесса Java?
Jet 06 фев. 2018, в 12:29
jps -lV
является наиболее полезным. Печатает только pid и квалифицированное имя основного класса:
2472 com.intellij.idea.Main 11111 sun.tools.jps.Jps 9030 play.server.Server 2752 org.jetbrains.idea.maven.server.RemoteMavenServer
tinned_sardine 09 июнь 2015, в 17:50
Поделиться
Вы можете использовать одиночную команду pgrep (не требует использования труб и нескольких команд):
pgrep -fl java
anubhava 08 июнь 2011, в 19:51
Поделиться
Начиная с Java 7, самый простой способ и меньше подверженности ошибкам — просто использовать команду jcmd , которая является частью JDK, чтобы она работала так же на всех ОС.
Пример:
> jcmd 5485 sun.tools.jcmd.JCmd 2125 MyProgram
jcmd позволяет отправлять запросы диагностической команды на запущенную Java Виртуальная машина (JVM).
Nicolas Filotto 11 май 2016, в 18:05
Поделиться
Вау, это даже лучше, чем jps
Sridhar-Sarnobat 23 авг. 2016, в 00:08
Это приведет к возврату всех запущенных java-процессов в среде linux. Затем вы можете убить процесс, используя идентификатор процесса.
ps -e|grep java
Jude Niroshan 23 фев. 2015, в 16:30
Поделиться
Если я хочу просто перечислить java-процессы, используйте:
ps -A | grep java
krzysiek.ste 04 окт. 2013, в 12:15
Поделиться
ps axuwww | grep java | grep -v grep
- показать вам все процессы с длинными строками (arg: www)
- filter (grep) только строки, содержащие слово java, и
- отфильтруйте строку «grep java»:)
(Кстати, этот пример не эффективен, но просто запоминается);)
вы можете передать вышеуказанные команды другим командам, например:
ps axuwww | grep java | grep -v grep | sed '. ' | while read something do something_another $something done
jm666 08 июнь 2011, в 18:32
Поделиться
Когда я хочу узнать, выполняется ли какой-либо Java-класс, я использую следующую командную строку:
ps ww -f -C java | grep "fully.qualified.name.of.class"
С точки зрения операционной системы имя команды процесса «java». Опция «ww» расширяет максимальные символы colum, поэтому можно grep FQN связанного класса.
airbjorn 15 окт. 2014, в 04:42
Поделиться
jps и jcmd не показывали мне никаких результатов, когда я пробовал это, используя openjdk-1.8 на redhat linux. Но даже если бы это было сделано, это показывает только процессы под текущим пользователем, которые не работают в моем случае. Использование ps | grep — это то, что я закончил, но путь класса для некоторых приложений Java может быть чрезвычайно длинным, что делает результаты неразборчивыми, поэтому я использовал sed для его удаления. Это немного грубо, но удаляет все, кроме: PID, User, java-class/jar, args.
ps -o pid,user,cmd -C java | sed -e 's/\([0-9]\+ *[^ ]*\) *[^ ]* *\([^$]*\)/\1 \2/' -e 's/-c[^ ]* [^ ]* \|-[^ ]* //g'
Результаты выглядят примерно так:
PID USER CMD 11251 userb org.apache.zookeeper.server.quorum.QuorumPeerMain ../config/zookeeper.properties 19574 userb com.intellij.idea.Main 28807 root org.apache.nifi.bootstrap.RunNiFi run 28829 root org.apache.nifi.NiFi
Альтернативой для окон для отображения всех процессов является:
WMIC path win32_process where "Caption='java.exe'" get ProcessId,Commandline
Но для этого потребуется разбор, чтобы сделать его более понятным.
Mike 16 фев. 2017, в 19:04
Поделиться
Там много способов сделать это. Вы можете использовать java.lang.ProcessBuilder и «pgrep», чтобы получить идентификатор процесса (PID) с чем-то вроде: pgrep -fl java | awk . Или, если вы работаете под Linux, вы можете запросить каталог /proc .
Я знаю, это кажется ужасным, и не переносимым, и даже плохо реализованным, я согласен. Но поскольку Java фактически работает в VM, по какой-то абсурдной причине, которую я не могу понять после более чем 15 лет работы JDK, почему невозможно увидеть вещи вне пространства JVM, это действительно смешно с вами думаю об этом. Вы можете делать все остальное, даже fork и join дочерние процессы (это был ужасный способ многозадачности, когда мир не знал о потоках или pthreads, что, черт возьми, что происходит с Java. ).
Как узнать PID процесса в Linux
Каждый процесс в операционной системе имеет свой уникальный идентификатор, по которому можно получить информацию об этом процессе, а также отправить ему управляющий сигнал или завершить.
В Linux такой идентификатор называется PID, и узнать его можно несколькими способами. В этой статье мы рассмотрим, как узнать PID процесса в Linux, а также зачем это может вам понадобиться.
Как узнать pid процесса Linux
1. ps
Самый распространённый способ узнать PID Linux — использовать утилиту ps:
ps aux | grep имя_процесса
Кроме нужного нам процесса, утилита также выведет PID для grep, ведь процесс был запущен во время поиска. Чтобы его убрать, добавляем такой фильтр:
ps aux | grep имя_процесса | grep -v grep
Например, узнаём PID всех процессов, имя которых содержит слово «Apache»:
ps aux | grep apache | grep -v grep

2. pgrep
Если вам не нужно видеть подробную информацию о процессе, а достаточно только PID, то можно использовать утилиту pgrep:

По умолчанию утилита ищет по командной строке запуска процесса, если нужно искать только по имени процесса, то надо указать опцию -f:

3. pidof
Эта утилита ищет PID конкретного процесса по его имени. Никаких вхождений, имя процесса должно только совпадать с искомым:

С помощью опции -s можно попросить утилиту выводить только один PID:
pidof -s apache2

4. pstree
Утилита pstree позволяет посмотреть список дочерних процессов для определённого процесса, также их pid-идентификаторы. Например, посмотрим дерево процессов Apache:
pstree -p | grep apache2

Как узнать PID скрипта
Когда вы запускаете скрипт в оболочке, например Bash запускается процесс известный как подоболочка и выполняет последовательно все команды скрипта. Чтобы узнать PID процесса подоболочки Bash, запущенной для скрипта, обратитесь к специальной переменной $$. Эта переменная доступна только для чтения, поэтому вы не сможете ее редактировать:
#!/bin/bash
echo «PID этого скрипта: $$»
Каким процессом занят файл Linux
Выше мы рассмотрели, как получить PID процесса Linux по имени, а теперь давайте узнаем PID по файлу, который использует процесс. Например, мы хотим удалить какой-либо файл, а система нам сообщает, что он используется другим процессом.
С помощью утилиты lsof можно посмотреть, какие процессы используют директорию или файл в данный момент. Например, откроем аудио-файл в плеере totem, а затем посмотрим, какой процесс использует её файл:

В начале строки мы видим название программы, а дальше идёт её PID. Есть ещё одна утилита, которая позволяет выполнить подобную задачу — это fuser:

Здесь будет выведен только файл и PID процесса. После PID идёт одна буква, которая указывает, что делает этот процесс с файлом или папкой:
- c — текущая директория;
- r — корневая директория;
- f — файл открыт для чтения или записи;
- e — файл выполняется как программа;
- m — файл подключен в качестве библиотеки.
Кто использовал файл в Linux
Узнать процесс, который сейчас занимает файл, достаточно просто. Но как узнать, какой процесс обращается к файлу не надолго, например, выполняет его как программу или читает оттуда данные? Эта задача уже труднее, но вполне решаема с помощью подсистемы ядра auditd. В CentOS набор программ для работы с этой подсистемой поставляется по умолчанию, в Ubuntu же его придётся установить командой:
sudo apt install auditd

Теперь создаём правило для мониторинга. Например, отследим, кто запускает утилиту who:
auditctl -w /usr/bin/who -p x -k who_exec
Здесь -w — адрес файла, который мы будем отслеживать, —p — действие, которое нужно отслеживать, —k — произвольное имя для правила. В качестве действия могут использоваться такие варианты:
Теперь выполним один раз who и посмотрим, что происходит в логе с помощью команды ausearch:
sudo ausearch -i -k who_exec

Здесь в секции SYSCALL есть PID процесса, под которым была запущена программа, а также PPID — программа, которая запустила нашу who. Копируем этот PID и смотрим информацию о нём с помощью ps:
ps aux | grep 15595

Становиться понятно, что это bash.
Какой процесс использует порт в Linux
Иногда необходимо узнать PID Linux-программы, которая использует сетевой порт, например 80. Для этого можно использовать утилиту ss:
sudo ss -lptn ‘sport = :80’

Мы видим, что это несколько процессов Apache. Использовав опцию dport, можно узнать, какой процесс отправляет данные на указанный порт:
sudo ss -lptn ‘dport = :80’
Выводы
В этой статье мы рассмотрели, как узнать PID процесса в Linux по различным условиям: имени или файлу. Как видите, всё достаточно просто, и в считанные минуты можно можно понять, что происходит с вашей операционной системой, и какой процесс за это отвечает.
Список java процессов
java грузит почти половину процессора. Интересует, можно ли как-то узнать список запущенных в java процессов. Перегружал tomcat — не помогает.
Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
задан 27 фев 2015 в 3:47
2,068 7 7 золотых знаков 35 35 серебряных знаков 70 70 бронзовых знаков
Можно javamelody это подключить code.google.com/p/javamelody.
27 фев 2015 в 8:43
Почитайте, может, поможет: habrahabr.ru/post/153135
27 фев 2015 в 9:29
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
- Подключаемся к процессу JVM с помощью инструментов jconsole или jvisualvm. Получаем возможность online видеть все потоки.
- Делаем дамп потоков процесса JVM с помощью утилиты jstack (http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstack.html). Получаем информацию обо всех потоках на момент получения дампа.
P.S. Грузит половину процессора не Java, а исполняемый код приложения. Посмотрите, где больше всего времени проводит JVM, в потоках, исполняющих логику или в потоке GC. Посмотрите на график работы GC. Не слишком ли часто запускается сборщик и много ли памяти он освобождает каждый раз? Включите логирование GC (http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#DebuggingOptions). Не слишком ли много времени занимает сборка мусора? Далее делайте вывод о том, кто в основном потребляет CPU — основная логика или GC. Оптимизируйте самую ресурсоемкую часть. Повторяйте процесс итеративно до достижения необходимого результата.
P.P.S. Еще есть Java Mission Control. Но сам не пробовал.
Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
ответ дан 3 мар 2015 в 16:18
13.1k 1 1 золотой знак 28 28 серебряных знаков 28 28 бронзовых знаков
- java
- tomcat
- linux
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.21.1314
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как получить список текущих открытых процессов с Java?
Это простая Java-программа, которая захватывает все запущенные процессы в системе и печатает каждый процесс построчно.
Мы будем использовать класс Runtime , Каждое Java-приложение имеет один экземпляр класса Runtime это позволяет приложению взаимодействовать со средой, в которой оно запущено. Текущее время выполнения можно получить из getRuntime метод.
Приложение не может создать свой собственный экземпляр этого класса.
Примечание: мы используем команду ps -few захватить все процессы .
