Liunx 系统调优
生活随笔
收集整理的這篇文章主要介紹了
Liunx 系统调优
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Sysctl命令用來配置與顯示在/proc/sys目錄中的內核參數.如果想使參數長期保存,可以通過編輯/etc/sysctl.conf文件來實現。
命令格式: sysctl [-n] [-e] -w ?# 臨時改變某個指定參數的值,如sysctl -w net.ipv4.ip_forward=1 -a? ?# 顯示所有的系統參數 -p? ?# 從指定的文件加載系統參數,默認從/etc/sysctl.conf 文件中加載 # echo 1 > /proc/sys/net/ipv4/ip_forward # sysctl -w net.ipv4.ip_forward=1 以上兩種方法都可能立即開啟路由功能,臨時修改,重啟失效一丶CPU和中斷調優
SMP(symmetrical mulit-processing):對稱多處理器,在對稱多處理器系統中,所有處理器的地位都是相同的,所有的資源,特別是存儲器、中斷及I/O空間,都具有相同的可訪問性,消除了結構上的障礙 NUMA(Non Uniform Memory Access Architecture):非一致性內存訪問,是一種用于多處理器的電腦記憶體設計,內存訪問時間取決于處理器的內存位置。 在NUMA下,處理器訪問它自己的本地存儲器的速度比非本地存儲器(存儲器的地方到另一個處理器之間共享的處理器或存儲器)快一些 CPU親緣性:分為軟親緣性和硬親緣性,Linux 內核進程調度器天生就具有CPU 軟親緣性(soft affinity),這意味著進程通常不會在處理器之間頻繁遷移。但不代表不會進行小范圍的遷移。CPU 硬親緣性是指通過Linux提供的相關CPU親緣性設置接口,顯示的指定某個進程固定的某個處理器上運行??梢酝ㄟ^taskset或者glibc庫中的sched_getaffinity接口設置。 IO設備和進程之間的數據傳送方式主要有4種,(程序直接控制方式、中斷控制方式、DMA方式和通道方式)。對于Linux系統而言第2,3種IO控制方式是主流采用的,通道控制方式雖然更高效,但是由于需要添加專門的通道協處理器,故而成本較高,常用于專用場景- 程序控制方式:又被稱為“忙等”模式,即當要在內存和IO設備之間進行信息傳輸時,由CPU向相應的設備發出命令,由設備控制器控制IO設備進行實際操作。在IO設備工作時,CPU執行一段循環測試程序,不斷測試IO設備的完成狀況,根據完成狀況決定下一步操作。在此期間,CPU只能等待IO設備完成所有的數據傳輸,CPU和設備只能串行工作,并不能進行其他操作。?
- 中斷控制方式:CPU向相應的IO設備發出讀寫命令后,不必等待而轉向執行其他進程,由設備控制器控制IO設備完成所有的實際操作,然后當前進程放棄對CPU的占用,進入休眠等待狀態。IO設備完成單次數據傳輸并會主動出發一次中斷信號(單次傳輸數據量是設備控制器的數據緩沖寄存器的容量,如磁盤單次讀取容量便是一個扇區,如果一次要讀入一個磁盤塊的大小數據,則需要中斷2次…),通知CPU本次IO完成,然后CPU會將控制權轉向中斷處理程序,讓其對此情況作出相應反應
- DMA(direct memory access)工作方式:當某一進程提出一次單次大批量數據請求,則首先CPU規劃好這批數據在進程的虛擬空間的位置,并事先完成虛擬內存到實際內存的映射關系(虛擬內存那端肯定是連續的堆空間,而實際內存這段操作系統一般也會盡可能在DMA區中劃分出連續的實際內存空間以匹配),然后CPU將規劃好的內存起始地址和size發送給DMA控制器中的內存地址寄存器和size計數器,然后由DMA控制器驅動硬盤驅動程序完成本次全部的IO請求,直到輸入完成后,DMA控制器才發出中斷信號告知CPU激活中斷程序完成中斷處理。
- 通道控制方式便是引入一個功能較為簡單的協處理機,它可以接受CPU發來的IO命令,通道作為處理機也有自己的一套指令集,可以獨立執行通道程序,對IO設備進行控制。通道的引入CPU可以專心計算,而把IO任務完全交給通道完成,二者各負其責。二者分工使得計算和IO操作可以并行,即CPU和設備并行工作,從而提高資源的利用率
二丶進程
知識簡介: 進程分為實時進程和普通進程,實時進程具有一定程度上的緊迫性,要求對外部事件做出非常快的響應;而普通進程則沒有這種限制。所以通常,實時進程要比普通進程優先運行 實時進程的優先級為1-99,越大優先級越高,調度策略如下 1,SCHED_FIFO 實時調度策略,先到先服務,一直運行直到有更高優先級任務到達或自己放棄 2,SCHED_RR 實時調度策略,時間片輪轉,進程的時間片用完,系統將重新分配時間片,并置于就緒隊列尾 普通進程的優先級為100-139,越小優先級越高,調度策略如下 1,SCHED_OTHER?分時調度策略,當實時進程準備就緒后,如果當前cpu正在運行非實時進程,則實時進程立即搶占非實時進程 調優 nice -n num CMD #調整nice值,-n范圍-20到19,越小越容易執行,內核 會自動調整 renice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]- -p pid pid 的,例如:renice +15 785
- -g pgrp 組的
- -u user 用戶的
- ZONE_DMA,0-16M,直接內存訪問。該區域的物理頁面專門供I/O設備的DMA使用。之所以需要單獨管理DMA的物理頁面,是因為DMA使用物理地址訪問內存,不經過MMU,并且需要連續的緩沖區,所以為了能夠提供物理上連續的緩沖區,必須從物理地址空間專門劃分一段區域用于DMA。這部分的數據可以直接訪問,目的在于加快磁盤和內存之間交換數據,數據不需要經過總線流向CPU的PC寄存器,再流向物理內存,直接通過總線就可到達物理內存。?
- ZONR_NORMAL,16M-896M,內核最重要的部分,該區域的物理頁面是內核能夠直接使用的。?
- ZONE_HIGHMEM,896M-結束,共128M,高端內存。主要用于32位Linux系統中,映射高于1G的物理內存。64位不需要高端內存。?
- 0:默認設置,內核執行啟發式的過量使用處理
- 1:內核執行總是過量使用處理,使用這個值會增大內存超載的可能性
- 2:設置內存使用量等于swap的大小+RAM*overcommit_ratio的值。如果希望減小內存的過度使用,這個值是最安全的
- 0,內核會殺死內存占用過多的進程。通常殺死內存占用最多的進程,系統就會恢復。
- 1,在發生OOM時,內核會panic。然而,如果一個進程通過內存策略或進程綁定限制了可以使用的節點,并且這些節點的內存已經耗盡,oom-killer可能會殺死一個進程來釋放內存。在這種情況下,內核不會panic,因為其他節點的內存可能還有空閑,這意味著整個系統的內存狀況還沒有處于崩潰狀態。
- 2,在發生OOM時總是會強制panic,即使在上面討論的情況下也一樣。即使在memory cgroup限制下發生的OOM,整個系統也會panic。
- ilde:空閑磁盤調度,該調度策略是在當前系統沒有其他進程需要進行磁盤IO時,才能進行磁盤;因此該策略對當前系統的影響基本為0;當然,該調度策略不能帶有任何優先級參數;目前,普通用戶是可以使用該調度策略(自從內核2.6.25開始)。
- Best effort:是缺省的磁盤IO調度策略;(1)該調度策略可以指定優先級參數(范圍是0~7,數值越小,優先級越高);(2)針對處于同一優先級的程序將采round-robin方式;(3)對于best effort調度策略,8個優先級等級可以說明在給定的一個調度窗口中時間片的大小。(4)目前,普調用戶(非root用戶)是可以使用該調度策略。(5)在內核2.6.26之前,沒有設置IO優先級的進程會使用“none”作為調度策略,但是這種策略使得進程看起來像是采用了best effort調度策略,因為其優先級是通過關于cpu nice有關的公式計算得到的:io_priority = (cpu_nice + 20) /5。(6)在內核2.6.26之后,如果當前系統使用的是CFQ調度器,那么如果進程沒有設置IO優先級級別,將采用與內核2.6.26之前版本同樣的方式,推到出io優先級級別。
- Real time:實時調度策略,如果設置了該磁盤IO調度策略,則立即訪問磁盤,不管系統中其他進程是否有IO。因此使用實時調度策略,需要注意的是,該訪問策略可能會使得其他進程處于等待狀態
| 參數(路徑+文件) | 描述 | 默認值 | 優化值 |
| /proc/sys/net/core/rmem_default | 默認的TCP數據接收窗口大小(字節)。 | 229376 | 256960 |
| /proc/sys/net/core/rmem_max | 最大的TCP數據接收窗口(字節)。 | 131071 | 513920 |
| /proc/sys/net/core/wmem_default | 默認的TCP數據發送窗口大小(字節)。 | 229376 | 256960 |
| /proc/sys/net/core/wmem_max | 最大的TCP數據發送窗口(字節)。 | 131071 | 513920 |
| /proc/sys/net/core/netdev_max_backlog | 在每個網絡接口接收數據包的速率比內核處理這些包的速率快時,允許送到隊列的數據包的最大數目。 | 1000 | 2000 |
| /proc/sys/net/core/somaxconn | 定義了系統中每一個端口最大的監聽隊列的長度,這是個全局的參數。 | 128 | 2048 |
| /proc/sys/net/core/optmem_max | 表示每個套接字所允許的最大緩沖區的大小。 | 20480 | 81920 |
| /proc/sys/net/ipv4/tcp_mem | 確定TCP棧應該如何反映內存使用,每個值的單位都是內存頁(通常是4KB)。第一個值是內存使用的下限;第二個值是內存壓力模式開始對緩沖區使用應用壓力的上限;第三個值是內存使用的上限。在這個層次上可以將報文丟棄,從而減少對內存的使用。對于較大的BDP可以增大這些值(注意,其單位是內存頁而不是字節)。 | 94011? 125351? 188022 | 131072? 262144? 524288 |
| /proc/sys/net/ipv4/tcp_rmem | 為自動調優定義socket使用的內存。第一個值是為socket接收緩沖區分配的最少字節數;第二個值是默認值(該值會被rmem_default覆蓋),緩沖區在系統負載不重的情況下可以增長到這個值;第三個值是接收緩沖區空間的最大字節數(該值會被rmem_max覆蓋)。 | 4096? 87380? 4011232 | 8760? 256960? 4088000 |
| /proc/sys/net/ipv4/tcp_wmem | 為自動調優定義socket使用的內存。第一個值是為socket發送緩沖區分配的最少字節數;第二個值是默認值(該值會被wmem_default覆蓋),緩沖區在系統負載不重的情況下可以增長到這個值;第三個值是發送緩沖區空間的最大字節數(該值會被wmem_max覆蓋)。 | 4096? 16384? 4011232 | 8760? 256960? 4088000 |
| /proc/sys/net/ipv4/tcp_keepalive_time | TCP發送keepalive探測消息的間隔時間(秒),用于確認TCP連接是否有效。 | 7200 | 1800 |
| /proc/sys/net/ipv4/tcp_keepalive_intvl | 探測消息未獲得響應時,重發該消息的間隔時間(秒)。 | 75 | 30 |
| /proc/sys/net/ipv4/tcp_keepalive_probes | 在認定TCP連接失效之前,最多發送多少個keepalive探測消息。 | 9 | 3 |
| /proc/sys/net/ipv4/tcp_sack | 啟用有選擇的應答(1表示啟用),通過有選擇地應答亂序接收到的報文來提高性能,讓發送者只發送丟失的報文段,(對于廣域網通信來說)這個選項應該啟用,但是會增加對CPU的占用。 | 1 | 1 |
| /proc/sys/net/ipv4/tcp_fack | 啟用轉發應答,可以進行有選擇應答(SACK)從而減少擁塞情況的發生,這個選項也應該啟用。 | 1 | 1 |
| /proc/sys/net/ipv4/tcp_timestamps | TCP時間戳(會在TCP包頭增加12個字節),以一種比重發超時更精確的方法(參考RFC 1323)來啟用對RTT 的計算,為實現更好的性能應該啟用這個選項。 | 1 | 1 |
| /proc/sys/net/ipv4/tcp_window_scaling | 啟用RFC 1323定義的window scaling,要支持超過64KB的TCP窗口,必須啟用該值(1表示啟用),TCP窗口最大至1GB,TCP連接雙方都啟用時才生效。 | 1 | 1 |
| /proc/sys/net/ipv4/tcp_syncookies | 表示是否打開TCP同步標簽(syncookie),內核必須打開了CONFIG_SYN_COOKIES項進行編譯,同步標簽可以防止一個套接字在有過多試圖連接到達時引起過載。 | 1 | 1 |
| /proc/sys/net/ipv4/tcp_tw_reuse | 表示是否允許將處于TIME-WAIT狀態的socket(TIME-WAIT的端口)用于新的TCP連接 。 | 0 | 1 |
| /proc/sys/net/ipv4/tcp_tw_recycle | 能夠更快地回收TIME-WAIT套接字。 | 0 | 1 |
| /proc/sys/net/ipv4/tcp_fin_timeout | 對于本端斷開的socket連接,TCP保持在FIN-WAIT-2狀態的時間(秒)。對方可能會斷開連接或一直不結束連接或不可預料的進程死亡。 | 60 | 30 |
| /proc/sys/net/ipv4/ip_local_port_range | 表示TCP/UDP協議允許使用的本地端口號 | 32768? 61000 | 1024? 65000 |
| /proc/sys/net/ipv4/tcp_max_syn_backlog | 對于還未獲得對方確認的連接請求,可保存在隊列中的最大數目。如果服務器經常出現過載,可以嘗試增加這個數字。 | 2048 | 2048 |
| /proc/sys/net/ipv4/tcp_max_tw_bucket | 處于timewait的連接數 | ? | ? |
| /proc/sys/net/ipv4/tcp_synack_retries | 第二次握手的重發數 | ? | 忙時設為1或0 |
| /proc/sys/net/ipv4/tcp_syn_retires | 服務器連接客戶端時,第一次握手重發數 | ? | ? |
| /proc/sys/net/ipv4/tcp_max_orphans | tcp套接字,請求到達還未來的及監理句柄允許的最大值,可防DOS攻擊 | ? | ? |
| /proc/sys/net/ipv4/tcp_fin_timeout | 四次斷開第二階段的超時時間FIN_WAIT_2 | ? | ? |
| /proc/sys/net/ipv4/tcp_low_latency | 允許TCP/IP棧適應在高吞吐量情況下低延時的情況,這個選項應該禁用。 | 0 | ? |
| /proc/sys/net/ipv4/tcp_westwood | 啟用發送者端的擁塞控制算法,它可以維護對吞吐量的評估,并試圖對帶寬的整體利用情況進行優化,對于WAN 通信來說應該啟用這個選項。 | 0 | ? |
| /proc/sys/net/ipv4/tcp_bic | 為快速長距離網絡啟用Binary Increase Congestion,這樣可以更好地利用以GB速度進行操作的鏈接,對于WAN通信應該啟用這個選項。 | 1 | ? |
總結
以上是生活随笔為你收集整理的Liunx 系统调优的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 加密日记 android,Lifeogr
- 下一篇: 软件工程毕设项目 - 基于SSM的毕业设