日常工作常用的命令(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 诊断功能
相关推荐
snow@li1 小时前
Telnet 全景教程:全平台安装、命令使用、故障排查与安全规范
运维·网络
coward911 小时前
全志T507 (sun50iw9p1)sunxi pinctrl 子系统实现分析
linux·嵌入式硬件
Bruce_Liuxiaowei1 小时前
自动化渗透测试——用AI构建自动化渗透测试流程
运维·人工智能·自动化
OnlineProxy1 小时前
如何在无需手机号的情况下创建 Google 账号:高信任度代理(High Trust Score Proxy)如何取代短信验证
运维·服务器·facebook
imaol11 小时前
文件编程--标准IO
linux·运维·算法
梦想的旅途21 小时前
企业微信SCRM怎么对接API?私域自动化常用接口清单
运维·自动化·企业微信
王坊兴2 小时前
Ubuntu 部署产品原型静态服务器:SFTP + Nginx
服务器·nginx·ubuntu
旗开得胜马到成功2 小时前
AMD TPM 8.3/8.5漏洞技术剖析:服务器加密信任根崩塌后的备份密钥泄露风险与紧急加固
运维·服务器·网络·系统架构
guanchabao2 小时前
三相63A与端口级遥调并行:2026年AI服务器老化测试专用PDU的选型路径
服务器