说下你常用的 Linux 命令?

对Java程序员来说,Linux命令是日常开发、部署和排查问题的必备工具。以下是高频使用的核心命令,结合场景类场景说明其在Java开发中的具体用途:

一、进程管理:定位和操作Java进程

Java程序通常以进程形式运行(如JVM进程),这些命令用于监控和管理进程:

  1. ps:查看进程信息

    • 最常用:ps -ef | grep java
      作用:列出所有Java进程(含进程ID、启动参数等),快速定位目标应用(如区分多个Tomcat实例)。
      示例:ps -ef | grep java 可找到java -jar app.jar对应的进程ID(PID)。
    • 进阶:ps -aux | grep java
      显示进程的CPU/内存占用率,初步判断Java程序是否资源消耗过高。
  2. jps:JVM进程专属命令

    • 作用:JDK自带工具,快速列出所有JVM进程的PID和主类名(比ps更简洁)。
    • 示例:jps -l 显示完整类名或JAR路径(如12345 com.example.Application)。
  3. kill:终止进程

    • 常用:kill -9 <PID>
      强制终止Java进程(如应用卡死时),-9表示无条件终止(慎用,可能导致数据未刷盘)。
    • 温和终止:kill <PID>(默认发送SIGTERM信号,JVM会执行shutdownHook优雅退出)。
  4. top/htop:实时监控进程资源

    • 作用:动态查看CPU、内存占用排名,快速定位“吃资源”的Java进程。
    • 技巧:进入top后按P按CPU排序,按M按内存排序,找到Java进程的PID后分析原因(如是否发生内存泄漏)。

二、日志查看:分析Java程序输出

Java程序的日志(如业务日志、异常堆栈)是排查问题的关键,这些命令用于高效检索日志:

  1. tail:实时跟踪日志

    • 最常用:tail -f app.log
      实时输出日志新增内容(如监控程序运行状态、调试实时请求)。
    • 进阶:tail -n 100 app.log 查看最后100行日志(快速定位最近的异常)。
  2. grep:检索日志内容

    • 常用:grep "ERROR" app.log
      查找包含“ERROR”的日志行(定位异常)。
    • 进阶:
      • grep -C 5 "NullPointerException" app.log:显示异常前后5行上下文(便于分析调用链)。
      • grep -r "UserService" /var/log/app/:递归搜索目录下所有文件中含“UserService”的内容(跨日志文件查找)。
  3. cat/more/less:查看大日志文件

    • cat app.log | grep "INFO":一次性读取文件并过滤(适合小文件)。
    • less app.log:分页查看大文件(支持上下滚动、搜索,按q退出),避免一次性加载占用内存。
  4. 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包、脚本等需要频繁操作:

  1. ls:列出文件/目录

    • 常用:ls -l 显示文件详细信息(权限、大小、修改时间),ls -a 显示隐藏文件(如.bash_profile)。
    • 场景:检查JAR包是否存在、配置文件权限是否正确(如是否可读)。
  2. cd/pwd:切换目录与显示当前路径

    • 快速导航到应用部署目录:cd /opt/app/,确认当前位置:pwd
  3. cp/mv:复制与移动文件

    • 备份配置文件:cp application.properties application.properties.bak
    • 部署新版本JAR包:mv app-new.jar app.jar(替换旧包)。
  4. rm:删除文件

    • 谨慎使用:rm -f app.log 删除日志文件(-f强制删除),rm -rf old/ 删除目录(-r递归删除,危险操作!)。
  5. vi/vim:编辑文件

    • 修改配置文件:vim application.properties(按i进入编辑模式,ESC+:wq保存退出)。
    • 技巧:vim中按/搜索关键词(如查找server.port配置)。

四、系统资源监控:排查Java程序的性能瓶颈

Java程序的卡顿、OOM等问题常与系统资源相关,这些命令用于诊断:

  1. free:查看内存使用

    • 命令:free -h-h人性化显示单位)。
    • 作用:检查物理内存和swap使用情况,判断Java程序是否因内存不足导致OOM(如swap使用率过高可能是堆内存设置过大)。
  2. df/du:磁盘空间监控

    • df -h:查看磁盘分区使用率(避免因磁盘满导致日志写入失败、JVM崩溃)。
    • du -sh /var/log/app/*:查看日志文件大小(定位是否有日志文件过大占用磁盘)。
  3. netstat/ss:网络连接监控

    • 查看Java程序监听的端口:netstat -tlnp | grep java(确认server.port是否正确监听)。
    • 查看连接数:ss -an | grep ESTAB | grep :8080 | wc -l(统计应用的活跃连接,判断是否因连接数过多导致阻塞)。
  4. vmstat:系统整体性能指标

    • 命令:vmstat 5(每5秒输出一次系统状态)。
    • 关注指标:
      • r(运行队列长度):若持续大于CPU核心数,说明Java线程竞争CPU激烈。
      • si/so(swap交换):非零值表示内存不足,可能导致JVM频繁GC。

五、JDK自带命令:Java程序专属诊断工具

这些命令需JDK环境,是Java开发者排查问题的“利器”:

  1. jstack:打印线程栈

    • 命令:jstack <PID>
    • 作用:查看Java线程的状态(RUNNABLE/BLOCKED/WAITING),定位死锁、锁竞争、线程阻塞等问题。
    • 示例:jstack 12345 | grep BLOCKED 快速找到阻塞的线程。
  2. jmap:查看内存映射

    • 命令:jmap -heap <PID>
    • 作用:查看JVM堆内存配置(如新生代、老年代大小)和使用情况,判断堆参数是否合理。
    • 进阶:jmap -dump:format=b,file=heap.bin <PID> 导出堆快照(用于分析内存泄漏,需结合jhat或MAT工具)。
  3. jstat:JVM统计信息

    • 命令:jstat -gc <PID> 1000(每1秒输出一次GC统计)。
    • 关注指标:S0C/S1C( survivor区大小)、E(Eden区使用率)、O(老年代使用率)、YGC/YGCT(年轻代GC次数/时间),判断GC是否频繁。
  4. 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.loggrep "ERROR" app.log
配置文件操作vim application.propertiescp *.bak
性能排查topjstack <PID>jstat -gc <PID>
系统资源监控free -hdf -hnetstat -tlnp

这些命令是Java开发的“基本功”,熟练掌握能大幅提升问题排查效率(如通过jstack5分钟定位死锁,比盲目调试快10倍)。日常开发中,建议结合实际场景多练习(如部署时用ps确认进程启动,报错时用grep检索异常日志)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值