精选微信网站建设,wordpress创建知识库,查网站空间商,怎么自己做企业网站在linux系统下#xff0c;我们可能会遇到系统某个命令hang住的情况#xff0c;通常情况下#xff0c;我们会查看/proc/pid/wchan文件#xff0c;看看进程处于什么状况#xff0c;然后进一步查看系统日志或者使用strace跟踪命令执行时的系统调用等等方法来分析问题。我们知… 在linux系统下我们可能会遇到系统某个命令hang住的情况通常情况下我们会查看/proc/pid/wchan文件看看进程处于什么状况然后进一步查看系统日志或者使用strace跟踪命令执行时的系统调用等等方法来分析问题。我们知道命令hang一般问题都出在内核里 如果我们能根据自己的需要打印内核的信息可能会事半功倍很快定位到问题。 幸运的是linux真的有提供这样的方式就是通过SysRq今天在这里我就介绍一下。
一、Sysrq SysRqsystem request 是 Linux 操作系统内核理解的一系列键可以触发一组预定义的操作。 当无法通过传统管理 (执行虚拟机故障排除或恢复时通常使用这些命令例如VM 未) 响应。 Sysrq被称为”魔术组合键” 是内建于Linux内核的调试工具只要内核没有完全锁住不管内核在做什么事情内核都会响应这一系列组合键使用这些组合键可以搜集包括系统内存使用、CPU任务处理、进程运行状态等系统运行信息。 SysRq 键在确认内核运行、调查内核死机原因等各种情况下都非常有效。
二、启用sysrq 要想使用 Magic SysRq key 打开内核配置选项 CONFIG_MAGIC_SYSRQ一般的发行版都默认打开该配置选项 # # Kernel hacking # ...... CONFIG_MAGIC_SYSRQy 当运行一个编译了SysRq的内核时/proc/sys/kernel/sysrq文件的值控制着允许通过SysRq键键盘组合键调用的函数下面是/proc/sys/kernel/sysrq中可能的值列表 0 - disable sysrq completely 1 - enable all functions of sysrq 1 - bitmask of allowed sysrq functions (see below for detailed function description): 2 0x2 - enable control of console logging level 4 0x4 - enable control of keyboard (SAK, unraw) 8 0x8 - enable debugging dumps of processes etc. 16 0x10 - enable sync command 32 0x20 - enable remount read-only 64 0x40 - enable signalling of processes (term, kill, oom-kill) 128 0x80 - allow reboot/poweroff 256 0x100 - allow nicing of all RT tasks /proc/sys/kernel/sysrq文件的值控制着SysRq键键盘组合键的一些功能。 echo number /proc/sys/kernel/sysr 例如 echo 1 /proc/sys/kernel/sysrq ##设置为1时使能SysRq键的所有功能。 或者通过 sysctl 命令也可以设置或者读写内核参数 sysctl -w kernel.sysrq 1 备注/proc/sys/kernel/sysrq的值只影响通过 键盘组合键的调用。通过/proc/sysrq-trigger调用任何操作总是被允许的(由具有管理权限的用户)。 即 /proc/sys/kernel/sysrq的值 只是影响 键盘组合键触发内核操作对于 /proc/sysrq-trigger触发内核操作没有影响。
内核配置选项中使能CONFIG_MAGIC_SYSRQ选项这样系统启动之后会生成/proc/sysrq-trigger节点用于调试。 一般用法 sysctl -n kernel.sysrq ####显示当前的sysrq值通常是16, 表示使用“sysnc”命令 sysctl -w kernel.sysrq1 ### “1”表示启用sysrq全部功能键。 sysctl -n kernel.sysrq ###确认sysrq功能键启用也可以用以下命令查看 若要使 SysReq 配置持久化可以执行以下操作来启用所有 SysRq 命令
将此行添加到 /etc/sysctl.conf kernel.sysrq 1 或者 echo kernel.sysrq 1 /etc/sysctl.conf 通过运行重新启动或更新 sysctl sysctl -p 三、SysRq的使用
SysRq的使用有两种方式
第一种是键盘组合键AltSysRq command key 。(受到/proc/sys/kernel/sysrq值的影响)第二种是修改/proc/sysrq-trigger文件的值。(不受/proc/sys/kernel/sysrq值的影响)主要介绍第二种方式
/proc/sysrq-trigger文件的值不受/proc/sys/kernel/sysrq值的影响所以将/proc/sys/kernel/sysrq的值设置为0依然可以触发内核的各种事件。 [rootlocalhost ~]# echo 0 /proc/sys/kernel/sysrq [rootlocalhost ~]# cat /proc/sys/kernel/sysrq 0 比如 echo t /proc/sysrq-trigger 四、命令介绍部分 echo command key /proc/sysrq-trigger 键名 功能说明 b 在没有同步或卸载硬盘的情况下立即启动。 c 为了获取崩溃转储执行kexe重启动。 d 显示被持的所有锁。 e 发送信号SIGTERM给所有进程除了init外。 f 将调用oom_kill杀死内存热进程。 g 在平台ppc和sh上被kgdb使用。 h 显示帮助信息。 i 发送信号SIGKILL给所有的进程除了init外。 k 安全访问密钥Secure Access KeySAK杀死在当前虚拟终端上的所有程序。 m 转储当前的内存信息到控制台。 n 用于设置实时任务为可调整nice的。 o 将关闭系统如果配置为支持。 p 打印当前寄存器和标识到控制台。 q 将转储所有正运行定时器的列表。 r 关闭键盘Raw模式并设置为XLATE模式。 s 尝试同步所有挂接的文件系统。 t 将转储当前的任务列表和它们的信息到控制台。 u 尝试以仅读的方式重挂接所有已挂接的文件系统。 v 转储Voyager SMP处理器信息到控制台。 w 转储的所有非可中断已阻塞状态的任务。 x 在平台ppc/powerpc上被xmonX监视器接口使用。 0~9 设备控制台日志级别控制将打印到控制台的内核信息。例如0仅打印紧急信息如PANIC和OOPS信息。 1、echo m /proc/sysrq-trigger 将当前内存信息转储到主机。 2、echo t /proc/sysrq-trigger 该命令会输出系统中所有进程包括系统的和用户的的执行状态、调用栈信息 3、echo w /proc/sysrq-trigger
转储处于不可中断 (阻止) 状态的任务。 4、echo l /proc/sysrq-trigger
显示所有活动 CPU 的堆栈回溯。 5、echo p /proc/sysrq-trigger
将当前寄存器和标志转储到主机。 6、echo q /proc/sysrq-trigger 将转储每个 CPU 列表的所有武装 hrtimers (但不是常规timer_list计时器) 和有关所有时钟事件设备的详细信息。