/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

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