導航:首頁 > 操作系統 > linux進程內存最大內存

linux進程內存最大內存

發布時間:2022-09-27 17:36:26

㈠ 32位linux 支持多大內存

32位linux不打開PAE,則最多隻能識別出4GB內存,若打開PAE,則最多可以識別出64GB內存。但是 32位系統下的進程一次最多隻能定址4GB的空間。 64位linux則沒有32位系統的限制。因此對於內存大於4GB的機器來說,最好安裝64位系統。

㈡ 32位linux能支持的最大物理內存有多少

32位linux不打開PAE,則最多隻能識別出4GB內存,若打開PAE,則最多可以識別出64GB內存。但是 32位系統下的進程一次最多隻能定址4GB的空間。

64位linux則沒有32位系統的限制。因此對於內存大於4GB的機器來說,最好安裝64位系統。

簡單介紹下如何讓redhat 5-32位支持4G以上內存。

步驟1:

安裝kernel-PAE.i686 內核包,讓系統內核支持PAE物理地址擴展。

rpm-ivh kernel-PAE-2.6.18-53.el5.i686.rpm 安裝的時候會報如下警告。

㈢ linux 支持的內存容量最大是多少

32位的Linux的內存最大支持到4GB,64位的Linux的最大支持內存在EB級別上。實際上最大支持多大的內容跟操作系統的種類無關,而是跟操作系統是32位還是64位有關。

32位的Linux和32位的Windows支持的最大內存是4GB,2的32次方位元組=4294967296位元組
64位的Linux和Windows支持的最大內存=16EB,2的64次方位元組=18446744073709551616位元組

註:1EB=1024PB,1PB=1024TB,1TB=1024GB

㈣ linux 下怎麼查看一個進程佔用內存大小

這里介紹下查看一個進程佔用內存大小的方法。

1、首先單擊桌面左上角的應用程序,選擇系統工具選項,如下圖所示。

㈤ Linux進程內存管理

對於包含MMU的處理器而言,Linux系統提供了復雜的存儲管理系統,使得進程所能訪問的內存達到4GB。在Linux系統中,進程的4GB內存空間被分為兩個部分——用戶空間與內核空間。用戶空間的地址一般分布為0~3GB(即PAGE_OFFSET,在Ox86中它等於OxC0000000),這樣,剩下的3~4GB為內核空間,用戶進程通常只能訪問用戶空間的虛擬地址,不能訪問內核空間的虛擬地址。用戶進程只有通過系統調用(代表用戶進程在內核態執行)等方式才可以訪問到內核空間。
每個進程的用戶空間都是完全獨立、互不相乾的,用戶進程各自有不同的頁表。而內核空間是由內核負責映射,它並不會跟著進程改變,是固定的。內核空間的虛擬地址到物理地址映射是被所有進程共享的,內核的虛擬空間獨立於其他程序。
Linux中1GB的內核地址空間又被劃分為物理內存映射區、虛擬內存分配區、高端頁面映射區、專用頁面映射區和系統保留映射區這幾個區域。
對於x86系統而言,一般情況下,物理內存映射區最大長度為896MB,系統的物理內存被順序映射在內核空間的這個區域中。當系統物理內存大於896MB時,超過物理內存映射區的那部分內存稱為高端內存(而未超過物理內存映射區的內存通常被稱為常規內存),內核在存取高端內存時必須將它們映射到高端頁面映射區。Linux保留內核空間最頂部FIXADDR_TOP~4GB的區域作為保留區。
當系統物理內存超過4GB時,必須使用CPU的擴展分頁(PAE)模式所提供的64位頁目錄項才能存取到4GB以上的物理內存,這需要CPU的支持。加入了PAE功能的Intel Pentium Pro及以後的CPU允許內存最大可配置到64GB,它們具備36位物理地址空間定址能力。
由此可見,對於32位的x86而言,在3~4GB之間的內核空間中,從低地址到高地址依次為:物理內存映射區→隔離帶→vmalloc虛擬內存分配器區→隔離帶→高端內存映射區→專用頁面映射區→保留區。

㈥ linux進程內存相關

3種地址:虛擬地址、物理地址、邏輯地址
物理地址:內存的電路地址,對應內存地址線上的高低電平,物理可見的。
虛擬地址: 分頁機制 的產物,也叫線性地址,是進程能看見的地址。
邏輯地址: 分段機制 的產物,屬於inter cpu的歷史遺留問題,linux可以當做不存在。
3種地址的轉換:進程訪問邏輯地址,linux內核根據分段機制裝換成虛擬地址,然後把進程的頁表和虛擬地址都告訴cpu,cpu就可以根據分頁機制將虛擬地址裝換成物理地址,然後訪問內存。
linux內核中巧妙地屏蔽里分段機制,就是邏輯地址等於虛擬地址,訪問內存只需要利用分頁機制把虛擬地址轉換成物理地址。

linux會為每個進程創建自己的虛擬地址空間,就是進程地址空間,64位系統就是128T的內存空間。需要注意的是,虛擬地址就是假的,一開始不和物理地址對應,也就是說不佔用物理內存,只有當虛擬地址有寫入操作是,內核會觸發缺頁,分配真實的物理地址給虛擬地址。物理地址的管理可參考 內核內存管理

從進程空間看,用戶態閑置內存有3塊,Stack、Memory Mapping Region、Heap,Stack是程序函數調用運行時需要的,不可控,能自由分配的內存就剩Memory Mapping Region、Heap了,linux系統提供的內存分配函數就是針對這兩個區域的。
Heap操作函數:int brk(void *addr)、void *sbrk(intptr_t increment)
Memory Mapping Region操作函數:mmap()、munmap()

當然進程可以直接使用系統調用去申請內存,但是如果不管理的話,經過大量的申請和釋放,會把進程空間切割的亂七八糟,導致不能申請大塊的連續空間,為此就出現了內存管理模塊,封裝了系統調用,對進程提供malloc和free等高級函數。實際上,除了一些特殊程序,我們也很少用系統調用,一般都是使用內存管理模塊提供的malloc和free,關系如下圖:

內存管理模塊用各種好處,例如不會每次操作都去執行系統調用,減少內存碎片的產生等等。
當然也有很多實現方式,例如常用的glibc的Ptmalloc,google的tcmalloc,facebook的jemalloc等。各有各的應用場景,blablabla....
使用時,gcc默認會鏈接glibc的,如果想使用其他lib,gcc鏈接時指定就能覆蓋掉glibc的。

我們重點講Ptmalloc,從而啟發程序員在寫程序時多考慮下內存分配情況,可以選擇或自己實現適合自己程序的內存管理lib。
Ptmalloc的歷史發展,blablabla......,Ptmalloc採取內存池管理,進程malloc時,通過brk(小於128K的內存)、mmap(大內存)從系統獲取地址空間,給進程使用,進程free時,不會立即通過brk、munmap將地址空間還給系統,會自己維護起來,叫做空閑內存,這些空閑內存在進程再次malloc時,還會被分出去,並且空閑內存會在特定條件下合並起來還給系統。

內存分配區,管理了一片內存,對外分發和回收,可以理解為一個內存池,分main arena和non main arena。
main arena:最早的分配區,管理著所有可分配的內存,通過brk,mmap等系統調用向系統申請內存。注意只有main arena可以操作Heap。
non main arena:由於多線程的出現,如果多有線程都操作main arena就會有競爭,需要加鎖控制,所以出現了non main arena,通過mmap向main arena申請一大塊內存,然後自己管理,可以理解為內存分銷商。
只有主線程在main arena上申請內存,子線程在non main arena上,non main arena的個數是有上限的,所以non main arena允許多個子線程共用,這樣就涉及到加鎖,所以程序涉及應避免子線程個數太多。

進程申請到的一塊內存叫做一個內存片,arena內部使用chunk數據結構來描述內存片,包括進程正在使用的內存片,和進程free掉的空閑內存片

A:是否main arena內存
M:使用mmap內存
P:上一塊是否被使用
size of previous chunk:上一塊沒有被使用時,表示上塊長度,被使用時是上塊用來存User data的。
Size of chunk:就是下一塊的size of previous chunk,釋放時填上本塊長度,供下塊合並用。

分給進程的內存片arena可以不管,但是進程free回來的,arena需要通過一定方式組織起來,方便進程再次使用。組織方式有下面幾種:

bins是個數組,包含128個bin,每個bin是個鏈表,分small bin和large bin兩種,各64個,small bin中chunk大小固定,兩個相鄰的small bin中的chunk大小相差8bytes,large bin中chunk大小是一定范圍內的,其中的chunk按大小排列。
空閑chunk按大小選擇合適的bin,按新舊順序掛到鏈表上,優先分配舊的chunk。

不大於max_fast (默認值為64B)的chunk被釋放後,首先會被放到fast bins 中,fast bins中的chunk並不改變它的使用標志P。這樣也就無法將它們合並,當需要給用戶分配的chunk小於或等於max_fast時,ptmalloc首先會在fast bins中查找相應的空閑塊。在特定的時候,ptmalloc會遍歷fast bins中的chunk,將相鄰的空閑chunk進行合並,並將合並後的chunk加入unsorted bin中。

進行malloc時,如果在fast bins中沒有找到合適的chunk,則ptmalloc會先在unsorted bin中查找合適的空閑chunk,如果unsorted bin不能滿足分配要求。malloc便會將unsorted bin中的chunk加入bins中。然後再從bins中繼續進行查找和分配過程。從這個過程可以看出來,unsorted bin可以看做是bins的一個緩沖區,增加它只是為了加快分配的速度。

前面的bin中都是回收回來的內存,top chunk才是內存的初始來源,每個arena都有一個top chunk,用來管理Heap的,Heap會在arena第一次分配內存時初始化,會分配一塊(chunk_size + 128K) align 4K的空間(132K)作為初始的Heap,top chunk占據整個空間,每次分配會在低地址出切出一片,如下圖:

回收時,只有和top chunk相連的內存才能和top chunk合並,才能進而還給系統。

子線程Heap:在main arena中mmap出64M的空間,叫做sub-heap,再在sub-heap上初始化Heap。
主線程的Heap才是真Heap,使用進程Heap,使用brk申請內存。

子線程的heap不夠用時,會在申請新的sub-heap,和老的sub-heap單向鏈表連起來,top chunk會搬到新sub-heap上。

描述mmap出來的內存,單獨管理,free時按閾值來決定是否munmap,有動態調整閾值功能,防止太頻繁的mmap和munmap。本文不關注。

即最後一次small request中因分割而得到的剩餘部分,它有利於改進引用局部性,也即後續對 small chunk 的 malloc 請求可能最終被分配得彼此靠近。
當用戶請求 small chunk而無法從small bin和unsorted bin得到時,會在large bin中找最合適的chunk,然後做切割,返回給用戶的User chunk,剩下的是Remainder chunk添加到unsorted bin中。這一Remainder chunk就將成為last remainder chunk。

下一塊為高地址,前一塊為低地址。

Glibc內存管理 華庭(庄明強)

㈦ linux 32位系統支持多大內存

32位linux不打開PAE,則最多隻能識別出4GB內存,若打開PAE,則最多可以識別出64GB內存。但是 32位系統下的進程一次最多隻能定址4GB的空間。 64位linux則沒有32位系統的限制。因此對於內存大於4GB的機器來說,最好安裝64位系統。 簡單介紹下如何讓redhat 5-32位支持4G以上內存。 步驟1: 安裝kernel-PAE.i686 內核包,讓系統內核支持PAE物理地址擴展。 rpm-ivh kernel-PAE-2.6.18-53.el5.i686.rpm 安裝的時候會報如下警告。 將安裝命令由原本的rpm-ivh ****.rpm 改為rpm -ivh ****.rpm –force --nodeps就可以了,nodeps的意思是忽視依賴關系。因為各個軟體之間會有或多或少的存在關聯,有了這兩個設置選項就忽略了這些依賴關系,強制安裝。 步驟2: 設置linux系統啟動加載入內核,讓系統啟用PAE的內核 [root@wangdm~ 12:40 #11]# /boot/grub/grub.conf #grub.conf generated by anaconda # #Note that you do not have to rerun grub after making changes to this file #NOTICE: You have a /boot partition. This means that # all kernel and initrd paths arerelative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version roroot=/dev/sda3 # initrd /initrd-version.img #boot=/dev/sda default=0 (將default=1修改為default=0就可以了) timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu #升級後的系統引導 titleRed Hat Enterprise Linux Server RedHat Enterprise Linux Server (2.6.18-53.el5PAE) root (hd0,0) kernel /vmlinuz-2.6.18-53.el5PAE roroot=LABEL=/ rhgb quiet initrd /initrd-2.6.18-53.el5PAE.img #升級前的系統引導,將其注釋掉 #titleRed Hat Enterprise Linux Server (2.6.18-194.el5) # root (hd0,0) # kernel /vmlinuz-2.6.18-194.el5 roroot=LABEL=/ rhgb quiet # initrd /initrd-2.6.18-194.el5.img 保存後重啟linux,系統內核就能最大支持64G內存了。 通過查,cat/boot/config-*grep PAE可以查看當前的支持情況如下圖顯示。

㈧ 詳解Linux系統內存知識及調優方案

內存是計算機中重要的部件之一,它是與CPU進行溝通的橋梁。計算機中所有程序的運行都是在內存中進行的,因此內存的性能對計算機的影響非常大。內存作用是用於暫時存放CPU中的運算數據,以及與硬碟等外部存儲器交換的數據。只要計算機在運行中,CPU就會把需要運算的數據調到內存中進行運算,當運算完成後CPU再將結果傳送出來,內存的運行也決定了計算機的穩定運行。對於整個操作系統來說,內存可能是最麻煩的的設備。而其性能的好壞直接影響著整個操作系統。

我們知道CPU是不能與硬碟打交道的,只有數據被載入到內存中才可以被CPU調用。cpu在訪問內存的時候需要先像內存監控程序請求,由監控程序控制和分配內存的讀寫請求,這個監控程序叫做MMU(內存管理單元)。下面以32位系統來說明內存的訪問過程:

32位的系統上每一個進程在訪問內存的時候,每一個進程都當做自己有4個G的內存空間可用,這叫虛擬內存(地址),虛擬內存轉化成物理內存是通過MMU來完成的。為了能夠從線性地址轉換成物理地址,需要page table(頁表)的內存空間,page table要載入到MMU上。為了完成線性地址到物理地址的映射,如果按照1個位元組1個位元組映射的話,需要一張非常大的表,這種轉換關系會非常的復雜。因此把內存空間又劃分成了另外一種存儲單元格式,通常為4K。在不同的硬體平台上,它們的大小一般是不一樣的,像x86 32位的有4k的頁;而64位的有4k頁,2M頁,4M頁,8M頁等等,默認都是4k的。每一個進程一般而言都有自己的頁路徑和頁表映射機制,不管那一個頁表都是由內核載入的。每一個進程只能看到自己的線性地址空間,想要增加新的內存的時候,只能在自己的線性地址空間中申請,並且申請後一定是通過操作系統的內核映射到物理地址空間中去找那麼一段空間,並且告訴線性地址空間准備好了,可以訪問,並且在page table中增加一條映射關系,於是就可以訪問物理內存了,這種叫做內存分配。但是新的申請一定是通過操作的內核到物理內存中去找那麼一段空間,並且告訴線性地址空間好了,可以建設映射關系,最終page table建立映射關系。

這反映了上述描述過程的大體情況。可以看到每一個用戶程序都會有自己的頁表,並且映射到對應的主存儲器上去。

根據上述文字和圖表的描述可以發現2個問題:

1.每個進程如果需要訪問內存的時候都需要去查找page table的話,勢必會造成伺服器的性能底下

2.如果主存儲器的內存滿了以後,應用程序還需要調用內存的時候怎麼辦

對於第一個問題,我們就需要藉助TLB(Translation Lookaside Buffer)翻譯後備緩沖器。TLB是一個內存管理單元,它可以用於改進虛擬地址到物理地址轉換速度的緩存。這樣每次在查找page table的時候就可以先去TLB中查找相應的頁表數據,如果有就直接返回,沒有再去查找page table,並把查找到的結果緩存中TLB中。TLB雖然解決了緩存的功能,但是在那麼page table中查找映射關系仍然很慢,所以又有了page table的分級目錄。page table可以分為1級目錄,2級目錄和偏移量

但是一個進程在運行的時候要頻繁的打開文件,關閉文件。這就意味著要頻繁的申請內存和釋放內存。有些能夠在內存中緩存數據的那些進程,他們對內存的分配和回收更多,那麼每一次分配都會在頁表中建立一個對應項。所以,就算內存的速度很快,大量頻繁的同一時間分配和釋放內存,依然會降低伺服器的整體性能。當然內存空間不夠用的時候,我們稱為oom(out of memory,內存耗盡)。當內存耗盡的時候,,整個操作系統掛了。這種情況下我們可以考慮交換分區,交換分區畢竟是由硬碟虛擬出來的內存,所以其性能與真正的內存相比,差了很多,所以要盡力避免使用交換分區。有物理內存空間的時候盡量保證全部使用物理內存。cpu無論如何是不能給交換內存打交道的,它也只能給物理內存打交道,能定址的空間也只能是物理內存。所以當真正物理內存空間不夠用的時候,會通過LRU演算法把其中最近最少使用的內存放到交換內存中去,這樣物理內存中的那段空間就可以供新的程序使用了。但是這樣會引發另外的一個問題,即原來的進程通過page table尋找的時候,那一段空間的數據已經不屬於它了。所以此刻cpu發送通知或者異常告訴這個程序,這個地址空間已不屬於它,這個時候可能會出現2種情況:

1.物理內存有可用的空間可用:這個時候cpu會根據以前的轉換策略會把交換分區中的那段內存重新送到物理內存中去,但是轉換過來的空間地址不一定會是以前的那一段空間地址,因為以前的那一段空間地址可能已經被別人使用了。

2.物理內存沒有可用的空間可用:這個時候依然會使用LRU算發把當前物理地址空間上最近最少使用的空間地址轉換到交換內存中去,並把當前進程需要的這斷在交換空間中的內存送到物理內存空間中去,並且重新建立映射關系。

上述通知或者異常出現的情況,通常叫做缺頁異常。缺頁異常也分為大異常和小異常兩種。大異常就是訪問的數據內存中沒有,不的不去硬碟上載入,無論是從交換內存中還是直接從磁碟的某個文件系統上,反正需要從硬碟上去載入,這種異常載入需要很長時間。小異常就是進程之間通過共享內存,第二個進程訪問的時候,查看本地的內存映射表沒有,但是其它進程已經擁有了這個內存頁,所以可以直接映射,這種異常載入需要的時間一般很短。

在操作系統開機的時候,每一個io設備都會像cpu申請一些列的隨機埠,這種埠叫做io埠。在IBM PC體系結構中,I/O地址空間一共提供了65,536個8位的I/O埠。正是這些io埠的存在,cpu可以與io設備進行讀寫交互的過程。在執行讀寫操作時,CPU使用地址匯流排選擇所請求的I/O埠,使用數據匯流排在CPU寄存器和埠之間傳送數據。I/O埠還可以被映射到物理地址空間:因此,處理器和I/O設備之間的通信就可以直接使用對內存進行操作的匯編語言指令(例如,mov、and、or等等)。現代的硬體設備更傾向於映射I/O,因為這樣處理的速度較快,並可以和DMA結合起來使用。這樣io在和內存傳數據的時候就不需要通過cpu,cpu把匯流排的控制權交給DMA,每次io傳數據的時候就調用DMA一次,就把cpu給解放了出來。當數據傳輸完了以後,DMA通知給cpu中斷一次。DMA在運行的時候對整個匯流排有控制許可權,當cpu發現有其它進程需要使用匯流排的時候,二者就會產生爭用。這個時候,在匯流排控制權的使用上,CPU和DMA具有相等的許可權。只要CPU委託給了DMA,就不能隨意的收回這個委託,就要等待DMA的用完。

如果沒有其它進程可以運行,或者其它進程運行的時間非常短,這個時候CPU發現我們的IO仍然沒有完成,那就意味著,CPU只能等待IO了。CPU在時間分配裡面有個iowait的值,就是CPU在等待IO花費的時間。有些是在同步調用過程中,CPU必須要等待IO的完成;否者CPU可以釋放IO的傳輸在背後自動完成,CPU自己去處理其它的事情。等硬碟數據傳輸完成以後,硬碟只需要像CPU發起一個通知即可。CPU外圍有一種設備,這個設備叫做可編程中斷控制器。每一個硬體設備為了給CPU通信,在剛開機的時候,在BIOS實現檢測的時候,這個設備就要到可編程中斷控制器上去注冊一個所謂的中斷號。那麼這個號碼就歸這個硬體使用了。當前主機上可能有多個硬體,每一個硬體都有自己的號碼,CPU在收到中斷號以後,就能夠通過中斷相量表查找到那個硬體設備進行中斷。並且就由對應的IO埠過來處理了。

CPU正在運行其它進程,當一個中斷請求發過來的時候,CPU會立即終止當前正在處理的進程,而去處理中斷。當前CPU掛起當前正在處理的進程,轉而去執行中斷的過程,也叫做中斷切換。只不過,這種切換在量級別上比進程切換要低一些,而且任何中斷的優先順序通常比任何進程也要高,因為我們指的是硬體中斷。中斷還分為上半部和下半部,一般而言,上半部就是CPU在處理的時候,把它接進來,放到內存中,如果這個事情不是特別緊急(CPU或者內核會自己判斷),因此在這種情況下,CPU回到現場繼續執行剛才掛起的進程,當這個進程處理完了,再回過頭來執行中斷的下半部分。

在32位系統中,我們的內存(線性地址)地址空間中,一般而言,低地址空間有一個G是給內核使用的,上面3個G是給進程使用的。但是應該明白,其實在內核內存當中,再往下,不是直接這樣劃分的。32位系統和64位系統可能不一樣(物理地址),在32位系統中,最低端有那麼10多M的空間是給DMA使用的。DNA的匯流排寬度是很小的,可能只有幾位,所以定址能力很有限,訪問的內存空間也就很有限。如果DMA需要復制數據,而且自己能夠定址物理內存,還可以把數據直接壯哉進內存中去,那麼就必須保證DMA能夠定址那段內存才行。定址的前提就是把最低地址斷M,DA的定址范圍內的那一段給了DMA。所以站在這個角度來說,我們的內存管理是分區域的。

在32位系統上,16M的內存空間給了ZONE_DMA(DMA使用的物理地址空間);從16M到896M給了ZONE_NORMAL(正常物理地址空間),對於Linux操作系統來說,是內核可以直接訪問的地址空間;從896M到1G這斷空間叫做"Reserved"(預留的物理地址空間);從1G到4G的這段物理地址空間中,我們的內核是不能直接訪問的,要想訪問必須把其中的一段內容映射到Reserved來,在Reserved中保留出那一段內存的地址編碼,我們內核才能上去訪問,所以內核不直接訪問大於1G的物理地址空間。所以在32位系統上,它訪問內存當中的數據,中間是需要一個額外步驟的。

在64位系統上,ZONE_DAM給了低端的1G地址空間,這個時候DMA的定址能力被大大加強了;ZONE_DAM32可以使用4G的空間;而大於1G以上給劃分了ZONE_NORMAL,這段空間都可以被內核直接訪問。所以在64位上,內核訪問大於1G的內存地址,就不需要額外的步驟了,效率和性能上也大大增加,這也就是為什麼要使用64位系統的原因。

在現在的PC架構上,AMD,INTER都支持一種機制,叫做PEA(物理地址擴展)。所謂PAE。指的是在32位系統的地址匯流排上,又擴展了4位,使得32位系統上的地址空間可以達到64G。當然在32為系統上,不管你的物理內存有多大,單個進程所使用的空間是無法擴展的。因為在32位的系統上,線性地址空間只有4個G,而單個進程能夠識別的訪問也只有3個G。

linux的虛擬內存子系統包含了以下幾個功能模塊:

slab allocator,zoned buddy allocator,MMU,kswapd,bdflush

slab allocator叫做slab分配器

buddy allocator又叫做buddy system,叫做夥伴系統,也是一種內存分配器

buddy system是工作在MMU之上的,而slab allocator又是工作在buddy system之上的。

設置為小於等於1G,在資料庫伺服器應該勁量避免使用交換內存

3.在應用伺服器上,可以設置為RAM*0.5,當然這個是理論值

如果不的不使用交換內存,應該把交換內存放到最靠外的磁軌分區上,因為最外邊的磁碟的訪問速度最快。所以如果有多塊硬碟,可以把每塊硬碟的最外層的磁軌拿一小部分出來作為交換分區。交換分區可以定義優先順序,因此把這些硬碟的交換內存的優先順序設置為一樣,可以實現負載均衡的效果。定義交換分區優先順序的方法為編輯/etc/fstab:

/dev/sda1 swap swap pri=5 0 0

/dev/sdb1 swap swap pri=5 0 0

/dev/sdc1 swap swap pri=5 0 0

/dev/sdd1 swap swap pri=5 0 0

四.內存耗盡時候的相關調優參數

當Linux內存耗盡的時候,它會殺死那些佔用內存最多的進程,以下三種情況會殺死進程:

1.所有的進程都是活動進程,這個時候想交換出去都沒有空閑的進程

2.沒有可用的page頁在ZONE_NORMAL中

3.有其它新進程啟動,申請內存空間的時候,要找一個空閑內存給做映射,但是這個時候找不到了

一旦內存耗盡的時候,操作系統就會啟用oom-kill機制。

在/proc/PID/目錄下有一個文件叫做oom_score,就是用來指定oom的評分的,就是壞蛋指數。

如果要手動啟用oom-kill機制的話,只需要執行echo f>/proc/sysrq-trigger即可,它會自動殺掉我們指定的壞蛋指數評分最高的那個進程

可以通過echo n > /proc/PID/oom_adj來調整一個進程的壞蛋評分指數。最終的評分指數就是2的oom_adj的值的N次方。假如我們的一個進程的oom_adj的值是5,那麼它的壞蛋評分指數就是2的5次方。

如果想禁止oom-kill功能的使用可以使用vm.panic_on_oom=1即可。

五.與容量有關的內存調優參數:

overcommit_memory,可用參數有3個,規定是否能夠過量使用內存:

0:默認設置,內核執行啟發式的過量使用處理

1:內核執行無內存的過量使用處理。使用這個值會增大內存超載的可能性

2:內存的使用量等於swap的大小+RAM*overcommit_ratio的值。如果希望減小內存的過度使用,這個值是最安全的

overcommit_ratio:將overcommit_memory指定為2時候,提供的物理RAM比例,默認為50

六.與通信相關的調優參數

常見在同一個主機中進行進程間通信的方式:

1.通過消息message;2.通過signal信號量進行通信;3.通過共享內存進行通信,跨主機常見的通信方式是rpc

以消息的方式實現進程通信的調優方案:

msgmax:以位元組為單位規定消息隊列中任意消息的最大允許大小。這個值一定不能超過該隊列的大小(msgmnb),默認值為65536

msgmnb:以位元組為單位規定單一消息隊列的最大值(最大長度)。默認為65536位元組

msgmni:規定消息隊列識別符的最大數量(及隊列的最大數量)。64位架構機器的默認值為1985;32位架構機器的默認值為1736

以共享內存方式實現進程通信的調優方案:

shmall:以位元組為單位規定一次在該系統中可以使用的共享內存總量(單次申請的上限)

shmmax:以位元組為單位規定每一個共享內存片段的最大大小

shmmni:規定系統范圍內最大共享內存片段。在64和32位的系統上默認值都是4096

七.與容量相關的文件系統可調優參數:

file-max:列出內核分配的文件句柄的最大值

dirty_ratio:規定百分比值,當臟數據達到系統內存總數的這個百分比值後開始執行pdflush,默認為20

dirty_background_ratio:規定百分比值,當某一個進程自己所佔用的臟頁比例達到系統內存總數的這個百分比值後開始在後台執行pdflush,默認為10

dirty_expire_centisecs:pdlush每隔百分之一秒的時間開啟起來刷新臟頁,默認值為3000,所以每隔30秒起來開始刷新臟頁

dirty_writeback_centisecs:每隔百分之一秒開始刷新單個臟頁。默認值為500,所以一個臟頁的存在時間達到了5秒,就開始刷新臟

八.linux內存常用的觀察指標命令:

Memory activity

vmstat [interval] [count]

sar -r [interval] [count]

Rate of change in memory

sar -R [interval] [count]

frmpg/s:每秒釋放或者分配的內存頁,如果為正數,則為釋放的內存頁;如果為負數,則為分配的內存頁

bufpg/s:每秒buffer中獲得或者釋放的內存頁。如果為正數則為獲得的內存頁,為負數。則為釋放的內存頁

campg/s:每秒cache中獲得或者釋放的內存頁。如果為正數則為獲得的內存頁,為負數。則為釋放的內存頁

Swap activity

sar -W [interval] [count]

ALL IO

sar -B [interval] [count]

pgpgin/s:每秒從磁碟寫入到內核的塊數量

pgpgout/s:每秒從內核寫入到磁碟的塊數量

fault/s:每秒鍾出現的缺頁異常的個數

majflt/s:每秒鍾出現的大頁異常的個數

pgfree/s:每秒回收回來的頁面個數

㈨ 我想給電腦裝個LINUX系統,電腦需要什麼樣的配置。LINUX最大支持多大內存。

linux對系統要求很低的,就算是十年前的配置都可以裝。這點可以放心。
32位的Linux的內存最大支持到4GB,64位的Linux的最大支持內存在EB級別上。實際上最大支持多大的內容跟操作系統的種類無關,而是跟操作系統是32位還是64位有關。
32位的Linux和32位的Windows支持的最大內存是4GB,2的32次方位元組=4294967296位元組
64位的Linux和Windows支持的最大內存=16EB,2的64次方位元組=18446744073709551616位元組
就是說你安裝64位的系統現在來說可以隨便你裝多大的內存都沒問題

㈩ 如何調高linux單進程使用的內存上限

修改/etc/security/limits.conf可以調整進程內存上限, 具體看 man limits.conf
但是我覺得你的問題可能在於java
一個是java版本,我估計32位版本可能只能用4GB,若是64位的版本就不會
另一個是 java 參數 -Xmx 你先看看現在的設置然後嘗試調高,看看是否有效

閱讀全文

與linux進程內存最大內存相關的資料

熱點內容
如何在vps上搭建自己的代理伺服器 瀏覽:742
nginxphp埠 瀏覽:401
內臟pdf 瀏覽:150
怎麼看雲伺服器架構 瀏覽:83
我的世界國際服為什麼登不進伺服器 瀏覽:994
微盟程序員老婆 瀏覽:928
intellij創建java 瀏覽:110
java連接odbc 瀏覽:38
啟動修復無法修復電腦命令提示符 瀏覽:359
手機編程是什麼 瀏覽:98
山東移動程序員 瀏覽:163
蘇州java程序員培訓學校 瀏覽:477
單片機液晶驅動 瀏覽:854
魔拆app里能拆到什麼 瀏覽:131
新預演算法的立法理念 瀏覽:144
wdcpphp的路徑 瀏覽:134
單片機p0口電阻 瀏覽:926
瀏覽器中調簡訊文件夾 瀏覽:594
五菱宏光空調壓縮機 瀏覽:68
為什麼app佔用幾百兆 瀏覽:680