一、ps - 查看进程

ps 是最常用的进程查看命令,对于 Java 应用来说尤其重要。

常用场景

查看 Java 进程

# 查看所有 Java 进程
ps aux | grep java
​
# 或使用 pgrep(更简洁)
pgrep -l java
​
# 查看 Tomcat 进程
ps aux | grep tomcat
​
# 查看指定端口的进程
ps aux | grep 8080

查看进程详细信息

# 查看指定 PID 的进程
ps -fp 1234
​
# 查看进程树(查看父子关系)
ps axjf | grep java
​
# 按内存使用排序(找内存泄漏)
ps aux --sort=-%mem | grep java | head -n 5
​
# 按 CPU 使用排序(找 CPU 占用高)
ps aux --sort=-%cpu | grep java | head -n 5

提示:生产环境的 Java 应用通常以 jar 包或 Tomcat 方式运行,用 ps 找进程时注意应用名称。

二、top/htop - 系统监控

top 和 htop 是实时监控系统资源的重要工具,排查性能问题时必备。

top 基本使用

# 启动 top
top
​
# 只查看指定进程
top -p 1234
​
# 按 CPU 排序(按 P)
# 按内存排序(按 M)
# 退出(按 q)

htop 推荐

htop 界面更友好,支持鼠标操作。

# 安装 htop
# Ubuntu/Debian
sudo apt-get install htop
​
# CentOS/RHEL
sudo yum install htop
​
# 启动
htop
​
# F3 搜索进程(输入 java)
# F9 杀死进程
# F10 退出

Java 应用排查场景

  • CPU 占用高:找到 Java 进程,看是哪个线程占用高
  • 内存泄漏:看 RES/VIRT 列,持续增长可能有问题
  • 线程数过多:查看 Java 进程的线程数是否异常

三、netstat/ss - 网络排查

netstat 和 ss 用于查看网络连接和端口占用,排查端口冲突时很有用。

netstat 使用

# 查看所有监听端口
sudo netstat -tlnp
​
# 查看 8080 端口被谁占用
sudo netstat -tlnp | grep 8080
​
# 查看指定进程的网络连接
sudo netstat -anp | grep 1234
​
# 统计 TCP 连接数
sudo netstat -an | grep ESTABLISHED | wc -l

ss 推荐(更快)

# 查看监听端口
sudo ss -tlnp
​
# 查看端口占用
sudo ss -tlnp | grep 8080
​
# 查看进程打开的 socket
sudo ss -p | grep 1234

常见问题场景

  • 启动 Spring Boot 报错 "端口已被占用"
  • 查看 Tomcat 默认 8080 端口是否被占用
  • 查看数据库连接池是否达到上限

四、tail - 查看日志

tail 是 Java 工程师使用频率最高的命令之一,实时查看日志必不可少。

常用用法

# 查看文件最后 100 行
tail -n 100 application.log
​
# 实时跟踪日志(最常用)
tail -f application.log
​
# 同时查看多个日志文件
tail -f application.log | grep ERROR
​
# 实时查看并高亮错误
tail -f application.log | grep --color=auto -E "ERROR|WARN"
​
# 查看日志最后 N 行并持续监控
tail -n 100 -f application.log

多日志文件监控

# 监控多个日志
tail -f application.log system.log
​
# 或使用 multitail(支持多窗口)
# 安装
sudo apt-get install multitail
​
# 使用
multitail application.log system.log

注意:生产环境日志量很大,建议配合 grep 过滤,否则终端会刷爆。

五、grep - 搜索内容

grep 用于在文件中搜索文本,分析日志时必不可少。

常用场景

# 搜索错误日志
grep ERROR application.log

# 忽略大小写搜索
grep -i error application.log

# 显示行号
grep -n ERROR application.log

# 查看匹配行的前后 5 行(查看上下文)
grep -C 5 "Exception" application.log

# 只显示匹配行的后 5 行
grep -A 5 "Exception" application.log

# 统计出现次数
grep -c "ERROR" application.log

# 递归搜索所有日志文件
grep -r "Exception" /var/log/apps/

# 反向匹配(不包含某内容)
grep -v "DEBUG" application.log

组合使用

# 实时查看错误日志
tail -f application.log | grep ERROR

# 查看最近 1000 行的异常
tail -n 1000 application.log | grep -A 5 "Exception"

# 统计各类型日志数量
grep -E "ERROR|WARN|INFO|DEBUG" application.log | sort | uniq -c

六、kill - 管理进程

kill 用于结束进程,重启 Java 应用时经常用到。

常用用法

# 正常结束进程
kill 1234

# 强制结束进程(强制关闭)
kill -9 1234

# 结束多个进程
kill -9 1234 5678

# 结束所有 java 进程(谨慎使用)
sudo killall java

# 结束指定名称的进程
pkill -f tomcat

# 根据 PID 精确结束
kill -TERM 1234

Java 应用重启流程

# 1. 找到 Java 进程 PID
ps aux | grep java

# 2. 正常关闭(等待请求处理完)
kill 1234

# 3. 如果关不掉,强制关闭
kill -9 1234

# 4. 重新启动应用
nohup java -jar app.jar > app.log 2>&1 &

警告:生产环境慎用 kill -9,可能导致数据丢失或事务未回滚。优先使用正常关闭方式。

七、find - 查找文件

find 用于在文件系统中查找文件,找配置文件或日志文件时很有用。

常用场景

# 按名称查找配置文件
find / -name "application.properties"

# 查找目录
find / -type d -name "logs"

# 查找最近 7 天修改的文件
find /var/log -name "*.log" -mtime -7

# 查找大于 100M 的文件
find / -size +100M

# 查找并删除旧日志
find /var/log/apps -name "*.log" -mtime +30 -delete

# 查找空目录
find /path -type d -empty

Java 应用场景

# 查找所有 jar 包
find /opt/app -name "*.jar"

# 查找 Java 进程的 pid 文件
find / -name "*.pid"

# 查找配置文件
find /opt/app -name "application*.yml"

# 查找 core dump 文件
find / -name "core*"

八、tar/zip - 解压部署

部署 Java 应用时,经常需要解压压缩包。

tar 常用

# 解压 .tar.gz
tar -xzf apache-tomcat-9.0.50.tar.gz

# 解压到指定目录
tar -xzf app.tar.gz -C /opt/

# 查看 .tar.gz 内容(不解压)
tar -tzf app.tar.gz

# 压缩目录
tar -czf app-backup.tar.gz /opt/app

# 排除某些文件压缩
tar -czf app.tar.gz /opt/app --exclude="*.log"

zip 常用

# 解压 zip 文件
unzip app.zip

# 解压到指定目录
unzip app.zip -d /opt/app

# 查看 zip 内容
unzip -l app.zip

# 压缩目录
zip -r app.zip /opt/app

部署流程示例

# 1. 上传部署包
scp app.zip user@server:/tmp/

# 2. 登录服务器解压
cd /opt
unzip /tmp/app.zip

# 3. 备份旧版本
mv app app.bak

# 4. 启动新版本
cd /opt/app/bin
./startup.sh

九、curl/wget - 接口测试

curl 和 wget 用于测试接口和下载文件,API 开发必备。

curl 测试接口

# GET 请求
curl http://localhost:8080/api/user/1

# POST JSON 数据
curl -X POST http://localhost:8080/api/user \
  -H "Content-Type: application/json" \
  -d '{"name":"test","age":18}'

# 只查看响应头(排查问题)
curl -I http://localhost:8080/health

# 查看详细请求过程(调试用)
curl -v http://localhost:8080/api/user/1

# 忽略 SSL 证书(测试环境)
curl -k https://localhost:8443/api/health

# 设置超时时间
curl -m 5 http://localhost:8080/api/health

# 保存响应到文件
curl -o response.json http://localhost:8080/api/user/1

wget 下载文件

# 下载 JDK
wget https://download.oracle.com/java/jdk/jdk-11.tar.gz

# 下载 Maven 依赖
wget https://repo1.maven.org/maven2/.../jar-file.jar

# 断点续传(下载大文件)
wget -c https://example.com/large-file.zip

# 后台下载
wget -b https://example.com/file.zip

十、df/du - 磁盘排查

磁盘空间不足是 Java 应用的常见问题,需要熟练掌握。

df 查看磁盘使用

# 查看磁盘使用情况
df -h

# 查看指定目录
df -h /var/log

# 查看 inode 使用情况(文件数超限)
df -i

# 查看/tmp 目录(Java 应用临时文件)
df -h /tmp

du 查看目录大小

# 查看当前目录大小
du -sh .

# 查看日志目录大小
du -sh /var/log/apps

# 查看子目录大小(找占用大的)
du -h --max-depth=2 /var/log/apps | sort -rh

# 查找最大的 10 个文件
find /var/log/apps -type f -exec du -h {} + | sort -rh | head -n 10

# 查找所有 .log 文件大小
find /var/log/apps -name "*.log" -exec du -ch {} + | grep total

常见问题场景

  • 日志文件占满磁盘
  • Java 临时文件堆满 /tmp
  • Heap dump 文件过大
  • 应用无法写日志(磁盘满)

清理方案

# 清理 30 天前的日志
find /var/log/apps -name "*.log" -mtime +30 -delete

# 清理 core dump
find / -name "core*" -mtime +7 -delete

# 清理临时文件
rm -rf /tmp/app-cache/*

额外推荐:free - 内存监控

Java 应用的内存问题很常见,free 是必备工具。

基本用法

# 查看内存使用
free -h

# 持续监控(每 2 秒)
watch -n 2 free -h

# 以 MB 为单位显示
free -m

# 查看详细内存信息
cat /proc/meminfo

Java 应用内存排查

# 1. 查看系统内存
free -h

# 2. 查看 Java 进程内存占用
ps aux | grep java

# 3. 查看 JVM 堆内存(需要 jmap)
jmap -heap 1234

# 4. 生成 Heap Dump(分析内存泄漏)
jmap -dump:format=b,file=heap.hprof 1234

组合使用场景

场景一:应用启动失败

# 1. 查看端口是否被占用
sudo netstat -tlnp | grep 8080

# 2. 查看是否有残留进程
ps aux | grep java

# 3. 查看启动日志
tail -f application.log

# 4. 检查磁盘空间
df -h

场景二:应用响应慢

# 1. 查看 CPU 和内存
top
htop

# 2. 查看 Java 进程线程数
ps -eLf | grep java | wc -l

# 3. 查看网络连接
sudo netstat -an | grep ESTABLISHED | wc -l

# 4. 查看错误日志
tail -n 100 application.log | grep ERROR

场景三:内存泄漏排查

# 1. 持续监控内存
watch -n 5 free -h

# 2. 查看 Java 进程内存
ps aux | grep java

# 3. 生成 Heap Dump
jmap -dump:format=b,file=heap.hprof 1234

# 4. 查看 GC 日志
tail -f gc.log

快速参考

# 查看 Java 进程
ps aux | grep java

# 查看端口占用
sudo netstat -tlnp | grep 8080

# 结束进程
kill -9 1234

# 实时查看日志
tail -f application.log

# 查看最近 100 行
tail -n 100 application.log

# 搜索错误
grep ERROR application.log

# 系统监控
top
htop

# 查看内存
free -h

# 查看磁盘
df -h

# 解压部署包
tar -xzf app.tar.gz

# 查看目录大小
du -sh /opt/app

# 测试接口
curl http://localhost:8080/health

实际工作中最重要的是:

  1. 熟练使用 ps + netstat,快速定位进程和端口问题
  2. 掌握 tail + grep,高效查看和分析日志
  3. 了解 top + free,排查性能和内存问题

接下来我会整理JDK自带的常用命令。

相关文章

最后修改:2026 年 01 月 25 日
如果觉得我的文章对你有用,请随意赞赏