❶ 如何限制linux所有進程可使用的總內存
下面的shell腳本可以實時的監控系統中各個進程的CPU和內存的佔用情況,用於限制進程CPU佔用 率更加合理。
#!/bin/sh
PIDS=`top-bn1|grep"^*[1-9]"|awk』{if($9>50||$10>25&&id-u$2>500)print$1}』`
forPIDin$PIDS
do
renice+10$PID
echo"renice+10$PID"
done
能夠將這個腳本放到cron中運行,比如每分鍾檢查一次,只需以root身份添加crontab項:
#crontab -e
* * * * * limit.sh
以後每個一分鍾就會檢查一次,調整佔用50%以上CPU或25%內存的進程的nice值,從而使這樣的進程優先順序變低,被調度的機會減少,同時會向root發郵件提示該進程被調整過。
但是,限制內存使用最好還是用PAM,RedHat能夠在/etc/security/limits.conf中配置。
❷ 如何限制Linux可用物理內存大小
一、查看物理內存 執行如下命令即可查看物理內存,執行效果如下圖所示: dmidecode -t memory | grep Size 二、配置空間 物理內存是沒辦法配置的,只能配置虛擬內存,在Linux系統即Swap分區。具體操作swap分區的方法如下: 1、查看swap空間大小:...
❸ Linux伺服器的安全防護都有哪些措施
一、強化密碼強度
只要涉及到登錄,就需要用到密碼,如果密碼設定不恰當,就很容易被黑客破解,如果是超級管理員(root)用戶,如果沒有設立良好的密碼機制,可能給系統造成無法挽回的後果。
很多用戶喜歡用自己的生日、姓名、英文名等信息來設定,這些方式可以通過字典或者社會工程的手段去破解,因此建議用戶在設定密碼時,盡量使用非字典中出現的組合字元,且採用數字與字元、大小寫相結合的密碼,增加密碼被破譯的難度。
二、登錄用戶管理
進入Linux系統前,都是需要登錄的,只有通過系統驗證後,才能進入Linux操作系統,而Linux一般將密碼加密後,存放在/etc/passwd文件中,那麼所有用戶都可以讀取此文件,雖然其中保存的密碼已加密,但安全系數仍不高,因此可以設定影子文件/etc/shadow,只允許有特殊許可權的用戶操作。
三、賬戶安全等級管理
在Linux操作系統上,每個賬戶可以被賦予不同的許可權,因此在建立一個新用戶ID時,系統管理員應根據需要賦予該賬號不同的許可權,且歸並到不同的用戶組中。每個賬號ID應有專人負責,在企業中,如果負責某個ID的員工離職,該立即從系統中刪除該賬號。
四、謹慎使用"r"系列遠程程序管理
在Linux操作系統中,有一系列r開頭的公用程序,如rlogin、rcp等,非常容易被不法分子用來攻擊我們的系統,因此千萬不要將root賬號開放給這些公用程序,現如今很多安全工具都是針對此漏洞而設計的,比如PAM工具,就可以將其有效地禁止掉。
五、root用戶許可權管理
root可謂是Linux重點保護對象,因為其權利是最高的,因此千萬不要將它授權出去,但有些程序的安裝、維護必須要求是超級用戶許可權,在此情況下,可以利用其他工具讓這類用戶有部分超級用戶的許可權。sudo就是這樣的工具。
六、綜合防禦管理
防火牆、IDS等防護技術已成功應用到網路安全的各個領域,且都有非常成熟的產品,需要注意的是:在大多數情況下,需要綜合使用這兩項技術,因為防火牆相當於安全防護的第一層,它僅僅通過簡單地比較IP地址/埠對來過濾網路流量,而IDS更加具體,它需要通過具體的數據包(部分或者全部)來過濾網路流量,是安全防護的第二層。綜合使用它們,能夠做到互補,並且發揮各自的優勢,最終實現綜合防禦。
酷酷雲伺服器為您誠意解答,伺服器租戶的選擇,酷酷雲值得信賴。
❹ Linux系統基本的內存管理知識講解
內存是Linux內核所管理的最重要的資源之一。內存管理系統是操作系統中最為重要的部分,因為系統的物理內存總是少於系統所需要的內存數量。虛擬內存就是為了克服這個矛盾而採用的策略。系統的虛擬內存通過在各個進程之間共享內存而使系統看起來有多於實際內存的內存容量。Linux支持虛擬內存, 就是使用磁碟作為RAM的擴展,使可用內存相應地有效擴大。核心把當前不用的內存塊存到硬碟,騰出內存給其他目的。當原來的內容又要使用時,再讀回內存。
一、內存使用情況監測
(1)實時監控內存使用情況
在命令行使用「Free」命令可以監控內存使用情況
代碼如下:
#free
total used free shared buffers cached
Mem: 256024 192284 63740 0 10676 101004
-/+ buffers/cache: 80604 175420
Swap: 522072 0 522072
上面給出了一個256兆的RAM和512兆交換空間的'系統情況。第三行輸出(Mem:)顯示物理內存。total列不顯示核心使用的物理內存(通常大約1MB)。used列顯示被使用的內存總額(第二行不計緩沖)。 free列顯示全部沒使用的內存。Shared列顯示多個進程共享的內存總額。Buffers列顯示磁碟緩存的當前大小。第五行(Swap:)對對換空間,顯示的信息類似上面。如果這行為全0,那麼沒使用對換空間。在預設的狀態下,free命令以千位元組(也就是1024位元組為單位)來顯示內存使用情況。可以使用—h參數以位元組為單位顯示內存使用情況,或者可以使用—m參數以兆位元組為單位顯示內存使用情況。還可以通過—s參數使用命令來不間斷地監視內存使用情況:
#free –b –s2
這個命令將會在終端窗口中連續不斷地報告內存的使用情況,每2秒鍾更新一次。
(2)組合watch與 free命令用來實時監控內存使用情況:
代碼如下:
#watch -n 2 -d free
Every 2.0s: free Fri Jul 6 06:06:12 2007
total used free shared buffers cached
Mem: 233356 218616 14740 0 5560 64784
-/+ buffers/cache: 148272 85084
Swap: 622584 6656 615928
watch命令會每兩秒執行 free一次,執行前會清除屏幕,在同樣位置顯示數據。因為 watch命令不會卷動屏幕,所以適合出長時間的監測內存使用率。可以使用 -n選項,控制執行的頻率;也可以利用 -d選項,讓命令將每次不同的地方顯示出來。Watch命令會一直執行,直到您按下 [Ctrl]-[C] 為止。
二、虛擬內存的概念
(1)Linux虛擬內存實現機制
Linux虛擬內存的實現需要六種機制的支持:地址映射機制、內存分配回收機制、緩存和刷新機制、請求頁機制、交換機制、內存共享機制。
首先內存管理程序通過映射機制把用戶程序的邏輯地址映射到物理地址,在用戶程序運行時如果發現程序中要用的虛地址沒有對應的物理內存時,就發出了請求頁要求;如果有空閑的內存可供分配,就請求分配內存(於是用到了內存的分配和回收),並把正在使用的物理頁記錄在緩存中(使用了緩存機制)。 如果沒有足夠的內存可供分配,那麼就調用交換機制,騰出一部分內存。另外在地址映射中要通過TLB(翻譯後援存儲器)來尋找物理頁;交換機制中也要用到交換緩存,並且把物理頁內容交換到交換文件中後也要修改頁表來映射文件地址。
(2)虛擬內存容量設定
也許有人告訴你,應該分配2倍於物理內存的虛擬內存,但這是個不固定的規律。如果你的物理保存比較小,可以這樣設定。如果你有1G物理內存或更多的話,可以縮小一下虛擬內存。Linux會把大量的內存用做Cache的,但在資源緊張時回收回.。你只要看到swap為0或者很小就可以放心了,因為內存放著不用才是最大的浪費。
三、使甩vmstat命令監視虛擬內存使用情況
vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、CPU活動進行監視。它是對系統的整體情況進行統計,不足之處是無法對某個進程進行深入分析。通常使用vmstat 5 5(表示在5秒時間內進行5次采樣)命令測試。將得到一個數據匯總它可以反映真正的系統情況。
代碼如下:
#vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 62792 3460 9116 88092 6 30 189 89 1061 569 17 28 54 2
0 0 62792 3400 9124 88092 0 0 0 14 884 434 4 14 81 0
0 0 62792 3400 9132 88092 0 0 0 14 877 424 4 15 81 0
1 0 62792 3400 9140 88092 0 0 0 14 868 418 6 20 74 0
1 0 62792 3400 9148 88092 0 0 0 15 847 400 9 25 67 0
vmstat命令輸出分成六個部分:
❺ 在linux怎麼限制一個進程運行內存大小
我不知道如何查看。但記得Linux(32位)中每個進程獨享4GB的進程空間,需要注意的是這4G指的是虛擬內存,而非物理內存。可以查閱一下Linux虛擬內存機制相關資料。
要定製的話難度大啊!內核文件里用進程描述符(thread_info)表示一個進程,它是一個結構體,裡面有個關於進程內存分配的欄位(addr_limit)。具體自己研究研究吧!
如果只是對某個進程分配空間的話就簡單多了。假如你要為當前進程設置2M的內存上限,可以通過current->addr_limit=2048實現。
❻ Linux 內核的內存管理 - 概念
Concepts overview — The Linux Kernel documentation
Linux中的內存管理是一個復雜的系統,經過多年的發展,它包含越來越多的功能,以支持從 MMU-less microcontrollers 到 supercomputers 的各種系統。
沒有MMU內存管理的系統被稱為 nommu ,它值得寫一份專門的文檔進行描述。
盡管有些概念是相同的,這里我們假設MMU可用,CPU可以將虛擬地址轉換為物理地址。
計算機系統中的物理內存是有限資源,即便支持內存熱插拔,其可以安裝的內存也有限的。物理內存不一定必須是連續的;它可以作為一組不同的地址范圍被訪問。此外,不同的CPU架構,甚至同架構的不同實現對如何定義這些地址范圍都是不同的。
這使得直接處理物理內存異常復雜,為了避免這種復雜性,開發了 虛擬內存 (virtual memory) 的概念。
虛擬內存從應用軟體中抽象出物理內存的細節,只允許在物理內存中保留需要的信息 (demand paging) ,並提供一種機制來保護和控制進程之間的數據共享。
通過虛擬內存,每次內存訪問都訪問一個 虛擬地址 。當CPU對從系統內存讀取(或寫入)的指令進行解碼時,它將該指令中編碼的虛擬地址轉換為內存控制器可以理解的物理地址。
物理內存被切分為 頁幀 page frames 或 頁 pages 。頁的大小是基於架構的。一些架構允許從幾個支持的值中選擇頁大小;此選擇在內核編譯時設置到內核配置。
每個物理內存頁都可以映射為一個或多個 虛擬頁(virtual pages) 。映射關系描述在 頁表(page tables) 中,頁表將程序使用的虛擬地址轉換為物理內存地址。頁表以層次結構組織。
最底層的表包含軟體使用的實際內存頁的物理地址。較高層的表包含較低層表頁的物理地址。頂層表的指針駐留在寄存器中。
當CPU進行地址轉換的時候,它使用寄存器訪問頂級頁表。
虛擬地址的高位,用於頂級頁表的條目索引。然後,通過該條目訪問下級,下級的虛擬地址位又作為其下下級頁表的索引。虛擬地址的最低位定義實際頁內的偏移量。
地址轉換需要多次內存訪問,而內存訪問相對於CPU速度來說比較慢。為了避免在地址轉換上花費寶貴的處理器周期,CPU維護著一個稱為 TLB (Translation Lookaside Buffer)的用於地址轉換緩存(cache)。通常TLB是非常稀缺的資源,需要大內存工作應用程序會因為TLB未命中而影響性能。
很多現代CPU架構允許頁表的高層直接映射到內存頁。例如,x86架構,可以通過二級、三級頁表的條目映射2M甚至1G內存頁。在Linux中,這些內存頁稱為 大頁 (Huge) 。大頁的使用顯著降低了TLB的壓力,提高了TLB命中率,從而提高了系統的整體性能。
Linux提供兩種機制開啟使用大頁映射物理內存。
第一個是 HugeTLB 文件系統,即 hugetlbfs 。它是一個偽文件系統,使用RAM作為其存儲。在此文件系統中創建的文件,數據駐留在內存中,並使用大頁進行映射。
關於 HugeTLB Pages
另一個被稱為 THP (Transparent HugePages) ,後出的開啟大頁映射物理內存的機制。
與 hugetlbfs 不同,hugetlbfs要求用戶和/或系統管理員配置系統內存的哪些部分應該並可以被大頁映射;THP透明地管理這些映射並獲取名稱。
關於 Transparent Hugepage Support
通常,硬體對不同物理內存范圍的訪問方式有所限制。某些情況下,設備不能對所有可定址內存執行DMA。在其他情況下,物理內存的大小超過虛擬內存的最大可定址大小,需要採取特殊措施來訪問部分內存。還有些情況,物理內存的尺寸超過了虛擬內存的最大可定址尺寸,需要採取特殊措施來訪問部分內存。
Linux根據內存頁的使用情況,將其組合為多個 zones 。比如, ZONE_DMA 包含設備用於DMA的內存, ZONE_HIGHMEM 包含未永久映射到內核地址空間的內存, ZONE_NORMAL 包含正常定址內存頁。
內存zones的實際層次架構取決於硬體,因為並非所有架構都定義了所有的zones,不同平台對DMA的要求也不同。
多處理器機器很多基於 NUMA (Non-Uniform Memory Access system - 非統一內存訪問系統 )架構。 在這樣的系統中,根據與處理器的「距離」,內存被安排成具有不同訪問延遲的 banks 。每個 bank 被稱為一個 node ,Linux為每個 node 構造一個獨立的內存管理子系統。 Node 有自己的zones集合、free&used頁面列表,以及各種統計計數器。
What is NUMA?
NUMA Memory Policy
物理內存易失,將數據放入內存的常見情況是讀取文件。讀取文件時,數據會放入 頁面緩存(page cache) ,可以在再次讀取時避免耗時的磁碟訪問。同樣,寫文件時,數據也會被放入 頁面緩存 ,並最終進入存儲設備。被寫入的頁被標記為 臟頁(dirty page) ,當Linux決定將其重用時,它會將更新的數據同步到設備上的文件。
匿名內存 anonymous memory 或 匿名映射 anonymous mappings 表示沒有後置文件系統的內存。這些映射是為程序的stack和heap隱式創建的,或調用mmap(2)顯式創建的。通常,匿名映射只定義允許程序訪問的虛擬內存區域。讀,會創建一個頁表條目,該條目引用一個填充有零的特殊物理頁。寫,則分配一個常規物理頁來保存寫入數據。該頁將被標記為臟頁,如果內核決定重用該頁,則臟頁將被交換出去 swapped out 。
縱貫整個系統生命周期,物理頁可用於存儲不同類型的數據。它可以是內核內部數據結構、設備驅動DMA緩沖區、讀取自文件系統的數據、用戶空間進程分配的內存等。
根據內存頁使用情況,Linux內存管理會區別處理。可以隨時釋放的頁面稱為 可回收(reclaimable) 頁面,因為它們把數據緩存到了其他地方(比如,硬碟),或者被swap out到硬碟上。
可回收頁最值得注意的是 頁面緩存 和 匿名頁面 。
在大多數情況下,存放內部內核數據的頁,和用作DMA緩沖區的頁無法重用,它們將保持現狀直到用戶釋放。這樣的被稱為 不可回收頁(unreclaimable) 。
然而,在特定情況下,即便是內核數據結構佔用的頁面也會被回收。
例如,文件系統元數據的緩存(in-memory)可以從存儲設備中重新讀取,因此,當系統存在內存壓力時,可以從主內存中丟棄它們。
釋放可回收物理內存頁並重新調整其用途的過程稱為 (surprise!) reclaim 。
Linux支持非同步或同步回收頁,取決於系統的狀態。
當系統負載不高時,大部分內存是空閑的,可以立即從空閑頁得到分配。
當系統負載提升後,空閑頁減少,當達到某個閾值( low watermark )時,內存分配請求將喚醒 kswapd 守護進程。它將以非同步的方式掃描內存頁。如果內存頁中的數據在其他地方也有,則釋放這些內存頁;或者退出內存到後置存儲設備(關聯 臟頁 )。
隨著內存使用量進一步增加,並達到另一個閾值- min watermark -將觸發回收。這種情況下,分配將暫停,直到回收到足夠的內存頁。
當系統運行時,任務分配並釋放內存,內存變得碎片化。
雖然使用虛擬內存可以將分散的物理頁表示為虛擬連續范圍,但有時需要分配大的連續的物理內存。這種需求可能會提升。例如,當設備驅動需要一個大的DMA緩沖區時,或當THP分配一個大頁時。
內存地址壓縮(compaction ) 解決了碎片問題。
該機制將佔用的頁從內存zone的下部移動到上部的空閑頁。壓縮掃描完成後,zone開始處的空閑頁就並在一起了,分配較大的連續物理內存就可行了。
與 reclaim 類似, compaction 可以在 kcompactd守護進程中非同步進行,也可以作為內存分配請求的結果同步進行。
在存在負載的機器上,內存可能會耗盡,內核無法回收到足夠的內存以繼續運行。
為了保障系統的其餘部分,引入了 OOM killer 。
OOM killer 選擇犧牲一個任務來保障系統的總體健康。選定的任務被killed,以期望在它退出後釋放足夠的內存以繼續正常的操作。
❼ 如何限制Linux內存的使用
swap是一塊磁碟空間或者一個本地文件
/proc/sys/vm/swappiness 可以設置伺服器使用 swap 的積極程度。取值范圍為0-100,值越大,越積極使用swap,更傾向於回收匿名頁;值越小,越消極使用swap,更傾向於回收文件頁。
即使swap設置為0,當剩餘內存+文件頁小於頁高閾值( pages_high )的時候,也會發生swap
Linux有專門的內核線程 kswapd0 定期回收內存,為了衡量內存的使用情況, kswapd0 定義了三個內存閾值:頁最小閾值 pages_min 、頁低閾值 pages_low 和頁高閾值 pages_high ,剩餘內存使用 pages_free 表示。
kswapd0 定期掃描內存的使用情況,並根據剩餘內存和這三個閾值的關系進行內存回收操作。
pages_free < pages_min :進程可用內存耗盡,只有內核才可以分配內存
pages_min < pages_free < pages_low :內存壓力較大, kswapd0 會執行內存回收,直到剩餘內存大於高閾值為止
pages_low < pages_free < pages_high :內存有一定壓力,但還可以滿足新內存請求
pages_free > pages_high :剩餘內存較多,沒有內存壓力。
這些閾值可以通過內核選項來 proc/sys/vm/min_free_kbytes 間接設置。 min_free_kbytes 設置了頁最小閾值( pages_min )。 pages_low=pages_min*5/4 , pages_high=pages_min*3/2
/etc/security/limits.conf
通過這個配置文件可以對每個登錄的會話進行限制,這種限制不是全局的,也不是永久的,只在會話期間起作用。
通常,對單個用戶的限制優先順序高於對用戶組的限制
可以使用以下方式限制內存使用
語法
<domain> <type> <item> <value>
詳見 limits.conf(5) - Linux man page
/proc/sys/vm/overcommit_memory 控制內核使用虛擬內存的模式,可以設置為以下值