導航:首頁 > 程序命令 > sysctl命令

sysctl命令

發布時間:2024-12-20 19:29:41

㈠ 一般優化linux的內核,需要優化什麼參數

作為高性能WEB伺服器,只調整Nginx本身的參數是不行的,因為Nginx服務依賴於高性能的操作系統。

以下為常見的幾個Linux內核參數優化方法。

㈡ 如何設置Sysctl.conf用以提高Linux的性能

Sysctl是一個允許您改變正在運行中的Linux系統的介面。它包含一些 TCP/IP 堆棧和虛擬內存系統的高級選項, 這可以讓有經驗的管理員提高引人注目的系統性能。用sysctl可以讀取設置超過五百個系統變數。基於這點,sysctl(8) 提供兩個功能:讀取和修改系統設置。
查看所有可讀變數:
% sysctl -a
讀一個指定的變數,例如 kern.maxproc:

% sysctl kern.maxproc kern.maxproc: 1044
要設置一個指定的變數,直接用 variable=value 這樣的語法:
# sysctl kern.maxfiles=5000
kern.maxfiles: 2088 -> 5000
您可以使用sysctl修改系統變數,也可以通過編輯sysctl.conf文件來修改系統變數。sysctl.conf 看起來很像 rc.conf。它用 variable=value 的形式來設定值。指定的值在系統進入多用戶模式之後被設定。並不是所有的變數都可以在這個模式下設定。
sysctl 變數的設置通常是字元串、數字或者布爾型。 (布爾型用 1 來表示』yes』,用 0 來表示』no』)。
sysctl -w kernel.sysrq=0
sysctl -w kernel.core_uses_pid=1
sysctl -w net.ipv4.conf.default.accept_redirects=0
sysctl -w net.ipv4.conf.default.accept_source_route=0
sysctl -w net.ipv4.conf.default.rp_filter=1
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_synack_retries=2
sysctl -w net.ipv4.tcp_keepalive_time=3600
sysctl -w net.ipv4.tcp_window_scaling=1
sysctl -w net.ipv4.tcp_sack=1
配置sysctl
編輯此文件:
vi /etc/sysctl.conf
如果希望屏蔽別人 ping 你的主機,則加入以下代碼:

# Disable ping requests
net.ipv4.icmp_echo_ignore_all = 1
編輯完成後,請執行以下命令使變動立即生效:
/sbin/sysctl -p
/sbin/sysctl -w net.ipv4.route.flush=1

###################
所有rfc相關的選項都是默認啟用的,因此網上的那些還自己寫rfc支持的都可以扔掉了:)
###############################

net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
#############################
通過源路由,攻擊者可以嘗試到達內部IP地址 --包括RFC1918中的地址,所以
不接受源路由信息包可以防止你的內部網路被探測。
#################################

net.inet.tcp.drop_synfin=1
###################################
安全參數,編譯內核的時候加了options TCP_DROP_SYNFIN才可以用,可以阻止某些OS探測。
##################################

kern.maxvnodes=8446
#################http://www.bsdlover.cn#########
vnode 是對文件或目錄的一種內部表達。 因此, 增加可以被操作系統利用的 vnode 數量將降低磁碟的 I/O。
一般而言, 這是由操作系統自行完成的,也不需要加以修改。但在某些時候磁碟 I/O 會成為瓶頸,
而系統的 vnode 不足, 則這一配置應被增加。此時需要考慮是非活躍和空閑內存的數量。
要查看當前在用的 vnode 數量:
# sysctl vfs.numvnodes
vfs.numvnodes: 91349
要查看最大可用的 vnode 數量:
# sysctl kern.maxvnodes
kern.maxvnodes: 100000
如果當前的 vnode 用量接近最大值,則將 kern.maxvnodes 值增大 1,000 可能是個好主意。
您應繼續查看 vfs.numvnodes 的數值, 如果它再次攀升到接近最大值的程度,
仍需繼續提高 kern.maxvnodes。 在 top(1) 中顯示的內存用量應有顯著變化,
更多內存會處於活躍 (active) 狀態。
####################################

kern.maxproc: 964
#################http://www.bsdlover.cn#########
Maximum number of processes
####################################
kern.maxprocperuid: 867
#################http://www.bsdlover.cn#########
Maximum processes allowed per userid
####################################
因為我的maxusers設置的是256,20+16*maxusers=4116。
maxprocperuid至少要比maxproc少1,因為init(8) 這個系統程序絕對要保持在運作狀態。
我給它設置的2068。

kern.maxfiles: 1928
#################http://www.bsdlover.cn#########
系統中支持最多同時開啟的文件數量,如果你在運行資料庫或大的很吃描述符的進程,那麼應該設置在20000以上,
比如kde這樣的桌面環境,它同時要用的文件非常多。
一般推薦設置為32768或者65536。
####################################

kern.argmax: 262144
#################http://www.bsdlover.cn#########
maximum number of bytes (or characters) in an argument list.
命令行下最多支持的參數,比如你在用find命令來批量刪除一些文件的時候
find . -name "*.old" -delete,如果文件數超過了這個數字,那麼會提示你數字太多的。
可以利用find . -name "*.old" -ok rm {} \;來刪除。
默認的參數已經足夠多了,因此不建議再做修改。
####################################

kern.securelevel: -1
#################http://www.bsdlover.cn#########
-1:這是系統默認級別,沒有提供任何內核的保護錯誤;
0:基本上作用不多,當你的系統剛啟動就是0級別的,當進入多用戶模式的時候就自動變成1級了。
1:在這個級別上,有如下幾個限制:
a. 不能通過kldload或者klnload載入或者卸載可載入內核模塊;
b. 應用程序不能通過/dev/mem或者/dev/kmem直接寫內存;
c. 不能直接往已經裝在(mounted)的磁碟寫東西,也就是不能格式化磁碟,但是可以通過標準的內核介面執行寫操作;
d. 不能啟動X-windows,同時不能使用chflags來修改文件屬性;
2:在 1 級別的基礎上還不能寫沒裝載的磁碟,而且不能在1秒之內製造多次警告,這個是防止DoS控制台的;
3:在 2 級別的級別上不允許修改IPFW防火牆的規則。
如果你已經裝了防火牆,並且把規則設好了,不輕易改動,那麼建議使用3級別,如果你沒有裝防火牆,而且還准備裝防火牆的話,不建議使用。
我們這里推薦使用 2 級別,能夠避免比較多對內核攻擊。
####################################

kern.maxfilesperproc: 1735
#################http://www.bsdlover.cn#########
每個進程能夠同時打開的最大文件數量,網上很多資料寫的是32768
除非用非同步I/O或大量線程,打開這么多的文件恐怕是不太正常的。
我個人建議不做修改,保留默認。
####################################

kern.ipc.maxsockbuf: 262144
#################http://www.bsdlover.cn#########
最大的套接字緩沖區,網上有建議設置為2097152(2M)、8388608(8M)的。
我個人倒是建議不做修改,保持默認的256K即可,緩沖區大了可能造成碎片、阻塞或者丟包。
####################################

kern.ipc.somaxconn: 128
#################http://www.bsdlover.cn#########
最大的等待連接完成的套接字隊列大小,即並發連接數。
高負載伺服器和受到Dos攻擊的系統也許會因為這個隊列被塞滿而不能提供正常服務。
默認為128,推薦在1024-4096之間,根據機器和實際情況需要改動,數字越大佔用內存也越大。
####################################

kern.ipc.nmbclusters: 4800
#################http://www.bsdlover.cn#########
這個值用來調整系統在開機後所要分配給網路 mbufs 的 cluster 數量,
由於每個 cluster 大小為 2K,所以當這個值為 1024 時,也是會用到 2MB 的核心內存空間。
假設我們的網頁同時約有 1000 個聯機,而 TCP 傳送及接收的暫存區大小都是 16K,
則最糟的情況下,我們會需要 (16K+16K) * 1024,也就是 32MB 的空間,
然而所需的 mbufs 大概是這個空間的二倍,也就是 64MB,所以所需的 cluster 數量為 64MB/2K,也就是 32768。
對於內存有限的機器,建議值是 1024 到 4096 之間,而當擁有海量存儲器空間時,我們可以將它設定為 4096 到 32768 之間。
我們可以使用 netstat 這個指令並加上參數 -m 來查看目前所使用的 mbufs 數量。
要修改這個值必須在一開機就修改,所以只能在 /boot/loader.conf 中加入修改的設定
kern.ipc.nmbclusters=32768
####################################

kern.ipc.shmmax: 33554432
#################http://www.bsdlover.cn#########
共享內存和信號燈("System VIPC")如果這些過小的話,有些大型的軟體將無法啟動
安裝xine和mplayer提示的設置為67108864,即64M,
如果內存多的話,可以設置為134217728,即128M
####################################

kern.ipc.shmall: 8192
#################http://www.bsdlover.cn#########
共享內存和信號燈("System VIPC")如果這些過小的話,有些大型的軟體將無法啟動
安裝xine和mplayer提示的設置為32768
####################################

kern.ipc.shm_use_phys: 0
#################http://www.bsdlover.cn#########
如果我們將它設成 1,則所有 System V 共享內存 (share memory,一種程序間溝通的方式)部份都會被留在實體的內存 (physical memory) 中,
而不會被放到硬碟上的 swap 空間。我們知道物理內存的存取速度比硬碟快許多,而當物理內存空間不足時,
部份數據會被放到虛擬的內存上,從物理內存和虛擬內存之間移轉的動作就叫作 swap。如果時常做 swap 的動作,
則需要一直對硬碟作 I/O,速度會很慢。因此,如果我們有大量的程序 (數百個) 需要共同分享一個小的共享內存空間,
或者是共享內存空間很大時,我們可以將這個值打開。
這一項,我個人建議不做修改,除非你的內存非常大。
####################################

kern.ipc.shm_allow_removed: 0
#################http://www.bsdlover.cn#########
共享內存是否允許移除?這項似乎是在fb下裝vmware需要設置為1的,否則會有載入SVGA出錯的提示
作為伺服器,這項不動也罷。
####################################

kern.ipc.numopensockets: 12
#################http://www.bsdlover.cn#########
已經開啟的socket數目,可以在最繁忙的時候看看它是多少,然後就可以知道maxsockets應該設置成多少了。
####################################

kern.ipc.maxsockets: 1928
#################http://www.bsdlover.cn#########
這是用來設定系統最大可以開啟的 socket 數目。如果您的伺服器會提供大量的 FTP 服務,
而且常快速的傳輸一些小檔案,您也許會發現常傳輸到一半就中斷。因為 FTP 在傳輸檔案時,
每一個檔案都必須開啟一個 socket 來傳輸,但關閉 socket 需要一段時間,如果傳輸速度很快,
而檔案又多,則同一時間所開啟的 socket 會超過原本系統所許可的值,這時我們就必須把這個值調大一點。
除了 FTP 外,也許有其它網路程序也會有這種問題。
然而,這個值必須在系統一開機就設定好,所以如果要修改這項設定,我們必須修改 /boot/loader.conf 才行
kern.ipc.maxsockets="16424"
####################################

kern.ipc.nsfbufs: 1456
#################http://www.bsdlover.cn#########
經常使用 sendfile(2) 系統調用的繁忙的伺服器,
有必要通過 NSFBUFS 內核選項或者在 /boot/loader.conf (查看 loader(8) 以獲得更多細節) 中設置它的值來調節 sendfile(2) 緩存數量。
這個參數需要調節的普通原因是在進程中看到 sfbufa 狀態。sysctl kern.ipc.nsfbufs 變數在內核配置變數中是只讀的。
這個參數是由 kern.maxusers 決定的,然而它可能有必要因此而調整。
在/boot/loader.conf里加入
kern.ipc.nsfbufs="2496"
####################################

kern.maxusers: 59
#################http://www.bsdlover.cn#########
maxusers 的值決定了處理程序所容許的最大值,20+16*maxusers 就是你將得到的所容許處理程序。
系統一開機就必須要有 18 個處理程序 (process),即便是簡單的執行指令 man 又會產生 9 個 process,
所以將這個值設為 64 應該是一個合理的數目。
如果你的系統會出現 proc table full 的訊息的話,可以就把它設大一點,例如 128。
除非您的系統會需要同時開啟很多檔案,否則請不要設定超過 256。

可以在 /boot/loader.conf 中加入該選項的設定,
kern.maxusers=256
####################################

kern.coremp: 1
#################http://www.bsdlover.cn#########
如果設置為0,則程序異常退出時不會生成core文件,作為伺服器,不建議這樣。
####################################

kern.corefile: %N.core
#################http://www.bsdlover.cn#########
可設置為kern.corefile="/data/coremp/%U-%P-%N.core"
其中 %U是UID,%P是進程ID,%N是進程名,當然/data/coremp必須是一個實際存在的目錄
####################################

vm.swap_idle_enabled: 0
vm.swap_idle_threshold1: 2
vm.swap_idle_threshold2: 10
#########################
在有很多用戶進入、離開系統和有很多空閑進程的大的多用戶系統中很有用。
可以讓進程更快地進入內存,但它會吃掉更多的交換和磁碟帶寬。
系統默認的頁面調度演算法已經很好了,最好不要更改。
########################

vfs.ufs.dirhash_maxmem: 2097152
#########################
默認的dirhash最大內存,默認2M
增加它有助於改善單目錄超過100K個文件時的反復讀目錄時的性能
建議修改為33554432(32M)
#############################

vfs.vmiodirenable: 1
#################
這個變數控制目錄是否被系統緩存。大多數目錄是小的,在系統中只使用單個片斷(典型的是1K)並且在緩存中使用的更小 (典型的是512位元組)。
當這個變數設置為關閉 (0) 時,緩存器僅僅緩存固定數量的目錄,即使您有很大的內存。
而將其開啟 (設置為1) 時,則允許緩存器用 VM 頁面緩存來緩存這些目錄,讓所有可用內存來緩存目錄。
不利的是最小的用來緩存目錄的核心內存是大於 512 位元組的物理頁面大小(通常是 4k)。
我們建議如果您在運行任何操作大量文件的程序時保持這個選項打開的默認值。
這些服務包括 web 緩存,大容量郵件系統和新聞系統。
盡管可能會浪費一些內存,但打開這個選項通常不會降低性能。但還是應該檢驗一下。
####################

vfs.hirunningspace: 1048576
############################
這個值決定了系統可以將多少數據放在寫入儲存設備的等候區。通常使用默認值即可,
但當我們有多顆硬碟時,我們可以將它調大為 4MB 或 5MB。
注意這個設置成很高的值(超過緩存器的寫極限)會導致壞的性能。
不要盲目的把它設置太高!高的數值會導致同時發生的讀操作的遲延。
#############################

㈢ 為啥我的sysctl文件不能修改!

原因:帶有i屬性的文件是不能修改的。

1、首先執行chmod 777 /etc/sysctl.conf時會報出錯誤:chmod: changing permissions of '/etc/sysctl.conf': Operation not permitted。

㈣ Linux使用sysctl -tl: command not found是怎麼回事

當你在Linux終端中嘗試使用"sysctl -tl"命令時,遇到"command not found"的錯誤,這意味著shell未能在預設的搜索路徑中找到sysctl命令。搜索路徑,通常由冒號分隔的目錄列表組成,可以通過運行"echo $PATH"命令來查看。當輸入命令後,shell會根據這個路徑順序查找,如果是內置命令,則直接執行,外部命令則需逐個目錄查找,直到找到為止。如果在路徑中找不到,就會顯示相應的錯誤提示。

搜索路徑的作用是指導shell如何尋找你輸入的外部命令,例如,如果你直接輸入"a.out"而未指定路徑,shell會搜索PATH中的目錄,如果當前目錄不在路徑中,就會出現"command not found"。如果你在子目錄中運行"a.out",不加"./"前綴,是因為shell默認查找的是父目錄,而非當前目錄,這就會導致找不到命令。

解決此問題的方法有兩個:一是確保當前目錄已添加到PATH中,這可以通過設置環境變數來實現;二是將sysctl命令所在的目錄手動添加到PATH,或者直接復制到PATH中的任一位置,這樣shell就能找到並執行命令了。

閱讀全文

與sysctl命令相關的資料

熱點內容
找不到網頁上原代碼加密視頻 瀏覽:132
禹鼎遙控器編程線怎麼接線 瀏覽:82
java窗體編程 瀏覽:278
knn演算法如何減少計算次數 瀏覽:246
阿里雲伺服器地區價格 瀏覽:138
輕觸app顯示卸載功能怎麼關閉 瀏覽:474
程序員校招面試 瀏覽:381
u啟動盤開源碼 瀏覽:824
電腦不能解壓rar嗎 瀏覽:100
下面關於ssh命令正確的是 瀏覽:18
我的世界命令方塊怎麼得視頻 瀏覽:486
金蝶伺服器ip地址變更怎麼重新連接 瀏覽:256
安卓vr有什麼好的游戲 瀏覽:606
stc單片機高電平檢測 瀏覽:708
如何學單片機 瀏覽:765
圖片像素壓縮軟體 瀏覽:573
面試自我介紹程序員 瀏覽:296
為什麼叫單片機 瀏覽:600
如何為伺服器增加第三個ip 瀏覽:713
閱讀pdf的平板 瀏覽:885