对Java程序员来说,Linux命令是日常开发、部署和排查问题的必备工具。以下是高频使用的核心命令,结合场景类场景说明其在Java开发中的具体用途:
一、进程管理:定位和操作Java进程
Java程序通常以进程形式运行(如JVM进程),这些命令用于监控和管理进程:
-
ps
:查看进程信息- 最常用:
ps -ef | grep java
作用:列出所有Java进程(含进程ID、启动参数等),快速定位目标应用(如区分多个Tomcat实例)。
示例:ps -ef | grep java
可找到java -jar app.jar
对应的进程ID(PID)。 - 进阶:
ps -aux | grep java
显示进程的CPU/内存占用率,初步判断Java程序是否资源消耗过高。
- 最常用:
-
jps
:JVM进程专属命令- 作用:JDK自带工具,快速列出所有JVM进程的PID和主类名(比
ps
更简洁)。 - 示例:
jps -l
显示完整类名或JAR路径(如12345 com.example.Application
)。
- 作用:JDK自带工具,快速列出所有JVM进程的PID和主类名(比
-
kill
:终止进程- 常用:
kill -9 <PID>
强制终止Java进程(如应用卡死时),-9
表示无条件终止(慎用,可能导致数据未刷盘)。 - 温和终止:
kill <PID>
(默认发送SIGTERM
信号,JVM会执行shutdownHook
优雅退出)。
- 常用:
-
top
/htop
:实时监控进程资源- 作用:动态查看CPU、内存占用排名,快速定位“吃资源”的Java进程。
- 技巧:进入
top
后按P
按CPU排序,按M
按内存排序,找到Java进程的PID后分析原因(如是否发生内存泄漏)。
二、日志查看:分析Java程序输出
Java程序的日志(如业务日志、异常堆栈)是排查问题的关键,这些命令用于高效检索日志:
-
tail
:实时跟踪日志- 最常用:
tail -f app.log
实时输出日志新增内容(如监控程序运行状态、调试实时请求)。 - 进阶:
tail -n 100 app.log
查看最后100行日志(快速定位最近的异常)。
- 最常用:
-
grep
:检索日志内容- 常用:
grep "ERROR" app.log
查找包含“ERROR”的日志行(定位异常)。 - 进阶:
grep -C 5 "NullPointerException" app.log
:显示异常前后5行上下文(便于分析调用链)。grep -r "UserService" /var/log/app/
:递归搜索目录下所有文件中含“UserService”的内容(跨日志文件查找)。
- 常用:
-
cat
/more
/less
:查看大日志文件cat app.log | grep "INFO"
:一次性读取文件并过滤(适合小文件)。less app.log
:分页查看大文件(支持上下滚动、搜索,按q
退出),避免一次性加载占用内存。
-
sed
/awk
:日志格式化与分析sed -n '/2023-10-01 12:00:00/,/2023-10-01 12:30:00/p' app.log
:提取某时间段内的日志(定位特定时间的问题)。awk '{if($9 > 500) print $0}' access.log
:筛选出响应时间(第9列)超过500ms的请求日志(分析接口性能)。
三、文件操作:管理Java程序的配置和部署文件
Java应用的配置文件(如application.properties
)、JAR包、脚本等需要频繁操作:
-
ls
:列出文件/目录- 常用:
ls -l
显示文件详细信息(权限、大小、修改时间),ls -a
显示隐藏文件(如.bash_profile
)。 - 场景:检查JAR包是否存在、配置文件权限是否正确(如是否可读)。
- 常用:
-
cd
/pwd
:切换目录与显示当前路径- 快速导航到应用部署目录:
cd /opt/app/
,确认当前位置:pwd
。
- 快速导航到应用部署目录:
-
cp
/mv
:复制与移动文件- 备份配置文件:
cp application.properties application.properties.bak
。 - 部署新版本JAR包:
mv app-new.jar app.jar
(替换旧包)。
- 备份配置文件:
-
rm
:删除文件- 谨慎使用:
rm -f app.log
删除日志文件(-f
强制删除),rm -rf old/
删除目录(-r
递归删除,危险操作!)。
- 谨慎使用:
-
vi
/vim
:编辑文件- 修改配置文件:
vim application.properties
(按i
进入编辑模式,ESC
+:wq
保存退出)。 - 技巧:
vim
中按/
搜索关键词(如查找server.port
配置)。
- 修改配置文件:
四、系统资源监控:排查Java程序的性能瓶颈
Java程序的卡顿、OOM等问题常与系统资源相关,这些命令用于诊断:
-
free
:查看内存使用- 命令:
free -h
(-h
人性化显示单位)。 - 作用:检查物理内存和swap使用情况,判断Java程序是否因内存不足导致OOM(如swap使用率过高可能是堆内存设置过大)。
- 命令:
-
df
/du
:磁盘空间监控df -h
:查看磁盘分区使用率(避免因磁盘满导致日志写入失败、JVM崩溃)。du -sh /var/log/app/*
:查看日志文件大小(定位是否有日志文件过大占用磁盘)。
-
netstat
/ss
:网络连接监控- 查看Java程序监听的端口:
netstat -tlnp | grep java
(确认server.port
是否正确监听)。 - 查看连接数:
ss -an | grep ESTAB | grep :8080 | wc -l
(统计应用的活跃连接,判断是否因连接数过多导致阻塞)。
- 查看Java程序监听的端口:
-
vmstat
:系统整体性能指标- 命令:
vmstat 5
(每5秒输出一次系统状态)。 - 关注指标:
r
(运行队列长度):若持续大于CPU核心数,说明Java线程竞争CPU激烈。si/so
(swap交换):非零值表示内存不足,可能导致JVM频繁GC。
- 命令:
五、JDK自带命令:Java程序专属诊断工具
这些命令需JDK环境,是Java开发者排查问题的“利器”:
-
jstack
:打印线程栈- 命令:
jstack <PID>
- 作用:查看Java线程的状态(
RUNNABLE
/BLOCKED
/WAITING
),定位死锁、锁竞争、线程阻塞等问题。 - 示例:
jstack 12345 | grep BLOCKED
快速找到阻塞的线程。
- 命令:
-
jmap
:查看内存映射- 命令:
jmap -heap <PID>
- 作用:查看JVM堆内存配置(如新生代、老年代大小)和使用情况,判断堆参数是否合理。
- 进阶:
jmap -dump:format=b,file=heap.bin <PID>
导出堆快照(用于分析内存泄漏,需结合jhat
或MAT工具)。
- 命令:
-
jstat
:JVM统计信息- 命令:
jstat -gc <PID> 1000
(每1秒输出一次GC统计)。 - 关注指标:
S0C/S1C
( survivor区大小)、E
(Eden区使用率)、O
(老年代使用率)、YGC/YGCT
(年轻代GC次数/时间),判断GC是否频繁。
- 命令:
-
jconsole
/jvisualvm
:图形化监控工具- 远程连接:
jconsole <IP>:<端口>
(需在Java启动参数中配置-Dcom.sun.management.jmxremote
),可视化监控堆内存、线程、GC等指标(适合开发环境)。
- 远程连接:
六、压缩与解压:处理Java部署包
Java应用常以ZIP/JAR包部署,这些命令用于打包和解包:
tar -zxvf app.tar.gz
:解压tar.gz
格式的部署包。zip -r app.zip /opt/app/
:将应用目录压缩为ZIP包(便于传输)。jar -xvf app.jar
:解压JAR包(查看内部配置文件或类文件)。
总结:Java程序员的高频命令清单
场景 | 核心命令示例 |
---|---|
进程管理 | `ps -ef |
日志分析 | tail -f app.log 、grep "ERROR" app.log |
配置文件操作 | vim application.properties 、cp *.bak |
性能排查 | top 、jstack <PID> 、jstat -gc <PID> |
系统资源监控 | free -h 、df -h 、netstat -tlnp |
这些命令是Java开发的“基本功”,熟练掌握能大幅提升问题排查效率(如通过jstack
5分钟定位死锁,比盲目调试快10倍)。日常开发中,建议结合实际场景多练习(如部署时用ps
确认进程启动,报错时用grep
检索异常日志)。