• Linux内核调试方法


    内核配置选项中要使能CONFIG_MAGIC_SYSRQ选项,这样系统启动之后,会生成/proc/sysrq-trigger节点用于调试。

    其次,可以在/etc/sysctl.conf中设置kernel.sysrq=1默认使能sysq功能。也可以通过写/proc/sys/kernel/sysrq节点动态使能sysrq功能。写入不同的值使能不同的功能:

    0 - disable sysrq completely

    1 - enable all functions of sysrq

    2 - enable control of console   logging level

    4 - enable control of keyboard (SAK,   unraw)

    8 - enable debugging dumps of   processes etc.

    16 - enable sync command

    32 - enable remount read-only

    64 - enable signalling of processes   (term, kill, oom-kill)

    128- allow reboot/poweroff

    256- allow nicing of all RT tasks

    【使用说明】

    #echo m > /proc/sysrq-trigger 导出内存分配信息

    #echo t > /proc/sysrq-trigger 导出当前任务状态信息

    #echo p > /proc/sysrq-trigger 导出当前CPU寄存器和标志位信息

    #echo c > /proc/sysrq-trigger 产生空指针panic事件,人为导致系统崩溃

    #echo s > /proc/sysrq-trigger 即时同步所有挂载的文件系统

    #echo u > /proc/sysrq-trigger 即时重新挂载所有的文件系统为只读

    #echo w > /proc/sysrq-trigger转储处于uninterruptable阻塞状态的任务

    轻松搞死linux,介绍/proc/sysrq-trigger的强大功能  

    立即重启计算机      echo "b" > /proc/sysrq-trigger

    立即关闭计算机      echo "o" > /proc/sysrq-trigger

    导出内存分配的信息    echo "m"  > proc/sysrq-trigger        (可以用/var/log/message查看)Outputs memory statistics to the console

    导出当前CPU寄存器信息和标志位的信息     echo "p"  > proc/sysrq-trigger       (outputs all flags and registers to the console)

    导出线程状态信息        echo "t"  > proc/sysrq-trigger          (outputs a list of processes to the console)

    故意让系统崩溃            echo "c"  > proc/sysrq-trigger         (crashes the system without first unmounting file systems or syncing disks attached to the system)

    立即重新挂载所有的文件系统               echo "s"  > proc/sysrq-trigger     (attempts to sync disks attached to the system)

    立即重新挂载所有的文件系统为只读     echo "u"  > proc/sysrq-trigger     (attempts to unmount and remount all file systems as read-only)

    此外,还有两个类似于强制注销的功能

    e ---- kills all processes except init using SIGTERM

    i ---- kills all processes except init using SIGKILL

    当一个sysrq命令被触发,内核将会打印信息到内核的环形缓冲并输出到系统控制台。此信息一般也会通过syslog输出到/var/log/messages.
    有时候,可能系统已无法响应,syslogd可能无法记录此信息。在这种情况下,建议你设置一个串口终端来收集这个信息。
    那些类型的sysrq事件能被触发?
    sysrq功能被打开后,有几种sysrq事件能被触发。不同的内核版本可能会有些不同。但有一些是共用的:
    * m - 导出关于内存分配的信息,
    * t - 导出线程状态信息,
    * p - 导出当前CPU寄存器信息和标志位的信息,
    * c - 故意让系统崩溃(在使用netdump或diskdump的时候有用),
    * s - 即时同步所有挂载的文件系统,
    * u - 即时重新挂载所有的文件系统为只读,
    * b - 即时重新启动系统,
    * o - 即时关机(如果机器设置并支持此项功能)。
  • 相关阅读:
    深入理解 Spring 事务原理
    spring+springMVC,声明式事务失效,原因以及解决办法
    spring 中常用的两种事务配置方式以及事务的传播性、隔离级别
    【Spring aop】Spring aop的XML和注解的两种配置实现
    Java消息队列--ActiveMq 实战
    【Android】Android开发实现进度条效果,SeekBar的简单使用。音量,音乐播放进度,视频播放进度等
    【Android】Android开发实现带有反弹效果,仿IOS反弹scrollview详解教程
    【Android】安卓开发之activity如何传值到fragment,activity与fragment传值
    【Android】Android开发初学者实现拨打电话的功能,拨打电话app小demo实现
    【Android】SlidingTabLayout实现标题栏,教你制作title标题 简单易学。
  • 原文地址:https://www.cnblogs.com/klb561/p/8964206.html
Copyright © 2020-2023  润新知