日常开发工作中,不可避免的需要用到一些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.log、error.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 错误流重定向标准输出
- 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 -h→cd 挂载点→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 诊断功能 |