排障命令-汇总

日志查询

1. grep

定义:(global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式

grep常用命令:

grep '查询条件' xxx.log
grep -r update /etc/acpi  : 以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为
grep –e "正则表达式" 文件名 : 从文件内容查找与正则表达式匹配的行

grep ‘condition’ -A 20 xxx.log

常见选项

  • -i:忽略大小写
  • -v:反向匹配,只输出不匹配的行
  • -w:只匹配整个单词,而不是单词的一部分
  • -n:在每行输出匹配的行号
  • -c:仅输出匹配的行数
  • -l:只输出包含匹配项的文件名
  • -r:递归搜索指定目录下的所有文件
  • -E:使用扩展正则表达式语法
  • -F:将模式视为固定字符串而不是正则表达式
  • -o 是一个非常有用的命令选项,用于在匹配文本中仅输出匹配的部分,而不是整个行或文件。
  • -A <num> 表示显示匹配行的后 num 行文本
  • -B <num> 表示显示匹配行的前 num 行文本
  • -C <num> 表示显示匹配行前后 num 行文本

grep '2024-09-10 16:50:06' xxx.log | grep 'signDsk called'  | wc -l
wc -l是一个Linux命令,用于计算文件中的行数

awk

假设日志如下:aaa.log

Cctv 1 a alkjdf
Cctv 2 a alkjdf
Cctv 3 a alkjdf
Cctv 4 a alkjdf
Adsf 5 a alkjdf
Cctv 5 a alkjdf
Cctv 6 a alkjdf
Cctv 7 a alkjdf
Cctv 8 a alkjdf
Cctv 9 a alkjdf
Cctv 10 a alkjdf

cat aaa.log | grep 'Cctv' | awk '{print $(NF-2)}'

输出

1
2
3
4
5
6
7
8
9
10

cat aaa.log | grep 'Cctv' | awk '{print $(NF-2)}' | awk '{cost+=$1;pv++;}END {printf("pv=%d  totalCost=%s  avgCost=%s\n", pv, cost, cost/pv)}'

输出:

pv=10  totalCost=55  avgCost=5.5
$ echo 'this is a test' | awk '{print $0}'
this is a test   
$0代表当前行  
awk会根据空格和制表符,将每一行分成若干字段,依次用$1、$2、$3代表第一个、第二个、第三个字段


$ echo 'this is a test' | awk '{print $3}'
a


如果分隔符不是空格,需要指定用 -F
假设日志是demo.txt:
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

则:
$ awk -F ':' '{ print $1 }' demo.txt
root
daemon
bin
sys
sync

场景8:分页查看,使用空格翻页(使用more/less),搜索关键字附近的日志

cat -n  starx-meshside.log | grep "error" | more

grep -A3 -B3  ERROR starx-meshside.log | less

cat filename | grep -C 5 ‘关键字’ (显示日志里匹配字串那行以及前后5行)

cat filename | grep -B 5 ‘关键字’ (显示匹配字串及前5行)

cat filename | grep -A 5 ‘关键字’ (显示匹配字串及后5行)

2. zgrep

定义:压缩文件中查找

zgrep常用命令:

zgrep '查询条件' xxx.log.gz :压缩文件中查询
zgrep '查询条件' xxx.log.gz | grep 'condition2' | grep 'condition3'

cpu

1. top

定义:查询系统负载、CPU、内存使用情况

top常用命令:

top:进程维度的明细
top -o cpu:按照cpu排序
top -o rsize:按内存使用率排序
top -Hp pid:查询进程pid下的所有线程占用cpu等明细,非常实用


 

内存

1. free

定义:查看内存使用情况

free常用命令:

free : 单位Kb 
free -m :单位Mb

tcp相关

1. netstat

定义:用于显示网络状态

netstat常用命令:

netstat -l:listening 显示监控中的服务器的Socket
netstat -t:显示TCP传输协议的连线状况
netstat -t | grep '172.16.248.12':显示TCP传输协议的连线状况并按照一定条件过滤

状态统计
netstat -ant | awk '/tcp/ {print $6}'|sort |uniq -c |sort -nr
    131 ESTABLISHED
     92 TIME_WAIT
     44 LISTEN
      7 CLOSE_WAIT
 
前十位ESTABLISHED状态ip统计
netstat -ant | grep "ESTABLISHED"|awk '/tcp/ {print $5}'|cut -d ":" -f1|sort |uniq -c |sort -nr |head -10

前十位TIME_WAIT状态ip统计
netstat -ant | grep "TIME_WAIT"|awk '/tcp/ {print $5}'|cut -d ":" -f1|sort |uniq -c |sort -nr |head -10
 
服务器本地被连接的EST
netstat -ant | grep "EST"|awk '/tcp/ {print $4}' |sort |uniq -c |sort -nr |head -10
 
服务器本地被连接的WAIT
netstat -ant | grep "TIME_WAIT"|awk '/tcp/ {print $4}' |sort |uniq -c |sort -nr |head -10
 
netstat -ant |awk '/^tcp/ {print $5}'|cut -d ":" -f1 |sort |uniq -c|sort -nr |grep -v "10.20"

2. ulimit

定义:可用于显示系统资源的设置

ulimit常用命令:

ulimit -n :指定同一时间最多可开启的文件数

3. lsof

定义:查看当前进程的打开文件详情(list open files)

lsof常用命令:

lsof -p pid :查看当前进程的打开文件详情,不适用,打印出来太多
lsof -i:80  :查看80端口被那个进程占用

列出TCP连接(List TCP Connections)
我们只能使用-i tcp选项列出TCP连接。
$ lsof -i tcp

jvm常用

1. jps

定义:查询进程号相关

jps常用命令:jps

2. jinfo

定义:

jinfo常用命令:

jinfo -flags pid : 查询java进程启动参数

3. jstack

定义:打印进程的堆栈信息

jstack常用命令:

jstack -l pid

jstack主要用于生成java虚拟机当前时刻的线程快照,线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。通过top命令定位到cpu占用率较高的线程之后,继续使用jstack pid命令查看当前java进程的堆栈状态。jstack命令生成的thread dump信息包含了JVM中所有存活的线程,为了分析指定线程,必须找出对应线程的调用栈,应该如何找?在top命令中,已经获取到了占用cpu资源较高的线程pid,将该pid转成16进制的值,在thread dump中每个线程都有一个nid,找到对应的nid即可;隔段时间再执行一次stack命令获取thread dump,区分两份dump是否有差别

4. jmap

定义:查询JVM内存对象信息

jmap常用命令:

jmap -histo pid | head -n20 : 查询top20对象
jmap -dump:format=b,file=/home/admin/logs/app/heap.hprpf pid : 对进程号为pid进行dump文件操作

5. jstat

定义:

jstat常用命令:

jstat -gc pid      : 查询pid的gc实时信息、分代使用信息
jstat -gc pid 2000 : 间隔两秒打印一次
jstat -gcnew pid   : 查询new对象的信息
jstat -gcold pid   : 查询old对象的信息

使用此命令可以得出设置的各个代的大小是否合理,若不合理,如何调整。调整的策略必须以实际应用为主,比如说:full gc的时间停顿让客户感觉明显,我们分析原因得知是old区域设置的过大,导致一次full gc需要的时间过久;如果我们直接缩小old区域的大小,又回发现full gc过于频繁;这个时候也许我们需要更换gc的算法

进制转换

1. 十进制转16进制

printf '%x\n' 15

磁盘管理

1. df

df :disk free

命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计

df -h 参数-h表示使用「Human-readable」的输出

2. du

du (英文全拼:disk usage)命令用于显示目录或文件的大小

du --max-depth=1 -h
 

du 会显示指定的目录或文件所占用的磁盘空间

参数-h表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式

参数–max-depth指定深入目录的层数,这是个极为有用的参数,如果当前目录下文件和文件夹很多,使用不带参数du的命令,会循环列出所有文件和文件夹所使用的空间。这对查看究竟是那个地方过大是不利的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值