上一篇
2025年8月最新动态:随着Java 21 LTS版本的广泛部署,JDK内置的JVM诊断工具(如jcmd和jhsdb)新增了对容器化环境的原生支持,使得在Kubernetes等平台监控Java进程更加高效。
Java应用在服务器上通常长期运行,但内存泄漏、线程阻塞或GC异常等问题可能导致性能下降,通过精准定位Java进程,我们能够快速排查问题,
ps
命令精准过滤ps -ef | grep java
输出示例:
ubuntu 12345 1 0 Aug10 ? 00:15:27 /usr/bin/java -jar /opt/myapp.jar
关键字段说明:
12345
:进程PID(后续操作全靠它) /opt/myapp.jar
:启动的主类或JAR包 进阶技巧:
ps -eo pid,user,cmd,%mem,%cpu --sort=-%cpu | grep java # 按CPU排序
jps
——JDK自带的轻量级工具jps -l
输出示例:
25688 com.example.Main
26344 sun.tools.jps.Jps
优势:直接显示主类名,无需额外过滤。
注意:仅显示当前用户的Java进程,加-v
可看JVM参数。
pgrep
快速获取PIDpgrep -f java # 返回所有含"java"关键字的PID
如果知道Java服务端口(比如8080):
sudo lsof -i :8080 | grep LISTEN
htop
交互式查看安装后运行htop
,按F3搜索"java",可直观看到CPU/内存占用。
cat /proc/<PID>/cmdline | tr '\0' ' ' # 把NULL字符转空格
jcmd <PID> VM.flags # JDK7+推荐方式
或
ps -p <PID> -o args
jstat -gc <PID> 1s # 每1秒打印GC情况
输出字段解读:
S0C
:Survivor 0区容量 OUM
:老年代已使用内存 jstack <PID> > thread_dump.log # 保存到文件
典型用途:检测死锁或高CPU线程。
在Docker中查询Java进程:
docker exec -it <容器ID> jps # 需容器内有JDK
或通过top
命令后观察进程归属的cgroup。
#!/bin/bash PID=$(pgrep -f java | head -1) [ -z "$PID" ] && echo "No Java process found!" && exit 1 echo "===== 进程概况 =====" ps -p $PID -o user,pid,%cpu,%mem,cmd echo -e "\n===== JVM参数 =====" jcmd $PID VM.flags echo -e "\n===== 内存统计 =====" jstat -gc $PID
Q:jps
找不到我的进程?
A:可能因权限问题,尝试sudo -u <java用户> jps
。
Q:如何区分多个Tomcat实例?
A:结合ps -ef | grep catalina.home
查看启动路径。
Q:没有JDK工具怎么办?
A:使用/proc/<PID>/status
文件查看基础资源占用。
掌握这些方法,你就能像运维老手一样轻松驾驭Linux上的Java进程管理了!
本文由 富永康 于2025-08-02发表在【云服务器提供商】,文中图片由(富永康)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/512811.html
发表评论