百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Java 开发者线上问题排查常用的 15 个 Linux 命令

gudong366 2025-06-23 18:02 11 浏览

作为 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 线上问题排查场景。实际操作中需注意:

  1. 权限问题:部分命令(如top/lsof)需root权限,提前申请 sudo
  2. 性能影响:避免在高负载服务器上执行find / -size等全路径扫描命令
  3. 工具组合:结合 Java 自带工具(jps/jstack/jmap)和 APM 工具(Prometheus/Grafana)形成完整排查体系

建议开发者建立个人命令手册,记录常用组合(如ps -ef | grep -v grep | awk '{print $2}'),并通过man命令深入理解每个参数的底层逻辑。线上排查的核心不是记住多少命令,而是通过系统化的思路,快速定位问题本质,最终实现从 "命令使用者" 到 "问题解决者" 的能力升级。

如果本文对您有所帮助,欢迎点赞收藏加关注!您的每一次点击都是对我最大的鼓励,更是我持续输出优质技术内容的强大动力~ 后续会分享更多 Java AI开发、线上排查和架构优化的干货,期待与您共同成长!

相关推荐

U盘文件被删怎么简单恢复(u盘里的文件被误删了怎么找回)

现在这个社会不是靠关系靠路子,主要还是靠实力。刘强在机关工作,人长得帅气,工作能力又强。唯独一样不好,脾气太大,动不动就发火,因为小事常和同事发生口角。一次他火大的差点把办公桌给掀翻了,领导见他野蛮的...

不小心删除了一些文件?9 个最佳免费硬盘恢复软件

恢复您曾经无意或意外删除的所有文件和数据。您是否曾经错误地删除了一个对您的工作至关重要并导致您丢失所有进度的文件?我们为您提供了一些最好的免费硬盘恢复软件,以帮助您恢复意外删除的文件,以解决您的文件删...

Studio 中文版:数据救援神器,误删 / 分区损坏 / RAID 恢复一键找回

Studio中文版:数据救援神器,误删/分区损坏/RAID恢复一键找回当文件意外删除、分区损坏,或RAID阵列崩溃时,一款可靠的数据恢复工具往往能挽回关键损失。R-Studio中文版...

你值得拥有的11款Linux数据恢复工具

如果你使用的是Linux操作系统,那么你一定想知道一旦硬盘崩溃的话又该如何保存和恢复数据。其实,现在有很多Linux数据恢复工具可以让我们摆脱数据安全的困扰。小编已经为各位准备好了一些最好的Linux...

误删文件内容怎么恢复(误删文件内容怎么恢复回来)

  在日常使用电脑的过程中,误删文件的情况时有发生。无论是由于操作失误还是病毒攻击,误删文件都会给我们带来不小的困扰。幸运的是,随着技术的发展,误删文件恢复已不再是难题。本文将介绍几款国内外知名的误删...

u盘如何恢复删除的文件?推荐5款u盘数据恢复软件!

在日常生活与工作中,U盘作为便捷的数据存储载体,频繁用于传输和保存各类重要文件。然而,误删文件的情况却时有发生,无论是珍贵的照片、重要的工作文档,还是精心制作的视频,一旦删除,都可能带来不小的麻烦。...

怎么恢复删除的数据?5种有效的数据恢复方法汇总!

在数字化办公与生活的时代,电脑里的每一份数据都承载着重要信息。然而,一个误操作就可能导致数据被删除,无论是尚未保存的重要文档,还是珍藏多年的照片,都可能瞬间“消失”。但其实,数据删除并不意味着永久丢...

u盘删除文件怎么找回?5个数据恢复工具汇总,助你巧妙恢复数据!

在日常使用U盘的过程中,误删文件的情况时有发生,重要的工作文档、珍贵的照片视频一旦消失,难免让人焦急万分。别担心,只要选对数据恢复工具,被删除的数据仍有找回的可能。下面就为你汇总5款实用的数据...

Linux下恢复误删文件:思路+实践(linux删除如何恢复)

周五篮球群里有人问误删文件了怎么恢复,得知是ext4文件系统之后我推荐了ext4magic这个工具,然后又有人提到了xfs的话怎么办,正好前几天看到DaveChinner在邮件列表里提到了这个问题,...

苹果放大招!不用虚拟机了,Mac直接跑Linux容器,开发者效率翻倍

苹果这次真给开发者送福利了!今天凌晨(6月10日),苹果在官宣的Containerization框架直接炸了技术圈——Mac现在能原生运行Linux容器镜像了!这可不是虚拟机那种“套娃”方案,而是基...

7 款老牌经典软件,值得收藏(经典老歌软件)

Calibrehttps://calibre-ebook.com/Calibre是一个电脑电子书管理软件。肯定有人说了,电子书还要管理?那当然了。它的功能更强大的让你想象不到,首先它可以导入PDF,...

神仙级的免费开源电子书阅读器,还支持听书功能

神仙级的免费开源电子书阅读器,还支持听书功能,极空间部署『KoodoReader』哈喽小伙伴们好,我是Stark-C~前段时间不是给大家分享的电子书管理工具『TaleBook』嘛~,然后就有粉丝私信...

如何在Ubuntu系统中重置root密码(ubuntu忘记密码重置root密码命令)

很多人有个问题,就是喜欢把密码设置得很长很复杂,结果谁也没防住,却成功防住了自己ヽ(.ˇдˇ;)ノ对于现代人,特别是年轻人,都有过忘记密码的经历吧。在这篇文章中,我们来了解如何在Ubuntu1...

5款功能强大的PDF阅读器,让PDF阅读更轻松

分享5款功能强大的PDF阅读器,拥有丰富的PDF阅读工具,支持PDF文档划线、笔记、标记等操作,让PDF阅读更轻松!1.嗨动PDF编辑器一款实用的PDF处理软件,不仅可以阅读PDF文档,还能直接编辑、...

上班摸鱼利器! 免费好用的电子书阅读器,NAS轻松部署Koodo Reader

哈喽,大家好我是生活爱好者。笔者也是一名小说爱好者,平时用手机用某信读书,会员也开了,在家看体验也不错,但是上班的时候,在工作快速完成之后,想摸个鱼用手机就不太方便啦,作为爱折腾的人,必须要工作认真,...