linux 會使用硬盤的一部分作爲SWAP分區,用來進行進程調度--進程是正在運行的程序--把當前不用的進程調成‘等待(standby)‘,甚至‘睡眠(sleep)’,一旦要用,再調成‘活動(active)’,睡眠的進程就躺到SWAP分區睡大覺,把內存空出來讓給‘活動’的進程。
若是內存夠大,應當告訴 linux 沒必要太多的使用 SWAP 分區, 能夠經過修改 swappiness 的數值。swappiness=0的時候表示最大限度使用物理內存,而後纔是 swap空間,swappiness=100的時候表示積極的使用swap分區,而且把內存上的數據及時的搬運到swap空間裏面。
在linux裏面,默認設置swappiness這個值等於60。html
如今通常1個G的內存可修改成10, 2個G的可改成5, 甚至是0。具體這樣作:
1.查看你的系統裏面的swappiness
$ cat /proc/sys/vm/swappiness
不出意外的話,你應該看到是 60
2.修改swappiness值爲10
$ sudo sysctl vm.swappiness=10
可是這只是臨時性的修改,在你重啓系統後會恢復默認的60,爲長治久安,還要更進一步:
$ sudo gedit /etc/sysctl.conf
在這個文檔的最後加上這樣一行:
vm.swappiness=10
而後保存,重啓。ok,你的設置就生效了。
node
通常來講,Linux的虛擬內存會根據系統負載自動調整。內存頁(page)swap到磁盤會顯著的影響Kafka的性能,而且Kafka重度使用page cache,若是VM系統swap到磁盤,那說明沒有足夠的內存來分配page cache。linux
避免swap的一種方式是設置swap空間爲0。可是,swap會在系統崩潰時提供安全機制,或者會在out of memory的狀況下阻止操做系統 kill 掉進程。因爲這個緣由,推薦 vm.swappiness參數設置爲一個很是低的值:1 。這個參數表示 VM系統中的多少百分比用來做爲swap空間。緩存
另一種方式是經過內核調節「髒頁」(注:「髒頁」會被刷到磁盤上)。Kafka依賴磁盤I/O性能來提升producer的響應時間。這也是爲何一般優先把log segment功能放在能夠快速響應的磁盤中(好比SSD)。這樣使得flush進程把「髒數據」寫入磁盤前,「髒頁」數目就減小了,能夠設置vm.dirty_background_ratio(表示佔用系統內存的百分比)參數的值爲10 如下。大部分應用場景下,vm.dirty_background_ratio設置爲 5 就夠用了,要注意了:這個參數值不能設置爲 0 ,由於設置爲 0 後會引發內核持續刷「髒頁」,使得內核的buffer write功能無法施展。安全
「髒頁」的總量能夠經過vm.dirty_ratio 來改變,默認值是 20 (此處也是百分比),這個值的設置範圍較大,通常建議設置 60 到 80 爲合理的值。可是vm.dirty_ratio 參數也引來了不小的風險,會形成大量unflush的數據在硬刷到磁盤時產生較長的I/O停頓。若是vm.dirty_ratio 值設置的較大時,強烈建議Kafka開啓備份功能,以備系統崩潰。服務器
在設置了這些參數後,須要監控Kafka集羣運行時「髒頁」的數量,當前「髒頁」數量可由以下方式查看(/proc/vmstat文件):數據結構
#cat /proc/vmstat | egrep "dirty|writeback"oracle
nr_dirty 3875app
nr_writeback 29post
nr_writeback_temp 0
臨時生效:sysctl -w vm.swappiness=0
永久生效:
echo "vm.swappiness = 0">> /etc/sysctl.conf (儘可能不使用交換分區,注意不是禁用)
刷新SWAP
能夠執行命令刷新一次SWAP(將SWAP裏的數據轉儲回內存,並清空SWAP裏的數據)
swapoff -a && swapon -a
sysctl -p (執行這個使其生效,不用重啓)
清理緩存命令
以前應該先
sync下
由於系統在操做的過程中,會把你的操做到的文件資料先保存到buffer中去,由於怕你在操做的過程當中由於斷電等緣由遺失數據,因此在你操做過程當中會把文件資料先緩存。
因此咱們在清理緩存先要先把buffe中的數據先寫入到硬盤中,sync命令
上面的echo 3 是清理全部緩存
echo 0 是不釋放緩存
echo 1 是釋放頁緩存
ehco 2 是釋放dentries和inodes緩存
echo 3 是釋放 1 和 2 中說道的的全部緩存
1>. /proc是一個虛擬文件系統,咱們能夠經過對它的讀寫操做做爲與kernel實體間進行通訊的一種手段。也就是說能夠經過修改/proc中的文件,來對當前kernel的行爲作出調整。也就是說咱們能夠經過調整/proc/sys/vm/drop_caches來釋放內存。
1 – 釋放頁緩存
2 – 釋放dentries和inodes
3 – 釋放全部緩存
To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;
to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentries and inodes, use echo 3 >/proc/sys/vm/drop_caches.
Because this is a non-destructive operation and dirty objects are not freeable, the user should run sync first.
目錄項緩存(dcache)dentries
total:總物理內存
used:已使用內存
free:徹底未被使用的內存
shared:應用程序共享內存
buffers:緩存,主要用於目錄方面,inode值等
cached:緩存,用於已打開的文件
-buffers/cache:應用程序使用的內存大小,used減去緩存值
+buffers/cache:全部可供應用程序使用的內存大小,free加上緩存值
total = used + free
-buffers/cache=used-buffers-cached,這個是應用程序真實使用的內存大小
+buffers/cache=free+buffers+cached,這個是 服務器 真實還可利用的內存大小
[oracle@cddserver1 ~]$ free -m
total used free shared buffers cached
Mem: 32096 10379 21717 0 38 7942
-/+ buffers/cache: 2398 29698Swap: 34287 0 34287 這裏面的第二行纔是真正服務器的空閒內存