zoukankan      html  css  js  c++  java
  • Solaris的panic故障分析

    1. solaris崩溃后我们在故障分析时除了在/var/adm/messages中查看故障前的系统日志,还希望了解故障当时的系统状态,运行了哪些进程,打开了什么文件,正在发生什么事件,有什么方法可以了解到这些信息呢?

    2. 幸运的是solaris为我们提供了这样一个机制。solaris在panic崩溃后会在/var/crash/`hostname`目录下产生unix.x和vmcore.x文件,这两个文件记录了崩溃当时的系统状态,我们可以对他们进行分析,获取我们需要的信息

    3. 分析方法:

         我们可以mdb -k x或者mdb -k unix.x vmcore.x对系统dump文件分析,例如在/var/crash/hostname中有unix.3和vmcore.3,

        执行命令:mdb -k 3

     4.  常用分析命令

    a. Crash时系统消息缓冲区的消息

    该消息缓冲区是ring buffer,有很多有价值的信息,可以知道系统crash时或者之前很长一段时间的系统消息。

    ::msgbuf

    > ::msgbuf
    MESSAGE                                                               
    sd94 at fjpfca1: target 11 lun b
    sd94 is /pci@81,2000/fibre-channel@1/sd@11,b
    WARNING: hme3: fault detected in device; service degraded
    WARNING: hme3: No response from Ethernet network : Link down -- cable problem?
    NOTICE: hme3: fault detected in device; service still degraded
    NOTICE: hme3: No response from Ethernet network : Link down -- cable problem?
    

    b. 查看当时系统的进程

    > ::ps                                
    S    PID   PPID   PGID    SID    UID      FLAGS             ADDR NAME
    R      0      0      0      0      0 0x00000001 0000000001843840 sched
    R      3      0      0      0      0 0x00020001 0000030006d0f818 fsflush
    R      2      0      0      0      0 0x00020001 0000030006d10420 pageout
    R      1      0      0      0      0 0x42004000 0000030006d11028 init
    R  16365      1  16365  16365    100 0x42004000 0000030007d16028 oracle
    R  16338      1  16338  16338    100 0x42004000 000003012556eea8 oracle
    R  16336      1  16336  16336    100 0x42004000 00000300909ccdd8 oracle
    

    c. 内存状态

    1. 调用栈的backtrace

    $c
    ::stack
    ::stackregs

    2. 内核符号表

    ::nm

    3. 反汇编

    <内核函数>::dis

    4. CPU寄存器

    ::regs

    5. 调度队列(dispatch queue)

    ::cpuinfo -v

    6. 物理内存及slab子系统

    ::memstat
    ::kmastat

    7. 系统中所有进程

    ::ps

    8. 所有内核线程

    ::threadlist

    9. 线程状态

    <kthread_t的地址>::thread

    10. 某个内核线程调用栈

    <kthread_t的地址>::findstack -v
    <proc_t的地址>::walk thread |::findstack -v

    11. 同步对象的状态

    <mutex地址>::mutex
    <读写锁的地址>::rwlock

    12. 地址引用查找

    <地址>::kgrep
    <地址>::whatthread

  • 相关阅读:
    精讲响应式WebClient第6篇-请求失败自动重试机制,强烈建议你看一看
    dubbo实战之三:使用Zookeeper注册中心
    dubbo实战之二:与SpringBoot集成
    dubbo实战之一:准备和初体验
    树莓派4B安装官方Ubuntu20 Server版(64位)
    JUnit5学习之八:综合进阶(终篇)
    纯函数
    函数式编程基本概念
    vscod使用指南
    实际使用Elasticdump工具对Elasticsearch集群进行数据备份和数据还原
  • 原文地址:https://www.cnblogs.com/itfriend/p/2359533.html
Copyright © 2011-2022 走看看