杰瑞科技汇

Linux下如何快速查看Java进程?

使用 ps 命令 (最基础)

ps 命令用于显示当前系统的进程状态,这是查看进程最直接的方式。

Linux下如何快速查看Java进程?-图1
(图片来源网络,侵删)

查找所有 Java 进程

ps -ef | grep java

命令解释:

  • ps -ef: 显示所有进程的详细信息。
    • -e: 显示所有进程 (all processes)。
    • -f: 以完整的格式显示 (full format)。
  • 管道符,将 ps 命令的输出作为 grep 命令的输入。
  • grep java: 从输入中过滤出包含 "java" 字符串的行。

输出示例:

# ps -ef | grep java
root      1234  1233  0 10:30 pts/0    00:00:10 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -jar my-app.jar
tomcat    5678  1234  0 10:31 ?        00:00:05 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -Djava.util.logging.config.file=logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -jar /path/to/tomcat/bin/bootstrap.jar
user      9012  5678  0 10:32 ?        00:00:02 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -jar another-service.jar

重要提示: 你会看到 grep java 这个进程本身也被列出来了,你可以使用 grep -v grep 来排除它:

ps -ef | grep java | grep -v grep

查找特定 Java 进程(更精确)

如果你知道 Java 进程的关键词(JAR 包名或主类名),可以直接用 grep 过滤,这样结果更干净。

Linux下如何快速查看Java进程?-图2
(图片来源网络,侵删)
# 查找包含 "my-app.jar" 的 Java 进程
ps -ef | grep "my-app.jar"
# 查找包含 "MainClass" 的 Java 进程
ps -ef | grep "MainClass"

使用 jps 命令 (最推荐)

jps (Java Virtual Machine Process Status Tool) 是 JDK 自带的一个轻量级命令行工具,专门用于查看 Java 进程,它比 ps 更精确,因为它只显示 Java 进程。

查看所有 Java 进程

jps

输出示例:

1234 Jps
5678 Bootstrap
9012 my-app.jar

输出解释:

  • 第一列是 Java 进程的 ID (PID)。
  • 第二列是 Java 进程的主类名或 JAR 文件名。

查看详细信息(显示主类参数)

jps -l

输出示例:

Linux下如何快速查看Java进程?-图3
(图片来源网络,侵删)
1234 sun.tools.jps.Jps
5678 org.apache.catalina.startup.Bootstrap
9012 /path/to/my/my-app.jar
  • -l (小写 L): 显示主类的完整路径或 JAR 文件的完整路径。

显示传递给 JVM 的参数

jps -v

输出示例:

9012 -Djava.util.logging.config.file=logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms512m -Xmx1024m
  • -v: 显示传递给 JVM 的参数(如 -Xms, -Xmx 等)。

显示启动参数

jps -V
  • -V: 显示通过 -XX:+PrintFlagsFinal 筇启动参数传递给 JVM 的参数。

使用 pgrep 命令 (简洁高效)

pgrep 是一个更现代、更简洁的工具,可以根据进程名、进程名等属性查找进程 ID。

查找所有 Java 进程的 PID

pgrep java

输出示例:

1234
5678
9012

这只会返回进程 ID,非常简洁。

结合 kill 命令使用

pgrep 非常适合用于脚本中,比如直接杀死所有 Java 进程:

# 强制杀死所有 java 进程
kill -9 $(pgrep java)

使用 top / htop 命令 (实时监控)

tophtop 是动态的进程查看器,可以实时监控系统资源的使用情况。

使用 top

top

进入 top 界面后,你可以:

  • P (大写) 按 CPU 使用率排序。
  • M (大写) 按 内存使用率排序。
  • >< 切换排序字段。
  • c 切换显示完整的命令行。
  • k 然后输入 PID 来杀死进程。

你可以在 top 界面中直接找到 java 进程并观察其资源消耗。

使用 htop (更友好的 top)

如果你的系统安装了 htop,强烈推荐使用它,界面更直观,操作更方便。

htop

htop 默认会高亮显示正在运行的程序,你可以用方向键选择 java 进程,按 F9 可以直接杀死进程。


总结与最佳实践

方法 命令 优点 缺点 适用场景
ps ps -ef \| grep java 系统自带,通用性强 可能会误 grep 到 grep 进程,不够精确 快速、临时查看,任何 Linux 环境
jps jps -lv JDK自带,最精确,专为 Java 设计 需要安装 JDK,非 root 用户可能看不到其他用户进程 Java 开发和运维的首选,查看 JVM 详情
pgrep pgrep java 简洁,只返回 PID,适合脚本 功能相对单一,不如 jps 信息丰富 编写 Shell 脚本时快速获取 PID
top/htop top / htop 实时监控资源,动态交互 信息量大,需要手动筛选和操作 实时监控 Java 进程的 CPU、内存使用情况

推荐的工作流程:

  1. 快速查找:当你只是想快速知道有哪些 Java 进程在运行时。

    jps
  2. 获取详细信息:当你需要知道 Java 进程的完整路径、启动参数时。

    jps -lv
  3. 实时监控性能:当你需要观察 Java 进程的资源占用情况时。

    htop  # (或 top)
    # 在 htop 中找到 java 进程,按 P 或 M 排序
  4. 脚本化操作:当你需要在脚本中自动化处理 Java 进程时。

    # 重启一个服务
    kill $(pgrep -f "my-app.jar")
    nohup java -jar my-app.jar > app.log 2>&1 &
分享:
扫描分享到社交APP
上一篇
下一篇