日常工作常用的命令(Linux+JDK)

日常开发工作中,不可避免的需要用到一些Linux命令,本文着重梳理一些开发工作中的Linux命令。

一、进程相关

1.查看进程

bash 复制代码
# 查找java进程
ps -ef | grep java
ps aux | grep java

# 更推荐:jps(JDK自带,必须配置JAVA_HOME)
jps -l        # 显示主类全路径
jps -v        # 显示JVM启动参数
jps -m        # 显示main方法入参

2.实时进程资源占用

bash 复制代码
top              # 全局资源视图
top -Hp <pid>    # 【重中之重】查看Java进程内部线程(排查CPU飙升)
# shift+p 按CPU排序;shift+m 按内存排序

场景:Java CPU 100%,top -Hp pid 找到占用高的线程 tid,转 16 进制,配合 jstack 定位代码

bash 复制代码
htop  # 美化版top,需要安装,直观好用

3.JDK线上诊断命令(Java + Linux 组合必杀技)

bash 复制代码
jstack <pid>        # 打印线程栈,排查死锁、阻塞、线程耗尽
jmap -heap <pid>    # 查看堆内存配置、新生代老年代使用情况
jmap -dump:format=b,file=heap.hprof <pid>  # dump堆快照(生产慎用,会STW)
jstat -gc <pid> 1000  # 每秒打印GC指标,观察YGC/FGC、耗时

4.进程操作

bash 复制代码
kill -9 <pid>   # 强制杀死(尽量优先 kill <pid> 优雅关闭)
pkill -f java   # 匹配字符串杀进程,谨慎使用

二、日志分析命令(日常定位异常、报错、接口日志)

Java 项目日志一般:info.logerror.log、springboot 输出日志文件

1.实时查看日志

bash 复制代码
tail -f xxx.log          # 实时跟踪日志
tail -n 500 -f xxx.log   # 最后500行实时刷新
tail -F xxx.log          # 文件切割(logrotate)也能持续监听,线上首选

2.搜索日志搜索日志(grep 三剑客)

bash 复制代码
# 基础搜索
grep "NullPointerException" xxx.log
grep -i "timeout" xxx.log      # -i 忽略大小写
grep -A10 -B10 "Exception" log # 匹配行前后各10行
grep -C15 "ERROR" log          # 前后各15行

# 多关键词、排除日志
grep "ERROR" xxx.log | grep -v "heartbeat" # 过滤掉心跳无关日志

3.查看日志

bash 复制代码
less xxx.log
# less常用快捷键:
# /关键词 向下搜索;?关键词向上搜索;n下一个匹配;G跳到末尾

4.awk/sed 统计日志(高级开发必备,统计接口耗时、报错数量)

bash 复制代码
# 统计一小时内报错行数
grep "ERROR" app.log | wc -l

# awk示例:统计接口平均耗时(假设日志打印cost=xxx)
grep "request cost" app.log | awk -F'cost=' '{sum+=$2;count++} END{print sum/count}'

5.日志时间范围筛选(线上查指定时间段报错)

bash 复制代码
sed -n '/2026-08-16 10:00:00/,/2026-08-16 10:30:00/p' app.log

三、网络排查(Java 接口超时、连接池爆满、Dubbo/HTTP 不通、端口占用)

1.端口占用排查

bash 复制代码
# centos7+
ss -tulnp | grep 8080
# 老版本
netstat -tulnp | grep 8080

# 查询哪个进程占用端口
lsof -i :8080

2.连通性测试

bash 复制代码
ping shturl.cc/g5Qbh

# 测试端口通不通(curl通用,无需额外安装)
curl -v http://127.0.0.1:8080/health
# 单纯探测端口
telnet ip port
nc -zv ip port

3.路由、延迟、丢包排查

bash 复制代码
traceroute ip
mtr ip  # 结合ping+路由,排查网络抖动,强烈推荐

4.TCP 连接状态(排查连接泄露、HttpClient/Dubbo 连接不释放)

bash 复制代码
# 统计各个tcp状态数量 ESTABLISHED/TIME_WAIT
ss -an | awk '/^TCP/ {print $5}' | cut -d: -f2 | sort | uniq -c
ss -s   # 汇总TCP整体连接统计

5.防火墙

bash 复制代码
# centos
systemctl status firewalld
firewall-cmd --list-ports

# 临时关闭(测试环境)
systemctl stop firewalld

四、文件与目录操作(上传 jar、解压、磁盘爆满排查)

1.磁盘空间(经常遇到日志打满磁盘)

bash 复制代码
df -h                # 查看磁盘整体使用率
du -sh *             # 当前目录各个文件夹大小
du -sh /home/app/log # 指定目录总大小
du -h --max-depth=1  # 只展示一级目录,快速定位大文件夹

坑:rm 删除大日志后磁盘不释放!进程还持有文件句柄,需要重启进程或者清空文件 > app.log

2.文件传输

bash 复制代码
# 服务器之间拷贝
scp app.jar root@192.168.1.100:/home/app/

# 生产优先 rsync(增量传输,适合同步日志/配置)
rsync -avz xxx root@ip:/path

3.压缩解压

bash 复制代码
tar -zcvf package.tar.gz dir/    # 压缩
tar -zxvf package.tar.gz          # 解压
unzip xxx.zip

4.文件权限

bash 复制代码
chmod 755 startup.sh
chown -R app:app /home/app       # 修改目录归属(普通用户运行Java程序)

5.查找文件

bash 复制代码
find /home/app -name "*.jar"
find . -name "*.log" -mtime +7   # 查找7天前日志(用于清理脚本)

五、系统基础信息命令(快速了解服务器环境)

bash 复制代码
uname -a          # 内核版本
cat /etc/os-release # 系统版本(CentOS/Rocky/Ubuntu)
free -h           # 内存使用(buff/cache,区分可用内存)
uptime            # 机器负载、运行时间
hostname          # 主机名
date              # 系统时间(Java时区不一致经常踩坑)

六、服务、后台运行 Java 程序 & Shell 脚本常用

1.后台启动 jar(传统方式,生产一般搭配 systemd/supervisor)

bash 复制代码
# nohup后台启动,输出日志
nohup java -jar app.jar > app.log 2>&1 &
# &后台运行;2>&1 错误流重定向标准输出
  1. systemd(现代服务器主流,管理 Java 应用)
bash 复制代码
systemctl start app
systemctl stop app
systemctl restart app
systemctl status app
journalctl -u app -f    # 实时查看服务日志
journalctl -u app --since "2026-08-16 10:00:00"

七、高频经典排查场景命令组合

场景 1:Java 进程 CPU 飙高:

  • ① top 找到应用 PID
  • ② top -Hp ${pid} 找到高负载线程 TID
  • ③ printf "%x\n" ${tid} 转为 16 进制
  • ④ jstack ${pid} > stack.txt
  • ⑤ grep 十六进制tid stack.txt 定位代码

场景 2:磁盘占满

  • df -hcd 挂载点du -sh * 找到超大日志文件

场景 3:接口大量超时,怀疑端口 / 连接耗尽

  • ss -an | grep :8080 查看连接数、TIME_WAIT 数量

场景 4:快速统计报错量

  • grep "ERROR" app.log | wc -l

八、系统LInux命令 vs JDK自带命令

1.操作系统命令

特点:作用对象是操作系统层面的进程、线程、文件、网络,看不懂 JVM 内部细节。

bash 复制代码
# 进程查看类
top                # 系统全局资源、进程CPU/内存
top -Hp PID        # 查看进程内所有线程(排查Java CPU高占用必备)
ps -ef、ps aux     # 列出系统所有进程
pstree             # 进程树

# 网络类
netstat、ss、lsof
ping、mtr、traceroute
curl、nc

# 文件/磁盘
df、du、find、less、tail、grep、awk、sed

# 系统信息
free -h、uptime、uname、hostname
kill、killall     # 发送信号终止进程

2.JDK自带命令(位于 $JAVA_HOME/bin)

JDK 8

bash 复制代码
jps         # Java进程状态工具(替代 ps -ef | grep java)
jstack      # 打印JVM线程栈、死锁、阻塞线程
jmap        # 堆内存查看、dump堆快照
jstat       # GC实时统计、类加载、编译监控
jinfo       # 查看/动态修改JVM启动参数
jhat        # 离线分析hprof堆dump文件

JDK9 +(OpenJDK11+ 很多发行版把这些工具放到 jcmd 统一入口)

bash 复制代码
jcmd <pid> VM.flags          # 等价jinfo
jcmd <pid> Thread.print      # 等价jstack
jcmd <pid> GC.heap_dump file.hprof # 等价jmap dump
jcmd <pid> GC.stat           # 等价jstat -gc

3.小结

命令 归属 核心用途
top、ps、lsof、ss、df、du Linux 系统命令 服务器资源、进程、网络、磁盘(宏观)
jps、jstack、jmap、jstat、jinfo JDK 自带 JVM 内部:线程、堆、GC、JVM 参数(微观)
jcmd JDK9 + 统一工具入口 整合上面绝大多数 JDK 诊断功能
相关推荐
我不是程序员三三5 分钟前
怎么监控电脑?企业办公终端监控建设实战与合规要点
服务器·数据库·电脑
筝筝ba13 分钟前
OpenBMC 自动化测试中的多进程陷阱:从 Execute Process 返回异常到 output.xml 损坏问题分析
xml·linux·运维·服务器·网络
饕餮争锋14 分钟前
PATH路径列表介绍
java·linux·服务器
V1588972620115 分钟前
从滴滴模式看机器人租赁:撮合型租赁平台开发源码的调度系统设计思路
linux·前端·机器人
伯恩bourne27 分钟前
Qdrant 快速入门 :数据模型介绍
服务器·数据库·人工智能
z落落28 分钟前
C#简易聊天室(服务器+客户端)
运维·服务器·c#
代码村新手28 分钟前
Linux-vim的使用和配置
linux
爱喝水的鱼丶36 分钟前
SAP-ABAP: BAdI 开发规范与避坑指南:10 类典型错误与运维方案
运维·性能优化·sap·abap·增强·经验交流·开发交流
CDN36036 分钟前
CDN 回源负载均衡实战:解决多源站回源流量不均、源站单点故障,出海业务配置指南
运维·负载均衡
吴声子夜歌39 分钟前
编写Shell脚本——启动项目
linux·运维·shell