青青热久久久久综合精品,日韩国产欧美亚洲精品一二三区,亚洲国产欧美日本视频,中文字幕福利在线观看

            广州 「切換城市」 培訓(xùn)家旗下培訓(xùn)平臺(tái)
            手機(jī)版
            網(wǎng)站導(dǎo)航

            記一次內(nèi)存占用問(wèn)題的調(diào)查過(guò)程

            2020.02.21

            發(fā)布者:廣州小碼王教育

              最近在維護(hù)一臺(tái)CentOS服務(wù)器的時(shí)候,發(fā)現(xiàn)內(nèi)存無(wú)端"損失"了許多,free和ps統(tǒng)計(jì)的結(jié)果相差十幾個(gè)G,搞的我一度又以為遇到靈異事件了,后來(lái)Google了許久才搞明白,特此記錄一下,以供日后查詢。
              雖然天天都在用Linux系統(tǒng)辦公,其實(shí)對(duì)它的了解也不過(guò)爾爾。畢業(yè)幾年才邁入"知道自己不知道"的境界,我覺(jué)得自己絲毫沒(méi)有愧對(duì)萬(wàn)年吊車尾這個(gè)稱號(hào) :(
              同事說(shuō)有一臺(tái)服務(wù)器的內(nèi)存用光了,我連上去用free看了下,確實(shí)有點(diǎn)怪。

            $ free -g
                         total       used       free     shared    buffers     cached
            Mem:            15         15          0          0          2          0
            /+ buffers/cache:         12          2
            Swap:           17          0         17

              這臺(tái)服務(wù)器有16G內(nèi)存,但是結(jié)果顯示除了2G左右的文件Buffer緩存外,其余十幾G都被確確實(shí)實(shí)的用光了。(free按1024進(jìn)制計(jì)算,總內(nèi)存可能比實(shí)際偏小)
              這里大概介紹下free結(jié)果的含義:

            /totalusedfreesharedbufferscached
            Mem總物理內(nèi)存當(dāng)前使用的內(nèi)存(包括slab+buffers+cached)完全沒(méi)有使用的內(nèi)存進(jìn)程間共享的內(nèi)存緩存文件的元數(shù)據(jù)1緩存文件的具體內(nèi)容1
            /+ buffers/cache當(dāng)前使用的內(nèi)存(不包括buffers+cached,但包括slab)未使用和緩存的內(nèi)存(free+buffers+cached)
            Swap總的交換空間已使用的交換空間未使用的交換空間

              然后top看了下,沒(méi)有特別吃內(nèi)存的程序。用ps大概統(tǒng)計(jì)下所有程序占用的總內(nèi)存:

            $ ps aux | awk '{mem += $6} END {print mem/1024/1024}'
            0.595089

              結(jié)果顯示所有進(jìn)程占用的內(nèi)存還不到1G,實(shí)際上,因?yàn)閒ree, ps的統(tǒng)計(jì)方式的差別和Copy-on-write和Shared libraries等內(nèi)存優(yōu)化機(jī)制的存在,這兩者的統(tǒng)計(jì)結(jié)果通常是不一樣的。但是一般情況下**不會(huì)相差十幾個(gè)G,肯定是有什么隱藏的問(wèn)題,Google了許久后發(fā)現(xiàn),free沒(méi)有專門統(tǒng)計(jì)另一項(xiàng)緩存: Slab。
              Slab Allocation是Linux 2.2之后引入的一個(gè)內(nèi)存管理機(jī)制,專門用于緩存內(nèi)核的數(shù)據(jù)對(duì)象,可以理解為一個(gè)內(nèi)核專用的對(duì)象池,可以提高系統(tǒng)性能并減少內(nèi)存碎片。(Linux 2.6.23之后,SLUB成為了默認(rèn)的allocator。)
              查看Slab緩存

            $ cat /proc/meminfo

            其中,Slab相關(guān)的數(shù)據(jù)為

            Slab:             154212 kB
            SReclaimable:      87980 kB
            SUnreclaim:        66232 kB

            SReclaimable(Linux 2.6.19+)都是clean的緩存,隨時(shí)可以釋放?;氐街暗膬?nèi)存問(wèn)題,我查了下那臺(tái)服務(wù)器上Slab占用的內(nèi)存:

            $ cat /proc/meminfo | grep Slab
            Slab:         12777668 kB

              12G的Slab緩存,有意思的是free把Slab緩存統(tǒng)計(jì)到了used memory中,這就是之前那個(gè)問(wèn)題的癥結(jié)所在了。
              另外,還可以查看/proc/slabinfo(或使用slabtop命令)來(lái)查看Slab緩存的具體使用情況。結(jié)果發(fā)現(xiàn),ext3_inode_cache和dentry_cache占用了絕大部分內(nèi)存。
              考慮到這臺(tái)服務(wù)器會(huì)頻繁地用rsync同步大量的文件,這個(gè)結(jié)果也并不意外。
              先說(shuō)明一下,如果問(wèn)題僅僅是Slab占用了太多的內(nèi)存(SReclaimable),那么通常不需要太操心,因?yàn)檫@根本不是個(gè)問(wèn)題(如果是 SUnreclaim太多且不斷增長(zhǎng),那么很有可能是內(nèi)核有bug)。但是,如果是因?yàn)镾lab占用內(nèi)存太多而引起了其他的問(wèn)題,建議繼續(xù)閱讀。
              清除Slab可回收緩存
              通過(guò)/proc/sys/vm/drop_caches這個(gè)配置項(xiàng),我們可以手動(dòng)清除指定的可回收緩存(SReclaimable)2。

            echo 2 > /proc/sys/vm/drop_caches

              上面的命令會(huì)主動(dòng)釋放Slab中clean的緩存(包括inode和dentry的緩存),然后再free -g一下,未使用的內(nèi)存陡增了十幾個(gè)G。。。
              需要注意的是,手動(dòng)清除緩存可能會(huì)在一段時(shí)間內(nèi)降低系統(tǒng)性能。原則上不推薦這么做,因?yàn)槿绻行枰?,系統(tǒng)會(huì)自動(dòng)釋放出內(nèi)存供其他程序使用。
              另外,手動(dòng)清除Slab緩存是一個(gè)治標(biāo)不治本的辦法。因?yàn)閱?wèn)題不在Slab,而在于我們那個(gè)會(huì)引起Slab緩存飆漲的進(jìn)程(我這里應(yīng)該是 rsync)。實(shí)際操作的時(shí)候發(fā)現(xiàn),清除緩存一段時(shí)間后,Slab緩存很快又會(huì)“反彈”回去。如果需要治本,要么搞定問(wèn)題進(jìn)程,要么修改系統(tǒng)配置。
              調(diào)整系統(tǒng)vm配置
              風(fēng)險(xiǎn)預(yù)警: 調(diào)整以下系統(tǒng)配置可能會(huì)對(duì)系統(tǒng)性能造成負(fù)面影響,請(qǐng)仔細(xì)測(cè)試并謹(jǐn)慎操作。
              /etc/sysctl.conf里有幾個(gè)對(duì)內(nèi)存管理影響比較大的配置,以下配置項(xiàng)的文檔見(jiàn)vm.txt。
              vm.vfs_cache_pressure
              系統(tǒng)在進(jìn)行內(nèi)存回收時(shí),會(huì)先回收page cache, inode cache, dentry cache和swap cache。vfs_cache_pressure越大,每次回收時(shí),inode cache和dentry cache所占比例越大3。
              vfs_cache_pressure默認(rèn)是100,值越大inode cache和dentry cache的回收速度會(huì)越快,越小則回收越慢,為0的時(shí)候完全不回收(OOM!)。


              圖片取自The Linux Kernel's VFS Layer
              vm.min_free_kbytes
              系統(tǒng)的"保留內(nèi)存"的大小,"保留內(nèi)存"用于低內(nèi)存狀態(tài)下的"atomic memory allocation requests"(eg. kmalloc + GFP_ATOMIC),該參數(shù)也被用于計(jì)算開始內(nèi)存回收的閥值,默認(rèn)在開機(jī)的時(shí)候根據(jù)當(dāng)前的內(nèi)存計(jì)算所得,越大則表示系統(tǒng)會(huì)越早開始內(nèi)存回收。
              min_free_kbytes過(guò)大可能會(huì)導(dǎo)致OOM,太小可能會(huì)導(dǎo)致系統(tǒng)出現(xiàn)死鎖等問(wèn)題。
              vm.swappiness
              該配置用于控制系統(tǒng)將內(nèi)存swap out到交換空間的積極性,取值范圍是[0, 100]。swappiness越大,系統(tǒng)的交換積極性越高,默認(rèn)是60,如果為0則不會(huì)進(jìn)行交換。
              man proc
              The Linux Kernel's VFS Layer
              The VFS in Linux Kernel V2.4
              openSUSE: System Analysis and Tuning Guide, Chapter 15. Tuning the Memory Management Subsystem
              Red Hat Enterprise Linux, 5.5 Tuning Virtual Memory
              Odd behavior
              Wikipedia:Slab allocation
              Linux System IO Monitoring
              Paging
              Understanding the Linux Virtual Memory Manager
              Understanding the Linux Kernel, 3rd Edition
              1 2
              Red Hat Enterprise Linux,5.1 Checking the Memory Usage,引用于2014-12-12。
              Linux kernel documentation, sysctl#vm,引用于2014-12-12。
              @TODO: 需要查看相關(guān)內(nèi)核代碼來(lái)確認(rèn),不過(guò)看vm.txt里的描述應(yīng)該是這個(gè)意思。

            上一篇:早教那點(diǎn)小事 下一篇:開源分布式存儲(chǔ)之我見(jiàn)

            推薦機(jī)構(gòu)

            熱門課程

            廣州小碼王教育推薦

            在這里,廣州市小碼王少兒編程為您提供5個(gè)優(yōu)質(zhì)課程,覆蓋少兒科技培訓(xùn)、少兒編程培訓(xùn)、青少年編程培訓(xùn)等方面的課程信息,在這里您可以查詢到課程報(bào)價(jià),學(xué)校位置,電話、開課時(shí)間等選課信息,網(wǎng)上預(yù)訂廣州市小碼王少兒編程免費(fèi)試聽課程,還可以體驗(yàn)不可思議低價(jià)驚喜。

            本站展示的所有信息內(nèi)容系由機(jī)構(gòu)或個(gè)人用戶發(fā)布,可能存在發(fā)布者所發(fā)布的信息,并未獲得品牌所有人有效授權(quán)。本平臺(tái)會(huì)加強(qiáng)審核,但無(wú)法完全排除差錯(cuò)或疏漏。鄭重聲明:本平臺(tái)僅為免費(fèi)注冊(cè)用戶提供免費(fèi)的信息發(fā)布渠道,但不對(duì)其發(fā)布信息的真實(shí)性、準(zhǔn)確性和合法性負(fù)責(zé),對(duì)此也不承擔(dān)任何法律責(zé)任。對(duì)于從本網(wǎng)站或本網(wǎng)站的任何有關(guān)服務(wù)所獲得的資訊、內(nèi)容或廣告,您接受或信賴任何信息所產(chǎn)生之風(fēng)險(xiǎn)應(yīng)自行承擔(dān),本網(wǎng)對(duì)任何使用或提供本網(wǎng)站信息的商業(yè)活動(dòng)及其風(fēng)險(xiǎn)不承擔(dān)任何責(zé)任。,如果侵犯,請(qǐng)及時(shí)通知我們,發(fā)送郵件至15610150293@126.com本網(wǎng)站將在第一時(shí)間及時(shí)刪除。