1甚纲、列舉常見的內(nèi)核參數(shù)以及參數(shù)的意義
1)如何查看當(dāng)前系統(tǒng)的所有內(nèi)核參數(shù)
sysctl -a?當(dāng)前系統(tǒng)內(nèi)核參數(shù)
2)如何修改內(nèi)核參數(shù)
echo 1 > /proc/sys/net/ipv4/ip_forward ;sysctl -p臨時(shí)修改生效双絮,重啟系統(tǒng)后失效
echo "/proc/sys/net/ipv4/ip_forward = 1 >>/etc/sysctl.conf"永久生效
3)常用參數(shù)說明:
# 內(nèi)核panic時(shí),1秒后自動(dòng)重啟
kernel.panic = 1
# 允許更多的PIDs (減少滾動(dòng)翻轉(zhuǎn)問題); may break some programs 32768
kernel.pid_max = 32768
# 內(nèi)核所允許的最大共享內(nèi)存段的大忻弧(bytes)
kernel.shmmax = 4294967296
# 在任何給定時(shí)刻,系統(tǒng)上可以使用的共享內(nèi)存的總量(pages)
kernel.shmall = 1073741824
# 設(shè)定程序core時(shí)生成的文件名格式
kernel.core_pattern = core_%e
# 當(dāng)發(fā)生oom時(shí)址芯,自動(dòng)轉(zhuǎn)換為panic
vm.panic_on_oom = 1
# 表示強(qiáng)制Linux VM最低保留多少空閑內(nèi)存(Kbytes)
vm.min_free_kbytes = 1048576
# 該值高于100喳坠,則將導(dǎo)致內(nèi)核傾向于回收directory和inode cache
vm.vfs_cache_pressure = 250
# 表示系統(tǒng)進(jìn)行交換行為的程度杈曲,數(shù)值(0-100)越高,越可能發(fā)生磁盤交換
vm.swappiness = 0
# 僅用10%做為系統(tǒng)cache
vm.dirty_ratio = 10
# 增加系統(tǒng)文件描述符限制 2^20-1
fs.file-max = 1048575
# 網(wǎng)絡(luò)層優(yōu)化
# listen()的默認(rèn)參數(shù),掛起請求的最大數(shù)量魔慷,默認(rèn)128
net.core.somaxconn = 1024
# 增加Linux自動(dòng)調(diào)整TCP緩沖區(qū)限制
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# 進(jìn)入包的最大設(shè)備隊(duì)列.默認(rèn)是300
net.core.netdev_max_backlog = 2000
# 開啟SYN洪水攻擊保護(hù)
net.ipv4.tcp_syncookies = 1
# 開啟并記錄欺騙只锭,源路由和重定向包
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# 處理無源路由的包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# 開啟反向路徑過濾
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# 確保無人能修改路由表
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# 增加系統(tǒng)IP端口限制
net.ipv4.ip_local_port_range = 9000 65533
# TTL
net.ipv4.ip_default_ttl = 64
# 增加TCP最大緩沖區(qū)大小
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 32768 8388608
# Tcp自動(dòng)窗口
net.ipv4.tcp_window_scaling = 1
# 進(jìn)入SYN包的最大請求隊(duì)列.默認(rèn)1024
net.ipv4.tcp_max_syn_backlog = 8192
# 打開TIME-WAIT套接字重用功能,對于存在大量連接的Web服務(wù)器非常有效院尔。
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 0?
# 表示是否啟用以一種比超時(shí)重發(fā)更精確的方法(請參閱 RFC 1323)來啟用對 RTT 的計(jì)算蜻展;為了實(shí)現(xiàn)更好的性能應(yīng)該啟用這個(gè)選項(xiàng)
net.ipv4.tcp_timestamps = 0
# 表示本機(jī)向外發(fā)起TCP SYN連接超時(shí)重傳的次數(shù)
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2
# 減少處于FIN-WAIT-2連接狀態(tài)的時(shí)間,使系統(tǒng)可以處理更多的連接邀摆。
net.ipv4.tcp_fin_timeout = 10?
# 減少TCP KeepAlive連接偵測的時(shí)間纵顾,使系統(tǒng)可以處理更多的連接。
# 如果某個(gè)TCP連接在idle 300秒后,內(nèi)核才發(fā)起probe.如果probe 2次(每次2秒)不成功,內(nèi)核才徹底放棄,認(rèn)為該連接已失效.
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_intvl = 2
# 系統(tǒng)所能處理不屬于任何進(jìn)程的TCP sockets最大數(shù)量
net.ipv4.tcp_max_orphans = 262144
# 系統(tǒng)同時(shí)保持TIME_WAIT套接字的最大數(shù)量栋盹,如果超過這個(gè)數(shù)字施逾,TIME_WAIT套接字將立刻被清除并打印警告信息。
net.ipv4.tcp_max_tw_buckets = 20000
# arp_table的緩存限制優(yōu)化
net.ipv4.neigh.default.gc_thresh1 = 128
net.ipv4.neigh.default.gc_thresh2 = 512
net.ipv4.neigh.default.gc_thresh3 = 4096
2、如何通過/proc查看top中展示的進(jìn)程狀態(tài)
Linux系統(tǒng)上的/proc目錄是一種文件系統(tǒng)汉额,即proc文件系統(tǒng)曹仗。與其它常見的文件系統(tǒng)不同的是,/proc是一種偽文件系統(tǒng)(也即虛擬文件系統(tǒng))蠕搜,存儲(chǔ)的是當(dāng)前內(nèi)核運(yùn)行狀態(tài)的一系列特殊文件怎茫,用戶可以通過這些文件查看有關(guān)系統(tǒng)硬件及當(dāng)前正在運(yùn)行進(jìn)程的信息,甚至可以通過更改其中某些文件來改變內(nèi)核的運(yùn)行狀態(tài)妓灌。這個(gè)目錄中包含每個(gè)進(jìn)程的狀態(tài)信息轨蛤。
top中展示的進(jìn)程狀態(tài)有:
PID列:進(jìn)程ID,為/proc目錄下的數(shù)字目錄虫埂,每個(gè)進(jìn)程的PID數(shù)字做為目錄名稱祥山。
USER :進(jìn)程的所屬用戶,為/proc/PID/status文件中的Uid這行所對應(yīng)的用戶名稱掉伏。
PR :任務(wù)的調(diào)度優(yōu)先級 , 在/proc/PID/stat文件中第18列數(shù)值
NI :表示任務(wù)的NICE值缝呕,在/proc/PID/stat文件中第19列數(shù)值
VIRT :虛擬內(nèi)存大小(KiB)斧散,任務(wù)使用的虛擬內(nèi)存總量岳颇。 它包括所有代碼,數(shù)據(jù)和共享庫以及已換出的頁面和已映射但未使用的頁面颅湘。? ? ? 在/proc/PID/statm文件中第1列數(shù)值(單位為頁)
RES :表示駐留內(nèi)存大小(KiB) 栗精,任務(wù)正在使用的非交換物理內(nèi)存闯参。在/proc/PID/statm文件中第2列數(shù)值(單位為頁)
SHR :表示共享內(nèi)存大小(KiB)悲立,可能與其他進(jìn)程共享的內(nèi)存鹿寨,在/proc/PID/statm文件中第3列數(shù)值(單位為頁)
S? : 為/proc/PID/status文件中State:這行顯示的進(jìn)程狀態(tài)
%CPU :CPU使用率,自上一次屏幕刷新以來占用的CPU時(shí)間與總CPU時(shí)間的百分比薪夕。(通過計(jì)算得到)
%MEM :內(nèi)存使用(RES)任務(wù)當(dāng)前使用的可用物理內(nèi)存份額脚草。(通過計(jì)算RES與總內(nèi)存比率得到)
TIME+ :任務(wù)自啟動(dòng)以來使用的總CPU時(shí)間,顯示百分之一秒的精度(未找到)在/proc/PID/stat文件中體現(xiàn)為兩個(gè)時(shí)間之和 :第14列該任務(wù)在用戶態(tài)運(yùn)行的時(shí)間?和第15列該任務(wù)在核心態(tài)運(yùn)行的時(shí)間
COMMAND列:為/proc/PID/comm文件內(nèi)容
3原献、分別用while馏慨、for循環(huán)檢測10.0.0.1/24網(wǎng)段存活的IP地址
#!/bin/bash
ip=1
while [ $ip -le 255 ]
do
ping? -c 1 10.0.0.${ip}? &>/dev/null
if [ $? -eq 0 ]
then
echo "10.0.0.${ip} is up"
else
echo "10.0.0.${ip} is down"
fi
ip=$(($ip+1))
done
for ip in $(seq 1 254)
do
ping? -c 1 10.0.0.${ip}? &>/dev/null
if [ $? -eq 0 ]
then
echo "10.0.0.${ip} is up"
else
echo "10.0.0.${ip} is down"
fi
done
4、說明initrd的作用
initrd 是 boot loader initialized RAM disk的縮寫姑隅,表示由 boot loader 初始化的內(nèi)存盤写隶。在 linux內(nèi)核啟動(dòng)前, boot loader 會(huì)將磁盤等存儲(chǔ)介質(zhì)中的 initrd 文件先加載到內(nèi)存讲仰,內(nèi)核啟動(dòng)時(shí)會(huì)先訪問該內(nèi)存中的 initrd 文件系統(tǒng)然后才訪問真正的根文件系統(tǒng)慕趴。啟動(dòng)過程被分為兩個(gè)過程,第一過程是執(zhí)行內(nèi)存中的 initrd 文件系統(tǒng)中的初始化文件(在Linux2.4 內(nèi)核是/linuxrc 文件,是由文件系統(tǒng)鏡像生成的冕房;在Linux2.6內(nèi)核是/init文件躏啰,是使用 cpio 工具生成),負(fù)責(zé)加載內(nèi)核訪問根文件系統(tǒng)存儲(chǔ)介質(zhì)的驅(qū)動(dòng)模塊耙册, 以及加載根文件系統(tǒng)给僵。第二過程是執(zhí)行真正的根文件系統(tǒng)中的 /sbin/init 進(jìn)程。
initrd的主要作用:
(1)使linux 發(fā)行版適應(yīng)各種不同的硬件架構(gòu)
Linux發(fā)行版在內(nèi)核中只編譯了基本的硬件驅(qū)動(dòng)觅玻,在安裝過程中通過檢測系統(tǒng)硬件想际,生成包含安裝系統(tǒng)硬件驅(qū)動(dòng)的 initrd。linux 發(fā)行版必須適應(yīng)各種不同的硬件架構(gòu)溪厘,但又不可能把所有的驅(qū)動(dòng)編譯進(jìn)內(nèi)核胡本,否則內(nèi)核會(huì)變得臃腫龐大。所以Initrd成為linux 發(fā)行版的必備部件畸悬。
(2)livecd適應(yīng)復(fù)雜的硬件環(huán)境侧甫。
livecd是一種從CD光盤中直接引導(dǎo)出一個(gè)可用的Linux系統(tǒng)。這種方式面臨更為復(fù)雜的硬件環(huán)境蹋宦,也需要使用Initrd技術(shù)
(3)usb啟動(dòng)盤必備技術(shù)
因?yàn)閡sb從驅(qū)動(dòng)加載到設(shè)備真正可用大概需要幾秒鐘時(shí)間披粟。如果將 usb 驅(qū)動(dòng)編譯進(jìn)內(nèi)核,那在內(nèi)核訪問 usb 設(shè)備時(shí)冷冗, usb 設(shè)備通常沒有初始化完畢守屉。所以改為在 initrd 中加載 usb 驅(qū)動(dòng),然后休眠幾秒中蒿辙,等待 usb設(shè)備初始化完畢后再掛載 usb 設(shè)備中的文件系統(tǒng)拇泛。
(4)實(shí)現(xiàn)個(gè)性化 bootsplash
Boot-splash通過對內(nèi)核打補(bǔ)丁來改變linux控制臺對圖像顯示的支持,通過用戶空間程式來定制啟動(dòng)logo思灌、設(shè)定控制臺背景和顯隱啟動(dòng)時(shí)的字符信息俺叭,甚至能夠支持開機(jī)畫面的動(dòng)畫顯示。在 linuxrc 腳本中可以很方便地啟用個(gè)性化 bootsplash泰偿。