# 查看系统整体资源和进程top# 每 1 秒刷新一次top -d 1# 每 5 秒刷新一次top -d 5# 只刷新 5 次后退出top -n 5# 批处理模式,只执行一次top -b -n 1# 显示完整的进程启动命令top -c# 查看指定 PID 的进程top -p 12345# 每 1 秒查看指定 PIDtop -d 1 -p 12345# 批处理模式查看指定 PIDtop -b -n 1 -p 12345# 查看指定 PID 的完整启动命令top -c -p 12345# 查看 Java 进程ps -ef | grep java# 查看指定 Java 进程top -p 12345# 查看 Java 进程中的线程top -H -p 12345# 每 1 秒查看 Java 线程top -H -d 1 -p 12345
在文件系统中找文件/目录。
基本语法:find [搜索路径] [条件] [动作]
参数:
参数 | 作用 | 例子 |
-name | 文件名 | -name "*.log" |
-iname | 忽略大小写 | -iname "*.LOG" |
-type f | 普通文件 | -type f |
-type d | 目录 | - type d |
-size | 文件大小 | -size +1G |
-mtime | 修改日期 | -mtime -1 |
-mmin | 修改分钟 | -mmin -30 |
-user | 所属用户 | -user root |
-exec | 执行命令 | -exec ls {} \; |
-perm | 权限 | -perm 777 |
-delete | 删除 | -delete |
# 1. 找日志find /app -name "*.log"# 2. 找最近修改的日志find /app/logs -type f -name "*.log" -mmin -30# 3. 找大日志find /app/logs -type f -name "*.log" -size +500M# 4. 找大于 1GB 的文件find / -type f -size +1G 2>/dev/null# 5. 找最近一天修改的文件find /app -type f -mtime -1# 6. 找 Java 异常find /app/logs -type f -name "*.log" -exec grep -n "Exception" {} \;# 7. 找 ERRORfind /app/logs -type f -name "*.log" -exec grep -n "ERROR" {} \;# 8. 找指定订单号find /app/logs -type f -name "*.log" -exec grep -n "2069861630" {} \;
grep
从文本/日志中搜索关键内容。
基本语法:grep [参数] "搜索内容" [文件]
参数:
参数 | 含义 | 示例 |
-i | 忽略大小写 | grep -i eeror app.log |
-n | 显示行号 | grep -n ERROR app.log |
-v | 排除匹配内容 | grep -v INFO app.log |
-r | 递归搜索目录 | grep -r ERROR /app/logs |
-E | 扩展正则 | grep - E "ERROR|WARN" app.log |
-w | 精准匹配单词 | grep -w ERROR app.log |
-c | 统计匹配行数 | grep -c ERROR app.log |
-A | 显示后几行 | grep -A 5 ERROR app.log |
-B | 显示前几行 | grep -B 5 ERROR app.log |
-C | 前后几行 | grep -C 5 ERROR app.log |
# 基础搜索grep "ERROR" application.log# 显示行号grep -n "ERROR" application.log# 忽略大小写grep -i "error" application.log# 排除匹配内容grep -v "INFO" application.log# 递归搜索grep -rn "ERROR" /app/logs# 只显示文件名grep -rl "ERROR" /app/logs# 统计匹配行数grep -c "ERROR" application.log# 完整单词匹配grep -w "ERROR" application.log# 正则表达式grep -E "ERROR|Exception" application.log# 查看前后文grep -n -C 10 "Exception" application.log# 查看后10行grep -n -A 10 "Exception" application.log# 查看前10行grep -n -B 10 "Exception" application.log# 实时搜索tail -f application.log | grep "ERROR"# 搜索压缩日志zgrep "ERROR" application.log.gz# 分页查看搜索结果grep -n "ERROR" application.log | less
awk
从文件中提取、计算、统计、格式化信息。
基本语法:awk '条件 {动作}' 文件
参数:
参数 | 含义 | 例子 |
$0 | 整行 | awk '{print $0}' app.log |
$1 | 第一列 | awk '{print $1}' app.log |
$NF | 最后一列 | awk '{print $NF}' app.log |
NF | 字段数量(行字段数) | awk '{print NF}' user.txt |
NR | 当前行号 | awk 'NR >= 100 && NR <= 200 {print}' app.log |
FS | 输入分隔符 | |
OFS | 输出分隔符 | |
# 输出整行awk '{print $0}' file# 输出第1列awk '{print $1}' file# 输出第1、2列awk '{print $1,$2}' file# 输出最后一列awk '{print $NF}' file# 输出字段数量awk '{print NF}' file# 输出行号awk '{print NR,$0}' file# 指定分隔符awk -F'|' '{print $1,$3}' file# 条件过滤awk '$3 == "ERROR" {print $0}' file# 数值过滤awk '$5 > 1000 {print $0}' file# 统计数量awk '{count[$1]++} END {for(i in count) print i,count[i]}' file# 求和awk '{sum += $2} END {print sum}' file# 平均值awk '{sum += $2} END {print sum/NR}' file# 最大值awk 'BEGIN{max=0} {if($2>max) max=$2} END{print max}' file# 日志统计grep "ERROR" file \| awk '{print $3}' \| sort \| uniq -c \| sort -nr
sed
对文本进行查找、替换、删除、修改、打印
基本语法:sed [选项] '操作' 文件
参数:
参数 | 含义 | 示例 |
-n
| 静默输出,只输出明确指定内容 | sed -n '10,20p' file
|
-i
| 直接修改原文件 | sed -i 's/8080/8081/g' file
|
-e
| 指定多个编辑操作 | sed -e 's/a/b/g' -e '/ERROR/d' file
|
-E
| 使用扩展正则表达式 | sed -E 's/[0-9]+/NUM/g' file
|
-r
| 使用扩展正则表达式 | sed -r 's/[0-9]+/NUM/g' file
|
-f
| 从脚本文件读取 sed 命令 | sed -f script.sed file
|
# 查看第10行sed -n '10p' file# 查看10~20行sed -n '10,20p' file# 查看第10行到最后sed -n '10,$p' file# 删除第10行sed '10d' file# 删除10~20行sed '10,20d' file# 删除包含ERROR的行sed '/ERROR/d' file# 删除空行sed '/^$/d' file# 替换第一次出现sed 's/old/new/' file# 全部替换sed 's/old/new/g' file# 直接修改文件sed -i 's/old/new/g' file# 修改配置sed -i 's/^server.port=.*/server.port=8081/' application.properties# 在第10行后增加sed '10a\new line' file# 在第10行前增加sed '10i\new line' file# 修改第10行sed '10c\new line' file# 正则替换sed -E 's/[0-9]+/NUMBER/g' file# 多个操作sed -e 's/foo/bar/g' -e '/ERROR/d' file
Arthas
阿里线上排查工具,定位Java为什么异常。
命令 | 核心作用 | 主要排查问题 |
dashboard
| 查看 JVM 实时概况 | CPU、内存、线程 |
thread
| 查看线程 | CPU 高、线程阻塞、死锁 |
jvm
| 查看 JVM 信息 | 堆、GC、JVM 参数 |
memory
| 查看 JVM 内存 | 堆、非堆、Direct Memory |
gc
| 查看 GC 情况 | Young/Old GC、Full GC |
heapdump
| 导出堆转储 | OOM、内存泄漏 |
stack
| 查看调用栈 | 谁调用了某个方法 |
trace
| 方法耗时链路 | 慢方法、慢调用 |
watch
| 查看方法参数/返回值 | 参数异常、返回异常 |
monitor
| 统计方法调用 | 调用次数、成功率、耗时 |
tt
| 记录方法调用 | 复现/重放方法调用 |
jad
| 反编译 Java 类 | 查看线上实际代码 |
sc
| 查找类 | 类是否加载 |
sm
| 查找方法 | 类中有哪些方法 |
ognl
| 执行表达式 | 动态查询/调用 |
vmtool
| JVM Tool API | 获取对象等 |
logger
| 查看/修改日志级别 | 日志问题 |
sysprop
| 查看系统属性 | 环境配置 |
sysenv
| 查看环境变量 | 环境配置 |
classloader
| 查看类加载器 | 类加载冲突 |
profiler
| 性能分析 | CPU/方法性能 |
stop
| 停止 Arthas | 退出诊断 |
# 1. JVM整体情况dashboard# 2. CPU最高线程thread -n 10# 3. 查看线程thread <thread-id># 4. JVM信息jvm# 5. 内存memory# 6. GCgc# 7. 调用链stack com.example.OrderService queryOrder# 8. 方法耗时trace com.example.OrderService queryOrder# 9. 参数/返回值/异常watch com.example.OrderService queryOrder '{params,returnObj,throwExp}' -x 3# 10. 方法调用统计monitor -c 10 com.example.OrderService queryOrder