Java 开发者线上问题排查常用的 15 个 Linux 命令
ahcoder 2025-06-13 10:52 5 浏览
作为 Java 开发者,线上环境的问题排查是日常工作的重要组成部分。熟练掌握 Linux 命令能大幅提升排查效率,快速定位进程异常、日志错误、性能瓶颈等核心问题。本文结合 Java 应用特点,整理 15 个高频使用的 Linux 命令,覆盖进程管理、日志分析、性能监控、网络排查等核心场景,附实战示例及注意事项。
一、进程管理
1.ps- 查看进程详细信息
使用场景:查找 Java 进程 PID、查看 JVM 参数、确认进程启动状态
# 查找所有Java进程(含完整启动参数)
ps -ef | grep java
# 输出示例:
# user 12345 6789 0 14:30 pts/0 00:00:02 java -Xmx2g -XX:MetaspaceSize=256m -jar app.jar
# 查看指定PID的进程状态(如PID=12345)
ps -p 12345 -o user,pid,%cpu,%mem,cmd
Java 场景:通过CMD列验证 JVM 参数是否正确生效(如 - Xmx、-XX:MetaspaceSize),排查因参数配置错误导致的 OOM 问题。
2.top- 实时监控进程资源占用
使用场景:定位 CPU / 内存占用过高的 Java 进程
# 交互式实时监控(按P键按CPU排序,按M键按内存排序)
top
# 输出关键指标:
# PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
# 12345 appuser 20 0 4096m 1.8g 1280 S 50.0 23.4 10:23.56 java
# 查看指定Java进程(PID=12345)的资源细节
top -p 12345
进阶操作:输入H显示进程内所有线程,结合jstack分析线程堆栈(见日志分析部分)。
3.kill- 优雅终止进程
使用场景:重启前停止旧进程、处理僵尸进程
# 发送SIGTERM信号(优雅关闭,等待资源释放)
kill 12345
# 强制终止(不推荐,可能导致数据丢失)
kill -9 12345
# 向所有Java进程发送信号
kill $(ps -ef | grep java | grep -v grep | awk '{print $2}')
最佳实践:优先使用kill而非kill -9,配合 Spring Boot Actuator 的/shutdown端点实现优雅停机,避免数据不一致。
二、日志分析:快速定位异常堆栈
4.grep- 过滤日志关键信息
使用场景:搜索异常堆栈、业务日志定位
# 搜索ERROR级日志并显示前后3行(定位异常上下文)
grep -C 3 "ERROR" catalina.out
# 输出示例:
# 2023-05-20 10:30:45 ERROR [http-nio-8080-exec-1] com.example.service.UserService: User not found for id=123
# ... 相关上下文 ...
# 搜索包含"NullPointerException"的日志(区分大小写)
grep "NullPointerException" app.log
# 统计异常次数
grep -c "OutOfMemoryError" gc.log
Java 技巧:结合| wc -l统计异常次数,| sort | uniq -c去重统计高频错误。
5.tail- 实时跟踪日志输出
使用场景:监控实时日志、查看最新报错
# 实时显示最后100行日志(常用排查手段)
tail -n 100 -f catalina.out
# 仅显示新增日志(不显示历史内容)
tail -f --retry app.log
# 多文件实时监控
tail -f app.log error.log
生产环境:配合lsof | grep deleted处理被删除但句柄未释放的日志文件。
6.less- 分页查看大日志文件
使用场景:查看 GB 级日志文件(避免cat导致内存溢出)
# 分页查看并支持搜索(输入/关键词搜索,n下一个匹配)
less catalina.out
# 实时监控日志更新(类似tail -f,但支持翻页)
less +F app.log
# 快捷键:
# g:跳到开头
# G:跳到结尾
# /keyword:搜索关键词
# n/N:下一个/上一个匹配
# q:退出
最佳实践:对于超大日志文件,使用less +/ERROR app.log直接定位错误行。
三、性能监控:定位 CPU / 内存瓶颈
7.vmstat- 系统级性能统计
使用场景:分析 CPU、内存、磁盘 IO 整体瓶颈
# 每2秒采样1次,共5次
vmstat 2 5
# 输出关键指标:
# procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
# r b swpd free buff cache si so bi bo in cs us sy id wa st
# 2 0 0 819248 204800 1677728 0 0 10 20 300 500 15 5 80 0 0
# 关键指标解读:
# us:用户态CPU使用率
# sy:内核态CPU使用率
# id:空闲CPU百分比
# wa:IO等待CPU百分比
# free:空闲内存(KB)
# si/so:交换空间换入/换出(频繁换入换出表示内存不足)
Java 关联:当wa持续高于 20%,可能存在磁盘 IO 瓶颈(如日志写入卡顿)。
8.dstat- 多功能系统统计
使用场景:综合监控 CPU、内存、网络、磁盘
# 显示CPU使用率、内存使用、网络IO、磁盘读写
dstat -cdngy
# 输出示例:
# ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
# us sy id wa st| read writ| recv send| in out | int csw
# 15 5 80 0 0| 128k 256k| 45k 20k| 0 0 | 300 500
优势:比vmstat更详细,适合定位混合资源瓶颈,需安装dstat包(yum install dstat)。
9.find- 文件查找与定位
使用场景:查找特定日志文件、Heap Dump、配置文件或大文件
# 按文件名精确查找(如查找所有.log文件,区分大小写)
find /var/log/ -name "*.log"
# 按文件名模糊查找(包含"error"的日志,不区分大小写)
find /app/logs/ -iname "*error*"
# 按文件大小查找(大于1GB的文件,排查异常大日志)
find /data/ -type f -size +1G
# 按修改时间查找(7天前的文件,清理过期日志)
find /tmp/ -type f -mtime +7 -exec rm -f {} \;
# 结合xargs处理查找结果(压缩所有.log文件)
find /app/logs/ -type f -name "*.log" -exec gzip {} \;
Java 场景:
- 定位未配置路径的 JVM Heap Dump:find / -name "java_pid*.hprof"
- 排查未关闭的临时文件:find /tmp/ -type f -user app -mmin +60(60 分钟未使用的文件)
四、网络排查:诊断连接与端口问题
10.netstat- 网络连接状态查看
使用场景:检查端口占用、连接数统计、TCP 状态分析
# 查看8080端口是否被占用
netstat -tlnp | grep 8080
# 输出示例:
# tcp6 0 0 :::8080 :::* LISTEN 12345/java
# 统计各TCP状态连接数(排查CLOSE_WAIT/ESTABLISHED)
netstat -ant | awk '{print $6}' | sort | uniq -c
# 输出状态:
# 10 LISTEN
# 100 ESTABLISHED
# 50 CLOSE_WAIT
注意:Linux 新工具ss比netstat更高效,推荐替代使用(如ss -tlnp | grep 8080)。
11.lsof- 查看文件描述符与端口占用
使用场景:定位端口被哪个进程占用、查看打开的文件
# 查看端口8080对应的进程
lsof -i:8080
# 输出示例:
# COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
# java 12345 appuser 42u IPv6 12345 0t0 TCP *:8080 (LISTEN)
# 查看Java进程(PID=12345)打开的所有文件
lsof -p 12345 | grep -i socket
Java 关键:排查日志文件 / 数据库连接是否未正确关闭(文件描述符泄漏)。
12.telnet/nc- 测试网络连通性
使用场景:验证端口可达性、排查防火墙问题
# 测试服务器8080端口是否开放
telnet 192.168.1.100 8080
# 输出示例:
# Trying 192.168.1.100...
# Connected to 192.168.1.100.
# Escape character is '^]'.
# 更轻量的nc命令(需安装netcat)
nc -zv 192.168.1.100 8080
# 输出示例:
# Connection to 192.168.1.100 8080 port [tcp/*] succeeded!
生产环境:替代ping测试端口级连通性(绕过 ICMP 限制)。
五、资源查看:磁盘 / 内存使用分析
13.df- 磁盘空间查看
使用场景:检查磁盘是否满(导致日志无法写入、应用崩溃)
# 查看各分区空间使用情况(带文件系统类型)
df -hT
# 输出示例:
# Filesystem Type Size Used Avail Use% Mounted on
# /dev/sda1 ext4 20G 15G 5.0G 75% /
# /dev/sdb1 xfs 100G 50G 50G 50% /data
# 关键指标:Use%(使用率),当超过90%需立即排查
Java 风险:磁盘满会导致 JVM 无法生成 Heap Dump,需配置-XX:HeapDumpPath到非根分区。
14.free- 内存使用情况
使用场景:分析物理内存 /swap 空间使用
# 以人类可读格式显示内存状态
free -h
# 输出示例:
# total used free shared buff/cache available
# Mem: 7.8G 4.0G 1.5G 256M 2.3G 3.5G
# Swap: 2.0G 0B 2.0G
# 关键指标解读:
# Mem.total:总物理内存
# Mem.free:空闲内存
# Mem.buff/cache:缓冲/缓存内存(可回收)
# Swap:交换空间使用情况(频繁使用表示内存不足)
Java 调优:当buff/cache占比高是正常现象,swap频繁使用需排查内存泄漏。
15.du- 目录空间占用分析
使用场景:定位大文件(如异常大的日志、未清理的 Heap Dump)
# 查看当前目录下各文件夹大小(按降序排列)
du -h --max-depth=1 | sort -rh
# 输出示例:
# 4.0G ./logs
# 2.0G ./data
# 100M ./tmp
# 查找大于1GB的文件
find /var/log/ -type f -size +1G -exec du -h {} \;
# 清理大文件前预览
du -h /var/log/* | sort -rh | head -n 10
Java 操作:定期清理/tmp下的临时文件(避免磁盘空间耗尽)。
总结:从命令到排查体系
掌握这 15 个命令,可覆盖 80% 以上的 Java 线上问题排查场景。实际操作中需注意:
- 权限问题:部分命令(如top/lsof)需root权限,提前申请 sudo
- 性能影响:避免在高负载服务器上执行find / -size等全路径扫描命令
- 工具组合:结合 Java 自带工具(jps/jstack/jmap)和 APM 工具(Prometheus/Grafana)形成完整排查体系
建议开发者建立个人命令手册,记录常用组合(如ps -ef | grep -v grep | awk '{print $2}'),并通过man命令深入理解每个参数的底层逻辑。线上排查的核心不是记住多少命令,而是通过系统化的思路,快速定位问题本质,最终实现从 "命令使用者" 到 "问题解决者" 的能力升级。
如果本文对您有所帮助,欢迎点赞收藏加关注!您的每一次点击都是对我最大的鼓励,更是我持续输出优质技术内容的强大动力~ 后续会分享更多 Java AI开发、线上排查和架构优化的干货,期待与您共同成长!
相关推荐
- linux服务器--PVE(一)简介及安装(pve安装ifupdown2)
-
1.PVE(ProxmoxVirtualEnvironment)简介ProxmoxVirtualEnvironment基于debian,是一个完整的、开源的企业虚拟化服务器管理平台。它在一个平...
- 手把手教你!如何在 Linux 服务器中搭建 Sentinel 环境?
-
你在Linux服务器上搭建Sentinel环境时,是不是也遇到过各种报错,要么是启动失败,要么是配置后无法正常访问控制台?看着同事顺利搭建好,自己却一头雾水,别提多着急了!其实,很多互联网大厂...
- Linux高性能服务器技术总结(linux高性能服务器编程怎么样)
-
1服务器简介服务器是提供计算服务的设备,由于服务器需要响应用户请求,因此在处理能力、稳定性、安全性、可扩展性、可管理性等方面提出了较高要求。随着虚拟化技术的进步,云服务器(ECS)已经快速的在...
- 从 0 到 1:使用 Ansible 自动化运维 Linux 服务器全流程
-
Ansible是一款强大的IT自动化工具,广泛用于服务器配置管理、软件部署和任务自动化。本文将带你从零开始,学习如何使用Ansible对Linux服务器进行自动化运维,涵盖Ansibl...
- 诡异!Win11 “此电脑” 莫名现 Linux 图标,啥情况?
-
我这电脑出了个怪事儿,“此电脑”下面莫名其妙多了个Linux的图标,可我压根儿就没装过Linux系统啊!琢磨了一下,估计是系统可选功能里那个“适用于Linux的Windows子系统”插件搞的鬼。实例系...
- Linux基础运维篇:Linux 终端与 Shell 基础(第006课)
-
一、啥是终端?先搞懂「人和电脑对话的窗口」你可以把终端(Terminal)理解成一个「文字版的电脑操作台」。在Windows里,类似「命令提示符」或PowerShell;在Linux里,...
- 2025罗技大师系列智「简」大赛-罗技大师系列-MX KEYS S键盘评测
-
在2025罗技大师系列智「简」大赛中,MXKEYSS键盘凭借其卓越的设计与智能化体验,成为众多创作者的理想之选。本篇文章将深入评测这款键盘的核心功能、使用体验及创新亮点,帮助你了解它如何提升...
- Linux编辑命令vim(linux使用vim编辑文件)
-
1、vi编辑器简介vim是一个全屏幕纯文本编辑器,是vi编辑器的增强版,我们主要讲解的是vim编辑器。可以利用别名让输入vi命令的时候,实际上执行vim编辑器,例如:#定义别名...
- 全选是ctrl加什么?全选的快捷键是什么介绍
-
如何高效使用「全选」快捷键(Ctrl+A/A)提升工作效率在日常电脑操作中,"全选"是最基础却至关重要的功能之一。无论您是文字工作者、程序员还是普通用户,掌握全选快捷键都能极大提升操作...
- Linux命令大全(linux命令大全书)
-
个人博客:https://chunyu.work/文章较长,可以收藏备用常用快捷键(1)ctrl+c:停止进程(2)ctrl+l:清屏(3)善于用tab键(4)上下键:查找执行过的命令文件目录类(...
- Xshell是做什么用的?Xshell使用教程分享
-
Xshell是一款功能强大的终端模拟器,支持SSH1,SSH2,SFTP,TELNET,RLOGIN和SERIAL。通过提供业界先进的性能,Xshell包含了其他SSH客户端无法发现的功能和优势,作为...
- Java 开发者线上问题排查常用的 15 个 Linux 命令
-
作为Java开发者,线上环境的问题排查是日常工作的重要组成部分。熟练掌握Linux命令能大幅提升排查效率,快速定位进程异常、日志错误、性能瓶颈等核心问题。本文结合Java应用特点,整理1...
- Linux的常用命令就是记不住,怎么办?
-
1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...
- 别再乱学 Linux 了!这 5 个核心技巧,让你效率飙升 10 倍!
-
在Linux学习的漫漫长路上,不少人犹如在黑暗中摸索的行者,四处碰壁,学习效果却不尽如人意。你是不是也曾在海量的Linux知识面前迷失方向,感觉自己投入了大量时间,却收效甚微?其实,掌握Li...
- Linux终端神器Terminator时隔1年回归,2.1.5新版发布
-
IT之家5月23日消息,科技媒体linuxiac今天(5月23日)发布博文,报道称Terminator在沉寂一年后,最新发布了2.1.5版本,在分割终端窗格时支持克隆SSH...
- 一周热门
- 最近发表
-
- linux服务器--PVE(一)简介及安装(pve安装ifupdown2)
- 手把手教你!如何在 Linux 服务器中搭建 Sentinel 环境?
- Linux高性能服务器技术总结(linux高性能服务器编程怎么样)
- 从 0 到 1:使用 Ansible 自动化运维 Linux 服务器全流程
- 诡异!Win11 “此电脑” 莫名现 Linux 图标,啥情况?
- Linux基础运维篇:Linux 终端与 Shell 基础(第006课)
- 2025罗技大师系列智「简」大赛-罗技大师系列-MX KEYS S键盘评测
- Linux编辑命令vim(linux使用vim编辑文件)
- 全选是ctrl加什么?全选的快捷键是什么介绍
- Linux命令大全(linux命令大全书)
- 标签列表
-
- linux 远程 (37)
- u盘 linux (32)
- linux 登录 (34)
- linux 路径 (33)
- linux 文件命令 (35)
- linux 是什么 (35)
- linux 界面 (34)
- 查看文件 linux (35)
- linux 语言 (33)
- linux代码 (32)
- linux 查看命令 (33)
- 关闭linux (34)
- root linux (33)
- 删除文件 linux (35)
- linux 主机 (34)
- linux与 (33)
- linux 函数 (35)
- linux .ssh (35)
- cpu linux (35)
- 查看linux 系统 (32)
- linux 防火墙 (33)
- linux 手机 (32)
- linux 镜像 (34)
- linux ip地址 (34)
- linux 用户查看 (33)