linux引數之/proc/sys/kernel詳解
Modprobe/modules_disabled
前者包含一個路徑指向核心模組載入器(kernel module loader),用於載入核心模組;而後一個用於控制是否允許在系統啟動後熱插拔模組,即進行modprobe/rmmod操作,0表示不禁止;
justin_$ more modprobe
/sbin/modprobe
Linux啟動初始化時需執行/etc/rc.d/rc.sysinit,而該指令碼其中一項就是載入使用者自定義模組/etc/sysconfig/modules/*.modules
該系統在啟動時會自動載入nvram/floppy/parport/lp/snd-powermac系統
justin_$ ls
udev-stw.modules
justin_$ more udev-stw.modules
#!/bin/sh
MODULES="nvram floppy parport lp snd-powermac"
[ -f /etc/sysconfig/udev-stw ] && . /etc/sysconfig/udev-stw
for i in $MODULES ; do
modprobe $i >/dev/null 2>&1
done
而執行完rc.sysinit後,則要啟動外掛模組/etc/modprobe.conf,該檔案用來修改模組的部分選項配置
justin_$ more /etc/modprobe.conf
alias scsi_hostadapter shpchp
alias bond0 bonding
alias eth0 bnx2
alias eth1 bnx2
alias eth2 bnx2
alias eth3 bnx2
alias eth4 be2net
alias eth5 be2net
alias scsi_hostadapter1 cciss
alias scsi_hostadapter2 ata_piix
alias scsi_hostadapter3 qla2xxx
alias net-pf-10 off
alias ipv6 off
options ipv6 disable=1
options bond0 mode=balance-alb miimon=100
系統支援的所有模組位於/lib/modules/`uname -r`/kernel,
threads-max
系統允許的最大執行緒數
justin_$ more threads-max
774028
Linux無法直接控制單個程式可擁有的執行緒數,但有參考公式max = VM/stack_size,預設stack為8k,可透過降低stack大小或增加虛擬記憶體來調大每個程式可擁有的最大執行緒數;
對於支援多執行緒的程式如Java,有可能會遇到一個程式無法建立更多執行緒的情形,其原因多種多樣,而OS端可能由此引數造成;
pid_max
系統最大pid值,在大型系統裡可適當調大
justin_$ more pid_max
32768
hung_task_panic/ softlockup_thresh
linux下每個CPU都有一個看門狗(watchdog)程式,可透過ps -ef | grep -i watchdog檢視,該程式每秒獲取其CPU的當前時間戳並儲存於per-CPU,而timer interrupt()會呼叫softlock_tick(),該函式比較CPU當前時間與per-CPU儲存的時間,若差值大於softlockup_thresh則系統產生一條告警資訊,
BUG: soft lockup - CPU#1 stuck for 15s! [swapper:0] Pid: 0
如遇到此情形可配置kdump自動產生vcore跟蹤檔案;
預設情況下,當出現soft lockup時系統僅產生告警資訊,而將hung_task_panic設定為1時系統會panic;
justin_$ more hung_task_panic
0
justin_$ more softlockup_thresh
60
justin_$ ps -ef | grep -i watchdog
root 5 2 0 2012 ? 00:00:00 [watchdog/0]
root 8 2 0 2012 ? 00:00:00 [watchdog/1]
root 11 2 0 2012 ? 00:00:00 [watchdog/2]
root 14 2 0 2012 ? 00:00:00 [watchdog/3]
root 17 2 0 2012 ? 00:00:00 [watchdog/4]
root 20 2 0 2012 ? 00:00:00 [watchdog/5]
root 23 2 0 2012 ? 00:00:00 [watchdog/6]
root 26 2 0 2012 ? 00:00:00 [watchdog/7]
root 29 2 0 2012 ? 00:00:00 [watchdog/8]
root 32 2 0 2012 ? 00:00:00 [watchdog/9]
root 35 2 0 2012 ? 00:00:00 [watchdog/10]
root 38 2 0 2012 ? 00:00:00 [watchdog/11]
root 41 2 0 2012 ? 00:00:00 [watchdog/12]
root 44 2 0 2012 ? 00:00:00 [watchdog/13]
root 47 2 0 2012 ? 00:00:00 [watchdog/14]
root 50 2 0 2012 ? 00:00:00 [watchdog/15]
root 53 2 0 2012 ? 00:00:00 [watchdog/16]
root 56 2 0 2012 ? 00:00:00 [watchdog/17]
root 59 2 0 2012 ? 00:00:00 [watchdog/18]
root 62 2 0 2012 ? 00:00:00 [watchdog/19]
root 65 2 0 2012 ? 00:00:00 [watchdog/20]
root 68 2 0 2012 ? 00:00:00 [watchdog/21]
root 71 2 0 2012 ? 00:00:00 [watchdog/22]
root 74 2 0 2012 ? 00:00:00 [watchdog/23]
justin_$ /sbin/modinfo softdog
filename: /lib/modules/2.6.32-100.26.2.el5/kernel/drivers/watchdog/softdog.ko
alias: char-major-10-130
license: GPL
description: Software Watchdog Device Driver
author: Alan Cox
srcversion: C7E767DB59D650F969C7438
depends:
vermagic: 2.6.32-100.26.2.el5 SMP mod_unload modversions
parm: soft_margin:Watchdog soft_margin in seconds. (0 < soft_margin < 65536, default=60) (int)
parm: nowayout:Watchdog cannot be stopped once started (default=0) (int)
parm: soft_noboot:Softdog action, set to 1 to ignore reboots, 0 to reboot (default depends on ONLY_TESTING) (int)
http://h10025.www1.hp.com/ewfrf/wc/document?cc=ca&dlc=en&docname=c02675677&lc=en
http://damntechnology.blogspot.co.uk/2010/04/linux-crash-debug-tips-i-have-soft.html
http://www.mjmwired.net/kernel/Documentation/lockup-watchdogs.txt
http://blog.kreyolys.com/2011/03/17/no-panic-its-just-a-kernel-panic/
nmi_watchdog
NMI watchdog(non maskable interrupt)又稱硬體watchdog,用於檢測OS是否hang,系統硬體定期產生一個NMI,而每個NMI呼叫核心檢視其中斷數量,如果一段時間(10秒)後其數量沒有顯著增長,則判定系統已經hung,接下來啟用panic機制即重啟OS,如果開啟了Kdump還會產生crash dump檔案;
APIC(advanced programmable interrupt controller):高階可程式設計中斷控制器,預設內建於各個x86CPU中,在SMP中用於CPU間的中斷;比較高檔的主機板配備有IO-APIC,負責收集硬體裝置的中斷請求並轉發給APIC;
要使用NMI Watchdog必須先啟用APIC,SMP核心預設啟動
該引數有2個選項:0不啟用;1/2啟用,有的硬體支援1有的支援2;
當前系統便沒有啟用;
justin_$ more nmi_watchdog
0
justin_$ grep NMI /proc/interrupts
NMI: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Non-maskable interrupts
小結:
當watchdog啟動後,如果/dev/watchdog一定時間間隔內沒有被更新,則判定系統hang並根據相應引數決定是否重啟
Watchdog有兩種:軟體/硬體模式,前者基於hrtimer而後者基於perf子系統,兩者不能同時執行
Panic
當核心panic時是否重啟,0不重啟,非0值表示N秒後重啟
justin_$ more panic
0
panic_on_io_nmi
當核心收到因I/O錯誤導致的NMI時是否panic
0表示不
justin_$ more panic_on_io_nmi
0
panic_on_oops
核心oops不同於panic,後者會導致OS重啟,而裝置驅動引發的oops通常不會如此;
Oops是由於核心引用了無效指標;發生於使用者空間程式通常產生一個段錯誤segfault,而使用者態程式自身無法恢復;發生於核心空間時則稱作oops;
由於X86架構限制,當linux系統panic時 預設無法儲存crash dump,因為此時核心不工作無法儲存當前記憶體資訊,SPARC架構則可完成,而RedHat分別開發了NetDump/Diskdump從而做到此功能;
justin_$ more panic_on_oops
1
如下是一段oops資訊,oops號碼很重要,EIP顯示了程式碼段和當前正在執行的指令集地址
Unable to handle kernel NULL pointer dereference at virtual address 00000014
*pde = 00000000
Oops: 0000
CPU: 0
EIP: 0010:[]
EFLAGS: 00210213
eax: 00000000 ebx: c6155c6c ecx: 00000038 edx: 00000000
esi: c672f000 edi: c672f07c ebp: 00000004 esp: c6155b0c
ds: 0018 es: 0018 ss: 0018
Process tar (pid: 2293, stackpage=c6155000)
Stack: c672f000 c672f07c 00000000 00000038 00000060 00000000 c6d7d2a0
c6c79018
00000001 c6155c6c 00000000 c6d7d2a0 c017eb4f c6155c6c 00000000
00000098
c017fc44 c672f000 00000084 00001020 00001000 c7129028 00000038
00000069
Call Trace: [] [] [] [] []
[] []
[] [] [] [] []
[] []
Code: 8b 40 14 ff d0 89 c2 8b 06 83 c4 10 01 c2 89 16 8b 83 8c 01
/proc/sys/kernel/slow-work
其實slow-work是個執行緒池機制,用於執行耗時相對較長的任務;
Linux中有slow-work的資料結構;
使用前需要呼叫int ret = slow_work_register_user();註冊;
justin_$ ls
max-threads min-threads vslow-percentage
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-753890/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【kernel】從 /proc/sys/net/ipv4/ip_forward 引數看如何玩轉 procfs 核心引數Forward
- linux 程式引數檔案 /proc/pid/cmdline 簡介Linux
- Linux網路卡配置檔案 引數詳解Linux
- 核心引數kernel.shmall和kernel.shmmaxHMM
- Bootloader傳引數到Kernelboot
- linux下/proc/meminfo解讀Linux
- OGG引數詳解
- ajax 引數詳解
- percona-tools 之 pt-kill 引數詳解
- java 之泛型與可變引數詳解Java泛型
- Linux 核心引數 arp_ignore & arp_announce 詳解Linux
- lsblk命令引數詳解
- tar命令引數詳解
- Dockerfile - 引數與詳解Docker
- 函式引數詳解函式
- Flink Checkpoint 引數詳解
- [20210826]核心引數kernel.sem.txt
- 【Linux】bash: /proc/sys/net/ipv4/ip_forward: 許可權不夠LinuxForward
- kernel_mktime() 詳解 —— Linux-0.11 學習筆記(四)Linux筆記
- Linux開機流程詳解:BIOS->MBR->GRUB->KernelLinuxiOS
- Nginx編譯引數大全 configure引數中文詳解Nginx編譯
- Oracle GoldenGate常用引數詳解OracleGo
- oracle rac 核心引數詳解Oracle
- 常用的 wget 引數詳解wget
- variables_order引數詳解
- Prometheus hashmod 配置引數詳解Prometheus
- pg_settings引數詳解
- SQL*Plus Set引數詳解SQL
- find 命令的引數詳解
- linux之kill命令詳解Linux
- 詳解Linux bash變數Linux變數
- Linux下nginx編譯安裝教程和編譯引數詳解LinuxNginx編譯
- Pandas read_csv 引數詳解
- Nginx 配置檔案引數詳解Nginx
- Redis日常運維-引數詳解Redis運維
- expdp/impdp 詳細引數解釋
- ansible.cfg 配置引數詳解
- curl常用引數詳解及示例
- JQuery中$.ajax()方法引數詳解jQuery