后端开发常用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 进程被内核杀死时会记录)。
相关推荐
serve the people6 分钟前
Prompts for Chat Models in LangChain
java·linux·langchain
李昊哲小课33 分钟前
Ubuntu 24.04 MariaDB 完整安装与配置文档
linux·ubuntu·mariadb
惊讶的猫1 小时前
LSTM论文解读
开发语言·python
测试老哥2 小时前
软件测试之单元测试知识总结
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
buvsvdp50059ac2 小时前
如何在VSCode中设置Python解释器?
ide·vscode·python
AI智域边界 - Alvin Cho2 小时前
Bloomberg、LSEG 与 MCP 缺口:为什么尚未发布完整的 MCP 服务器,以及多智能体系统如何解決这问题
运维·服务器
人间打气筒(Ada)2 小时前
zerotier内网穿透部署(rockylinux部署本地服务器)超详细~~~
linux·内网穿透·内网·公网·zerotier·穿透
njxiejing2 小时前
Python进度条工具tqdm的安装与使用
开发语言·python
Elias不吃糖3 小时前
Git常用指令合集
linux·git