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

  • 相关阅读:
    Android 画布绘图
    Android 4.2.2原生Launcher修改使之可以运行过程小结
    canvas的translate、scale、rotate等方法
    WorkSpace介绍
    Libgdx New 3D API 教程之 -- 加载3D场景的背后-第二部分
    Libgdx New 3D API 教程之 -- 使用Libgdx加载模型
    LibGdx----Texture, TextureRegion, SpriteBatch
    libgdx学习之Camera
    Java伪代码
    读大道至简之感
  • 原文地址:https://www.cnblogs.com/itfriend/p/2359533.html
Copyright © 2011-2022 走看看