/proc/sys/kernel/文档(一)

    此目录中的文件可用于优化和监视Linux内核操作中的杂项和常规内容。由于某些文件可能被用来破坏您的系统,因此在实际进行调整之前,最好先阅读文档和源代码。
    目前,这些文件可能(取决于您的配置)显示在/proc/sys/kernel中:

acct

    格式为:highwater lowwater frequency
    如果启用了BSD风格的过程记帐,则这些值将控制其行为。如果日志所在的文件系统上的可用空间低于<lowwater>%,则记帐将暂停。如果可用空间超过<highwater>%,则恢复计算。<Frequency>确定我们多久检查一次可用空间量(值以秒为单位)。

# cat /proc/sys/kernel/acct 
4       2       30

    默认值:4 2 30,也就是说,如果剩余的可用空间小于等于2%,则暂停记帐;如果得到的可用空间大于等于4%,则继续记帐;考虑有关30秒内有效的可用空间量的信息。
    在系统上,通过psacct服务开启记账。psacct.x86_64软件包包含如下文件:

# rpm -ql psacct.x86_64
/etc/logrotate.d/psacct
/usr/bin/ac
/usr/bin/lastcomm
/usr/lib/systemd/system/psacct.service
/usr/libexec/psacct/accton-create
/usr/sbin/accton
/usr/sbin/dump-acct
/usr/sbin/dump-utmp
/usr/sbin/sa
/usr/share/doc/psacct-6.6.1
/usr/share/doc/psacct-6.6.1/COPYING
/usr/share/doc/psacct-6.6.1/README
/usr/share/info/accounting.info.gz
/usr/share/man/man1/ac.1.gz
/usr/share/man/man1/lastcomm.1.gz
/usr/share/man/man8/accton.8.gz
/usr/share/man/man8/dump-acct.8.gz
/usr/share/man/man8/dump-utmp.8.gz
/usr/share/man/man8/sa.8.gz
/var/account
/var/account/pacct
# systemctl start psacct.service

    启用psacct.service,实际上是通过/usr/sbin/accton命令,默认将进程记账写入/var/account/pacct文件。这是一个二进制文件,需要通过/usr/bin/lastcomm或/usr/sbin/sa命令获取记录信息。

acpi_video_flags

    格式:flags
    它允许在运行时设置视频启动模式。

auto_msgmni

    在Linux 3.17之前,它在添加/删除内存或创建/删除ipc名称空间时启用/禁用msgmni的自动重新计算。在该文件中回显“ 1”可启用msgmni自动重新计算。返回“ 0”将其关闭。auto_msgmni的默认值为1。

bootloader_type

    这给出了bootloader指示的bootloader类型编号,向左移4,然后与引导加载程序版本的低四位进行“或”运算。进行这种编码的原因是,该编码曾经与内核头文件中的type_of_loader字段匹配。保持编码是为了向后兼容。也就是说,如果完整的引导加载程序类型号为0x15,完整的版本号为0x234,则此文件将包含值340 = 0x154。
    看不明白?写成二进制可能就明白了。0x15写成二进制为10101,0x234二进制为1000110100,将0x15左移4位,后面接上0x234的最后4位,就是101010100,即十进制340。
示例
    随便找1台主机,看一下该值:

# cat /proc/sys/kernel/bootloader_type 
114
# cat bootloader_version 
2

    十进制114,即为二进制1110010。bootloader_version值为十进制2,相当于上面的0x234,与bootloader_type后4位是一致的。移除掉后4位,bootloader类型编号应该为0x7,表示bootloader使用GRUB。Documentation/x86/boot.rst文档中已分配bootloader ids如下:
已分配的bootloader id

bootloader_version

    完整的引导加载程序版本号。在上面的示例中,该文件将包含值564 = 0x234。

cap_last_cap

    正在运行的内核的最高有效能力。从内核导出CAP_LAST_CAP。

core_pattern

    core_pattern用于指定核心转储文件模式名称。

  • 最大长度127个字符;默认值为“core”
  • core_pattern用作输出文件名的模式模板;某些字符串模式(以’%'开头)将替换为其实际值
  • 与core_uses_pid的向后兼容性:
    如果core_pattern不包含“%p”(默认不包含)并且设置了core_uses_pid,则.PID将附加到文件名中。
  • corename格式说明符:
%<NUL>  '%' is dropped
%%      output one '%'
%p      pid
%P      global pid (init PID namespace)
%i      tid
%I      global tid (init PID namespace)
%u      uid (in initial user namespace)
%g      gid (in initial user namespace)
%d      dump mode, matches PR_SET_DUMPABLE and
        /proc/sys/fs/suid_dumpable
%s      signal number
%t      UNIX time of dump
%h      hostname
%e      executable filename (may be shortened)
%E      executable path
%<OTHER> both are dropped
  • 如果模式的第一个字符是’|’,则内核会将模式的其余部分视为要运行的命令。核心转储将被写入该程序的标准输入,而不是文件。
# cat core_pattern 
|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e %P %I %h

core_pipe_limit

    仅当将core_pattern配置为将核心文件通过管道传输到用户空间帮助程序时(当core_pattern的第一个字符为’|'时,请参见上文),此系统变量适用。
    通过管道将内核收集到应用程序时,收集应用程序有时会从其/proc/pid目录中收集有关崩溃进程的数据,这有时很有用。为了安全地执行此操作,内核必须等待收集进程退出,以免过早删除崩溃的进程proc文件。反过来,这可能导致行为不当的用户空间收集进程仅通过永不退出就可以阻止崩溃进程的获取。该系统对此进行了防御。它定义了可以并行将多少个并行崩溃进程通过管道传输到用户空间应用程序。如果超过该值,然后通过内核日志记录那些超过该值的崩溃进程,并跳过其核心。0是一个特殊值,表示可以并行捕获无限个进程,但是不会等待(即,不能保证收集进程可以访问/proc/<crashing pid>/)。该值默认为0。

core_uses_pid

    默认的coredump文件名是“core”。通过将core_uses_pid设置为1,coredump文件名将成为core.PID。如果core_pattern不包含“%p”(默认不包含)并且设置了core_uses_pid,则.PID将附加到文件名中。

ctrl-alt-del

    当此文件中的值为0时,将捕获ctrl-alt-del并将其发送到init(1)程序以进行正常重启。但是,当该值> 0时,Linux的反应是立即重启,甚至不同步其脏缓冲区。
    注意:当某个程序(例如dosemu)处于“raw”模式时,在到达内核tty层之前,ctrl-alt-del会被该程序中断,由程序决定如何处理。

dmesg_restrict

    此切换指示是否禁止非特权用户使用dmesg命令查看来自内核日志缓冲区的消息。当dmesg_restrict设置为(0)时,没有限制。当dmesg_restrict设置为(1)时,用户必须具有CAP_SYSLOG才能使用dmesg命令。
    内核配置选项CONFIG_SECURITY_DMESG_RESTRICT设置dmesg_restrict的默认值。

domainname & hostname

    这些文件可用于设置NIS/YP域名和您的机器的主机名,其方式与命令domainname 和 hostname完全相同,即:

# echo "darkstar" > /proc/sys/kernel/hostname
# echo "mydomain" > /proc/sys/kernel/domainname

    具有与以下相同的效果:

# hostname "darkstar"
# domainname "mydomain"

    但是请注意,经典的darkstar.frop.org具有主机名“ darkstar”和DNS(Internet域名服务器)域名“ frop.org”,请勿与NIS域名或YP域名混淆。这两个域名通常是不同的。有关详细讨论,请参见hostname(1)man手册页。

hardlockup_all_cpu_backtrace

    当检测到是否要收集进一步的调试信息的硬锁定条件时,此值控制硬锁定检测器的行为。如果启用,将启动特定于架构的所有CPU堆栈转储。
0:什么都不做。这是默认行为。
1:在检测时捕获更多调试信息。

hardlockup_panic

    此参数可用于控制检测到硬锁定时内核是否死机。0-硬锁时不死机,1-硬锁时死机。也可以使用nmi_watchdog内核参数进行设置。

hotplug

    热插拔策略代理的路径。默认值为“/sbin/hotplug”。

hung_task_panic

    当检测到挂起的任务时,控制内核的行为。如果启用了CONFIG_DETECT_HUNG_TASK,则会显示此文件。
0:继续运行。这是默认行为。
1:立即死机。

hung_task_check_count

    检查的任务数的上限。如果启用了CONFIG_DETECT_HUNG_TASK,则会显示此文件。

# cat /proc/sys/kernel/hung_task_check_count 
4194304

hung_task_timeout_secs

    当处于D状态(TASK_UNINTERRUPTIBLE状态)的任务没有计划超过此值时,将报告警告。如果启用了CONFIG_DETECT_HUNG_TASK,则会显示此文件。
0:表示无限超时-未完成检查。
    可能设置的值在{0…LONG_MAX/HZ}范围内。

# cat /proc/sys/kernel/hung_task_timeout_secs 
120

hung_task_check_interval_secs

    挂起任务检查间隔。如果启用了挂起任务检查(请参见hung_task_timeout_secs),则检查将每隔hang_task_check_interval_secs秒执行一次。如果启用了CONFIG_DETECT_HUNG_TASK,则会显示此文件。
    0(默认值):表示使用hung_task_timeout_secs作为检查间隔。可能设置的值在{0…LONG_MAX / HZ}范围内。

hung_task_warnings

    报告的最大警告数。在检查间隔中,如果检测到挂起的任务,该值将减少1。当该值达到0时,将不再报告任何警告。如果启用了CONFIG_DETECT_HUNG_TASK,则会显示此文件。
-1:报告无限数量的警告。

kexec_load_disabled

    一个开关,用于控制kexec_load系统调用。该值默认为0(false:启用kexec_load),但可以设置为1(true:禁用kexec_load)。一旦为true,就不能再使用kexec,并且不能将切换设置回false。允许在禁用该系统调用之前加载kexec镜像,允许系统在不改变镜像的情况下设置(及以后使用)镜像。通常与本文后面的“modules_disabled”部分一起使用。
    kexec(kernel execution,类似于Unix或Linux的系统调用exec)是Linux内核的一种机制,它允许从当前运行的内核启动新内核。kexec会跳过由系统固件(BIOS或UEFI)执行的引导加载程序阶段和硬件初始化阶段,直接将新内核加载到主内存并立即开始执行。这避免了与完全重新启动相关的漫长时间,并且可以通过最小化停机时间来帮助系统满足高可用性要求。

kptr_restrict

    一个开关,控制是否限制通过/proc和其他接口公开内核地址。
    如果将kptr_restrict设置为0(默认值),则在打印之前对地址进行哈希处理(这等效于%p)。
    当kptr_restrict设置为(1)时,使用%pK格式说明符打印的内核指针将替换为0,除非用户具有CAP_SYSLOG并且有效的用户和组ID等于实际ID。这是因为%pK检查是在read()时间而不是open()时间完成的,所以如果在open()和read()之间提升了权限(例如通过setuid二进制文件),那么%pK不会向没有权限的用户泄漏内核指针。注意,这只是一个临时的解决方案。正确的长期解决方案是在open()时间执行权限检查。如果有人担心将内核指针值泄漏给没有权限的用户,考虑从使用%pK的文件中删除全局read权限,并使用dmesg_restrict防止在dmesg命令中使用%pK。

modules_disabled

    一个开关,指示是否允许在其他模块化内核中加载模块。此开关默认为关闭(0),但可以设置为true(1)。一旦为true,就不能加载或卸载模块,并且不能将开关设置回false。通常与“kexec_load_disabled”切换配合使用。

msg_next_id, sem_next_id, shm_next_id

    这三个开关允许为下一个分配的IPC对象指定所需的ID:分别是消息,信号量或共享内存。
    默认情况下,它们等于-1,这意味着通用分配逻辑。可能设置的值在{0…INT_MAX}范围内。
    注意:

  1. 内核不能保证,新的对象将具有所需的id。因此,如何处理id为“wrong”的对象取决于用户空间。
  2. 成功分配IPC对象后,内核会将非默认值的开关设置为-1。如果IPC对象分配系统调用失败,则该值是否保持不变或重置为-1都不能确定。

nmi_watchdog

    此参数可用于控制x86系统上的NMI看门狗(即硬锁定检测器)。
    0-禁用硬锁定检测器
    1-启用硬锁定检测器
    硬锁定检测器监控每个CPU对计时器中断的响应能力。该机制利用CPU性能计数器寄存器,这些寄存器被编程为在CPU繁忙时周期性地生成不可屏蔽中断(NMI)。因此,另一个名称是“NMI watchdog”。
    如果内核在KVM虚拟机中作为guest运行,则默认情况下NMI看门狗是禁用的。可以通过在命令行添加以下设置来覆盖默认值:

nmi_watchdog=1

    昨天发现一个小道理,人的心情和天气一样,有阴有晴,坏心情是难以避免的,但是需要刻意去调整,不能习惯性的沉溺于坏心情中。
在这里插入图片描述

参考文档

https://www.kernel.org/doc/html/latest/admin-guide/sysctl/kernel.html
https://www.ibm.com/developerworks/cn/linux/l-task-killable/index.html
https://zh.wikipedia.org/wiki/Kexec

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章