searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

服务&网络故障排查命令

2024-10-15 09:46:05
6
0

进程/线程相关故障

  • 打印堆栈日志
    jmap -dump:format=b,file=heapdump.hprof {PID}

  • 检索日志文件内包含某关键词的行数
    grep service_jstack.dump -ne mysqlAuditLog | wc -l

这段命令是在Unix或Linux系统中使用grep命令对名为service_jstack.dump的文件进行搜索操作,搜索包含"mysqlAuditLog"的行,并统计这些行的数量。

    • grep: 是文本搜索工具,用于查找文件中匹配指定模式的行。
    • service_jstack.dump: 是需要搜索的文件名。
    • -n: 选项会打印每一个匹配行的行号。
    • e: 使用正则表达式进行搜索。
    • mysqlAuditLog: 是搜索的关键词或正则表达式。
    • |: 管道符,用于将前一个命令的输出传递给后面的命令。
    • wc -l: wc 是一个统计文本数量的命令,-l 选项用于统计行数。

解释:

    1. grep service_jstack.dump -ne mysqlAuditLog:搜索文件service_jstack.dump中包含mysqlAuditLog的行,并打印行号。
    2. |:将搜索结果传递给wc -l
    3. wc -l:计算传递过来的行数,即为匹配mysqlAuditLog的行数。

  • 显示指定进程的相关线程信息
    ps -T -p {pid}
    ps: 这是一个显示当前进程状态的命令。
    -T: 显示与指定进程相关的线程。
    -p 13292: 指定进程ID(PID)为13292的进程。

 

  • 统计指定进程的关联线程数
    ps -T -p 13292 -o pid,lwp,comm | awk '{print $3}' | sort | uniq -c | sort -nr
    • ps: 这是一个显示当前进程状态的命令。
    • -T: 显示与指定进程相关的线程。
    • -p 13292: 指定进程ID(PID)为13292的进程。
    • -o pid,lwp,comm: 定制输出,只显示PID(进程ID)、LWP(轻量级进程ID,通常是线程ID)和COMM(命令名)。

这个命令的输出大致如下(仅为示例):

bashPID   LWP COMMAND
13292 13292 main_program
13292 13293 thread_1
13292 13294 thread_2
...
    1. awk '{print $3}'
      • awk: 是一个强大的文本处理工具。
      • '{print $3}': 这是一个awk命令,用于打印每一行的第三个字段(即COMMAND列)。

这个命令的输出将是:

bashmain_program
thread_1
thread_2
...
    1. sort
      • 这个命令用于对输入进行排序。在这里,它将对线程名进行排序。
    1. uniq -c
      • uniq: 用于报告或删除排序文件中的重复行。
      • -c: 在每行前加上该行在输入文件中出现的次数。

这个命令的输出将类似于:

bash  3 thread_1
  2 thread_2
  1 main_program
...
    1. sort -nr
      • sort: 再次对输入进行排序。
      • -n: 按数值排序。
      • -r: 逆序排序。

这个命令的输出将按照线程名出现的次数从多到少进行排序:

bash  3 thread_1
  2 thread_2
  1 main_program
...

这段指令的主要目的是统计PID为13292的进程中的各个线程名称及其出现次数,并按出现次数从多到少进行排序。

  • 统计java相关进程以及每个进程关联的线程数
    ps aux | grep java | grep -v grep | awk '{print $2, $NF}' | while read line ; do pid=$(echo $line | awk '{print $1}'); pidname=$(echo $line | awk '{print $2}'); pid_count=$(ps huH p ${pid} | wc -l );echo "pid: ${pid} 线程数: ${pid_count} jar: ${pidname}"; done
    1. ps aux
      • ps 命令用于报告当前系统的进程状态。
      • aux ps 命令的一个选项组合,其中:
        • a 显示所有终端下的进程,包括其他用户的进程。
        • u 使用以用户为主的格式输出进程信息。
        • x 显示没有控制终端的进程。
    1. grep java
      • ps aux 的输出中筛选出包含“java”的行。
    1. grep -v grep
      • 排除掉包含“grep”的行,即排除掉我们自己的搜索命令。
    1. awk '{print $2, $NF}'
      • 使用 awk 命令处理文本,并打印每行的第二个字段(PID)和最后一个字段(通常是Java命令或JAR文件的路径)。
    1. while read line; do ... done
      • 这是一个bash循环,用于逐行读取前面命令的输出。
    1. 在循环内部
      • pid=$(echo $line | awk '{print $1}')
        • 这里其实是不必要的,因为 $line 已经被 awk 分割成了两部分,分别赋给了 $pid $pidname。你应该可以直接使用 $1 来获取PID。
      • pidname=$(echo $line | awk '{print $2}')
        • 同样,这里也是不必要的,因为 $2 已经包含了Java命令或JAR文件的路径。
      • pid_count=$(ps huH p ${pid} | wc -l)
        • 使用 ps 命令的 huH 选项(h 表示不显示标题,u 表示显示用户/所有者信息,但在这里其实是不必要的,因为我们只关心线程数;H 表示显示线程)和 p 选项(指定PID)来查找与给定PID相关的所有线程。
        • wc -l 用于计算输出中的行数,即线程数。
      • echo "pid: ${pid} 线程数: ${pid_count} jar: ${pidname}"
        • 打印PID、线程数以及Java命令或JAR文件的路径。

网络相关故障

内网不通(同一子网内)

  • 查看IP地址和对应的MAC地址

arp -n (-n 选项可以禁用DNS解析,展示数字形式的IP地址)

用于判断某机器上,是否可以广播找到子网内另一IP地址的设备,返回MAC地址

  • 查看子网内IP地址A是否能ping通同一子网的IP地址B

1)在IP地址A机器上 ping IP地址B

2)在IP地址B机器上 tcpdump ( 例:tcpdump -i eth0 host IP地址A -nn ),可以查看IP地址A发来的icmp请求是否正常

  • 查看iptables规则
    iptables -L
    -v 显示详细信息
    -n 以数字形式显示地址和端口号,避免DNS解析
    --line-numbers 显示规则的行号
    常用 iptables -vnL
    如果两子网地址无法连通,可以查看iptables规则,看IP地址B的机器,是否接受地址A传来的包,并且正常回包
  • 查看当前Linux路由表信息
    route -n(-n 选项可以禁用DNS解析,展示数字形式的IP地址
0条评论
0 / 1000
7****m
2文章数
0粉丝数
7****m
2 文章 | 0 粉丝
7****m
2文章数
0粉丝数
7****m
2 文章 | 0 粉丝
原创

服务&网络故障排查命令

2024-10-15 09:46:05
6
0

进程/线程相关故障

  • 打印堆栈日志
    jmap -dump:format=b,file=heapdump.hprof {PID}

  • 检索日志文件内包含某关键词的行数
    grep service_jstack.dump -ne mysqlAuditLog | wc -l

这段命令是在Unix或Linux系统中使用grep命令对名为service_jstack.dump的文件进行搜索操作,搜索包含"mysqlAuditLog"的行,并统计这些行的数量。

    • grep: 是文本搜索工具,用于查找文件中匹配指定模式的行。
    • service_jstack.dump: 是需要搜索的文件名。
    • -n: 选项会打印每一个匹配行的行号。
    • e: 使用正则表达式进行搜索。
    • mysqlAuditLog: 是搜索的关键词或正则表达式。
    • |: 管道符,用于将前一个命令的输出传递给后面的命令。
    • wc -l: wc 是一个统计文本数量的命令,-l 选项用于统计行数。

解释:

    1. grep service_jstack.dump -ne mysqlAuditLog:搜索文件service_jstack.dump中包含mysqlAuditLog的行,并打印行号。
    2. |:将搜索结果传递给wc -l
    3. wc -l:计算传递过来的行数,即为匹配mysqlAuditLog的行数。

  • 显示指定进程的相关线程信息
    ps -T -p {pid}
    ps: 这是一个显示当前进程状态的命令。
    -T: 显示与指定进程相关的线程。
    -p 13292: 指定进程ID(PID)为13292的进程。

 

  • 统计指定进程的关联线程数
    ps -T -p 13292 -o pid,lwp,comm | awk '{print $3}' | sort | uniq -c | sort -nr
    • ps: 这是一个显示当前进程状态的命令。
    • -T: 显示与指定进程相关的线程。
    • -p 13292: 指定进程ID(PID)为13292的进程。
    • -o pid,lwp,comm: 定制输出,只显示PID(进程ID)、LWP(轻量级进程ID,通常是线程ID)和COMM(命令名)。

这个命令的输出大致如下(仅为示例):

bashPID   LWP COMMAND
13292 13292 main_program
13292 13293 thread_1
13292 13294 thread_2
...
    1. awk '{print $3}'
      • awk: 是一个强大的文本处理工具。
      • '{print $3}': 这是一个awk命令,用于打印每一行的第三个字段(即COMMAND列)。

这个命令的输出将是:

bashmain_program
thread_1
thread_2
...
    1. sort
      • 这个命令用于对输入进行排序。在这里,它将对线程名进行排序。
    1. uniq -c
      • uniq: 用于报告或删除排序文件中的重复行。
      • -c: 在每行前加上该行在输入文件中出现的次数。

这个命令的输出将类似于:

bash  3 thread_1
  2 thread_2
  1 main_program
...
    1. sort -nr
      • sort: 再次对输入进行排序。
      • -n: 按数值排序。
      • -r: 逆序排序。

这个命令的输出将按照线程名出现的次数从多到少进行排序:

bash  3 thread_1
  2 thread_2
  1 main_program
...

这段指令的主要目的是统计PID为13292的进程中的各个线程名称及其出现次数,并按出现次数从多到少进行排序。

  • 统计java相关进程以及每个进程关联的线程数
    ps aux | grep java | grep -v grep | awk '{print $2, $NF}' | while read line ; do pid=$(echo $line | awk '{print $1}'); pidname=$(echo $line | awk '{print $2}'); pid_count=$(ps huH p ${pid} | wc -l );echo "pid: ${pid} 线程数: ${pid_count} jar: ${pidname}"; done
    1. ps aux
      • ps 命令用于报告当前系统的进程状态。
      • aux ps 命令的一个选项组合,其中:
        • a 显示所有终端下的进程,包括其他用户的进程。
        • u 使用以用户为主的格式输出进程信息。
        • x 显示没有控制终端的进程。
    1. grep java
      • ps aux 的输出中筛选出包含“java”的行。
    1. grep -v grep
      • 排除掉包含“grep”的行,即排除掉我们自己的搜索命令。
    1. awk '{print $2, $NF}'
      • 使用 awk 命令处理文本,并打印每行的第二个字段(PID)和最后一个字段(通常是Java命令或JAR文件的路径)。
    1. while read line; do ... done
      • 这是一个bash循环,用于逐行读取前面命令的输出。
    1. 在循环内部
      • pid=$(echo $line | awk '{print $1}')
        • 这里其实是不必要的,因为 $line 已经被 awk 分割成了两部分,分别赋给了 $pid $pidname。你应该可以直接使用 $1 来获取PID。
      • pidname=$(echo $line | awk '{print $2}')
        • 同样,这里也是不必要的,因为 $2 已经包含了Java命令或JAR文件的路径。
      • pid_count=$(ps huH p ${pid} | wc -l)
        • 使用 ps 命令的 huH 选项(h 表示不显示标题,u 表示显示用户/所有者信息,但在这里其实是不必要的,因为我们只关心线程数;H 表示显示线程)和 p 选项(指定PID)来查找与给定PID相关的所有线程。
        • wc -l 用于计算输出中的行数,即线程数。
      • echo "pid: ${pid} 线程数: ${pid_count} jar: ${pidname}"
        • 打印PID、线程数以及Java命令或JAR文件的路径。

网络相关故障

内网不通(同一子网内)

  • 查看IP地址和对应的MAC地址

arp -n (-n 选项可以禁用DNS解析,展示数字形式的IP地址)

用于判断某机器上,是否可以广播找到子网内另一IP地址的设备,返回MAC地址

  • 查看子网内IP地址A是否能ping通同一子网的IP地址B

1)在IP地址A机器上 ping IP地址B

2)在IP地址B机器上 tcpdump ( 例:tcpdump -i eth0 host IP地址A -nn ),可以查看IP地址A发来的icmp请求是否正常

  • 查看iptables规则
    iptables -L
    -v 显示详细信息
    -n 以数字形式显示地址和端口号,避免DNS解析
    --line-numbers 显示规则的行号
    常用 iptables -vnL
    如果两子网地址无法连通,可以查看iptables规则,看IP地址B的机器,是否接受地址A传来的包,并且正常回包
  • 查看当前Linux路由表信息
    route -n(-n 选项可以禁用DNS解析,展示数字形式的IP地址
文章来自个人专栏
故障排查记录
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0