一、系统状态与资源监控
- top / htop
- 实时查看系统 CPU、内存、进程占用情况(htop是增强版,支持鼠标操作和更直观的界面)。
- 常用操作:按P按 CPU 排序,按M按内存排序,快速定位 Java 进程(java关键词)的资源消耗。
- free -h
- 查看内存使用情况(总内存、已用、空闲、缓存等),-h以人类可读单位(GB/MB)显示。
- 排查 Java 进程 OOM(内存溢出)时,先确认系统是否真的内存不足。
- df -h / du -sh *
- df -h:查看磁盘分区使用率,排查日志或文件占满磁盘的问题(例如/分区满导致服务异常)。
- du -sh *:查看当前目录下各文件 / 文件夹的大小,定位大文件(如异常增长的日志)。
- vmstat 1
- 实时输出系统 CPU、内存、IO、进程切换等统计信息,间隔 1 秒刷新,用于分析系统瓶颈(如 IO 等待过高)。
- iostat
- 查看磁盘 IO 性能(读写速度、IOPS、等待时间),需安装sysstat包,排查 Java 程序读写磁盘慢的问题。
二、进程与 Java 进程排查
- ps -ef | grep java
- 查看所有 Java 进程的详细信息(进程 ID、启动用户、启动命令等),核心是获取PID(进程 ID)。
- 示例:ps -ef | grep java 或更简洁的 pgrep -f java(直接输出 Java 进程 PID)。
- jps
- JDK 自带命令,查看当前机器上所有 Java 进程的 PID 和主类名(如Main、JarLauncher),快速定位应用进程。
- kill / kill -9
- 终止进程:kill PID 发送正常终止信号(允许进程释放资源),kill -9 PID 强制杀死进程(紧急情况使用)。
- top -p PID
- 聚焦查看某个 Java 进程(通过 PID)的实时资源占用(CPU、内存百分比),判断是否存在资源泄漏。
- jstack PID
- 打印 Java 进程的线程栈信息,用于排查死锁、线程阻塞、CPU 飙高等问题。
- 示例:jstack 12345 > stack.log 输出到文件,分析BLOCKED状态的线程及锁信息。
- jmap -heap PID
- 查看 Java 堆内存配置(初始 / 最大堆、新生代 / 老年代大小)和使用情况,排查堆内存配置是否合理。
- jmap -dump:format=b,file=heap.bin PID
- 导出 Java 堆快照(heap dump),用于分析内存泄漏(结合 MAT 等工具),注意:大堆导出可能影响服务性能。
- jstat -gc PID 1000
- 实时监控 Java 垃圾回收情况(间隔 1000ms),输出新生代 / 老年代 GC 次数、耗时、内存使用等,判断 GC 是否频繁或耗时过长。
三、日志分析
- tail -f 日志文件
- 实时跟踪日志文件新增内容,常用于观察服务启动过程或实时报错(如tail -f app.log)。
- cat 日志文件 | grep "关键词"
- 搜索日志中包含指定关键词的行(如grep "ERROR"找错误,grep "userId=123"定位用户相关日志)。
- 扩展:grep -C 5 "ERROR" 显示错误行前后 5 行,grep -i "error" 忽略大小写。
- less 日志文件
- 分页查看大日志文件,支持搜索(按/输入关键词,n下一个匹配)、翻页(空格/b),适合逐行分析。
- head -n 100 日志文件 / tail -n 100 日志文件
- 查看日志前 100 行(启动信息)或后 100 行(最新日志),快速定位起止位置。
- 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 列内容(常用于统计)。
四、网络排查
- netstat -tuln / ss -tuln
- 查看系统监听的端口及对应的进程(ss是netstat的替代工具,性能更好)。
- 示例:netstat -tuln | grep 8080 检查 Java 服务的 8080 端口是否正常监听。
- netstat -anp | grep PID
- 查看指定 Java 进程(PID)的网络连接情况(ESTABLISHED/ TIME_WAIT 等状态),排查连接泄露。
- telnet 目标IP 端口 / nc -zv 目标IP 端口
- 测试网络连通性:检查 Java 服务是否能连接数据库(如telnet mysql-host 3306)或外部接口。
- ping 目标IP
- 测试与目标服务器的网络延迟和丢包率,初步判断网络是否通畅。
- tcpdump -i any port 8080 -w traffic.cap
- 抓包工具:捕获 8080 端口的网络流量,用于分析请求是否到达服务、数据包是否异常(需结合 Wireshark 分析)。
五、文件与权限操作
- ls -l / ll
- 查看文件 / 目录的权限、所有者、大小等信息,排查 Java 服务因权限不足导致的文件读写失败(如日志文件无写入权限)。
- chmod / chown
- chmod 755 app.jar:修改文件权限(确保 Java 进程可执行);chown appuser:appgroup app.log:修改文件所有者(避免权限拒绝)。
- find / -name "文件名"
- 全局搜索文件,例如find /var/log -name "app.log" 查找日志文件位置。
- tar -zcvf 压缩包.tar.gz 目录 / tar -zxvf 压缩包.tar.gz
- 压缩 / 解压文件,用于备份日志或传输 Java 应用包。
六、其他实用命令
- date:查看系统时间(排查 Java 程序时间相关问题,如定时任务执行偏差)。
- history:查看历史命令(快速复用之前执行过的排查命令)。
- dmesg | grep -i outOfMemory:查看系统日志中的 OOM 记录(Java 进程被内核杀死时会记录)。