后端开发常用Linux命令

一、系统状态与资源监控

  1. top / htop
    • 实时查看系统 CPU、内存、进程占用情况(htop是增强版,支持鼠标操作和更直观的界面)。
    • 常用操作:按P按 CPU 排序,按M按内存排序,快速定位 Java 进程(java关键词)的资源消耗。
  2. free -h
    • 查看内存使用情况(总内存、已用、空闲、缓存等),-h以人类可读单位(GB/MB)显示。
    • 排查 Java 进程 OOM(内存溢出)时,先确认系统是否真的内存不足。
  3. df -h / du -sh *
    • df -h:查看磁盘分区使用率,排查日志或文件占满磁盘的问题(例如/分区满导致服务异常)。
    • du -sh *:查看当前目录下各文件 / 文件夹的大小,定位大文件(如异常增长的日志)。
  4. vmstat 1
    • 实时输出系统 CPU、内存、IO、进程切换等统计信息,间隔 1 秒刷新,用于分析系统瓶颈(如 IO 等待过高)。
  5. iostat
    • 查看磁盘 IO 性能(读写速度、IOPS、等待时间),需安装sysstat包,排查 Java 程序读写磁盘慢的问题。

二、进程与 Java 进程排查

  1. ps -ef | grep java
    • 查看所有 Java 进程的详细信息(进程 ID、启动用户、启动命令等),核心是获取PID(进程 ID)。
    • 示例:ps -ef | grep java 或更简洁的 pgrep -f java(直接输出 Java 进程 PID)。
  2. jps
    • JDK 自带命令,查看当前机器上所有 Java 进程的 PID 和主类名(如Main、JarLauncher),快速定位应用进程。
  3. kill / kill -9
    • 终止进程:kill PID 发送正常终止信号(允许进程释放资源),kill -9 PID 强制杀死进程(紧急情况使用)。
  4. top -p PID
    • 聚焦查看某个 Java 进程(通过 PID)的实时资源占用(CPU、内存百分比),判断是否存在资源泄漏。
  5. jstack PID
    • 打印 Java 进程的线程栈信息,用于排查死锁、线程阻塞、CPU 飙高等问题。
    • 示例:jstack 12345 > stack.log 输出到文件,分析BLOCKED状态的线程及锁信息。
  6. jmap -heap PID
    • 查看 Java 堆内存配置(初始 / 最大堆、新生代 / 老年代大小)和使用情况,排查堆内存配置是否合理。
  7. jmap -dump:format=b,file=heap.bin PID
    • 导出 Java 堆快照(heap dump),用于分析内存泄漏(结合 MAT 等工具),注意:大堆导出可能影响服务性能。
  8. jstat -gc PID 1000
    • 实时监控 Java 垃圾回收情况(间隔 1000ms),输出新生代 / 老年代 GC 次数、耗时、内存使用等,判断 GC 是否频繁或耗时过长。

三、日志分析

  1. tail -f 日志文件
    • 实时跟踪日志文件新增内容,常用于观察服务启动过程或实时报错(如tail -f app.log)。
  2. cat 日志文件 | grep "关键词"
    • 搜索日志中包含指定关键词的行(如grep "ERROR"找错误,grep "userId=123"定位用户相关日志)。
    • 扩展:grep -C 5 "ERROR" 显示错误行前后 5 行,grep -i "error" 忽略大小写。
  3. less 日志文件
    • 分页查看大日志文件,支持搜索(按/输入关键词,n下一个匹配)、翻页(空格/b),适合逐行分析。
  4. head -n 100 日志文件 / tail -n 100 日志文件
    • 查看日志前 100 行(启动信息)或后 100 行(最新日志),快速定位起止位置。
  5. sed / awk
    • 复杂日志分析:如sed -n '/2023-10-23 10:00:00/,/2023-10-23 10:05:00/p' app.log 提取某个时间段的日志;awk '{print $5}' app.log 提取日志中第 5 列内容(常用于统计)。

四、网络排查

  1. netstat -tuln / ss -tuln
    • 查看系统监听的端口及对应的进程(ss是netstat的替代工具,性能更好)。
    • 示例:netstat -tuln | grep 8080 检查 Java 服务的 8080 端口是否正常监听。
  2. netstat -anp | grep PID
    • 查看指定 Java 进程(PID)的网络连接情况(ESTABLISHED/ TIME_WAIT 等状态),排查连接泄露。
  3. telnet 目标IP 端口 / nc -zv 目标IP 端口
    • 测试网络连通性:检查 Java 服务是否能连接数据库(如telnet mysql-host 3306)或外部接口。
  4. ping 目标IP
    • 测试与目标服务器的网络延迟和丢包率,初步判断网络是否通畅。
  5. tcpdump -i any port 8080 -w traffic.cap
    • 抓包工具:捕获 8080 端口的网络流量,用于分析请求是否到达服务、数据包是否异常(需结合 Wireshark 分析)。

五、文件与权限操作

  1. ls -l / ll
    • 查看文件 / 目录的权限、所有者、大小等信息,排查 Java 服务因权限不足导致的文件读写失败(如日志文件无写入权限)。
  2. chmod / chown
    • chmod 755 app.jar:修改文件权限(确保 Java 进程可执行);chown appuser:appgroup app.log:修改文件所有者(避免权限拒绝)。
  3. find / -name "文件名"
    • 全局搜索文件,例如find /var/log -name "app.log" 查找日志文件位置。
  4. tar -zcvf 压缩包.tar.gz 目录 / tar -zxvf 压缩包.tar.gz
    • 压缩 / 解压文件,用于备份日志或传输 Java 应用包。

六、其他实用命令

  • date:查看系统时间(排查 Java 程序时间相关问题,如定时任务执行偏差)。
  • history:查看历史命令(快速复用之前执行过的排查命令)。
  • dmesg | grep -i outOfMemory:查看系统日志中的 OOM 记录(Java 进程被内核杀死时会记录)。
相关推荐
聆风吟º15 小时前
CANN开源项目深度实践:基于amct-toolkit实现自动化模型量化与精度保障策略
运维·开源·自动化·cann
Java后端的Ai之路15 小时前
【Python 教程15】-Python和Web
python
Coder个人博客16 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
冬奇Lab17 小时前
一天一个开源项目(第15篇):MapToPoster - 用代码将城市地图转换为精美的海报设计
python·开源
较劲男子汉18 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
Doro再努力18 小时前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim
wypywyp18 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
风流倜傥唐伯虎19 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
二十雨辰19 小时前
[python]-AI大模型
开发语言·人工智能·python
Doro再努力19 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim