天天看點

Linux 性能調優記憶體篇:工具指令篇

系統記憶體

第一列,total 是總記憶體大小;

第二列,used 是已使用記憶體的大小,包含了共享記憶體;

第三列,free 是未使用記憶體的大小;

第四列,shared 是共享記憶體的大小;

第五列,buff/cache 是緩沖區和緩存的大小;

最後一列,available 是新程序可用記憶體的大小。

注意:

1、total = used + free + buff/cache

2、available:vailable 不僅包含未使用記憶體,還包括了可回收的緩存(cache),是以一般會比未使用記憶體更大。不過,并不是所有緩存都可以回收,因為有些緩存可能正在使用中。

當使用free檢視buff/cache使用的記憶體後,再使用vmstat檢視詳細的使用量。

Linux 性能調優記憶體篇:工具指令篇

當我們想具體檢視cache被哪些程序所使用就需要使用到hcache。

hcache要求go的版本不得低于1.4.本次使用go1.7

先安裝go環境

安裝hcache

檢視使用緩存最多的3個檔案

檢視使用緩存最多的3個檔案(檔案一列指顯示檔案名)

檢視指定程序的緩存使用

程序記憶體

VIRT 是程序虛拟記憶體的大小,隻要是程序申請過的記憶體,即便還沒有真正配置設定實體記憶體,也會計算在内。

RES 是常駐記憶體的大小,也就是程序實際使用的實體記憶體大小,但不包括 Swap 和共享記憶體。

SHR 是共享記憶體的大小,比如與其他程序共同使用的共享記憶體、加載的動态連結庫以及程式的代碼段等。

%MEM 是程序使用實體記憶體占系統總記憶體的百分比。

系統緩存的命中率

cachestat

TOTAL ,表示總的 I/O 次數;

MISSES ,表示緩存未命中的次數;

HITS ,表示緩存命中的次數;

DIRTIES, 表示新增到緩存中的髒頁數;

BUFFERS_MB 表示 Buffers 的大小,以 MB 為機關;

CACHED_MB 表示 Cache 的大小,以 MB 為機關。

程序緩存的命中率

cachetop

預設按照緩存的命中次數(HITS)排序,展示了每個程序的緩存命中情況。這裡的 HITS、MISSES 和 DIRTIES ,跟 cachestat 裡的含義一樣,分别代表間隔時間内的緩存命中次數、未命中次數以及新增到緩存中的髒頁數。

而 READ_HIT 和 WRITE_HIT ,分别表示讀和寫的緩存命中率。

SWAP

設定swap大小

swap的值都是安裝系統的時候設定好的,一般設定為記憶體的兩倍大小。使用過程中發現swap值過小隻能添加。

用free -m 指令檢視目前swap大小

使用下面的指令建立2G的空間

dd if=/dev/zero of=/var/swap bs=1024 count=2048000

if 表示infile,of表示outfile,bs=1024代表增加的子產品大小,count=2048000代表2048000個子產品,也就是2G空間

将目的檔案設定為swap分區檔案

mkswap /var/swap

激活swap,立即啟用交換分區檔案

mkswap -f /var/swap

free -m檢視swap已經增加了,但這隻是臨時性的,如果機器重新開機會失效

vi /etc/fstab

最後一行添加

/var/swap swap swap defaults 0 0

重新開機或free -m測試 swap添加成功

下面是實戰指令:

[root@JD ~]# free -m

total used free shared buff/cache available

Mem: 3789 130 3401 8 258 3432

Swap: 0 0 0

[root@JD ~]# dd if=/dev/zero of=/var/swap bs=1024 count=2048000

2048000+0 records in

2048000+0 records out

2097152000 bytes (2.1 GB) copied, 19.4374 s, 108 MB/s

[root@JD ~]# mkswap /var/swap

Setting up swapspace version 1, size = 2047996 KiB

no label, UUID=a23c9dd9-87af-4517-8d70-bff7c714c18f

[root@JD ~]# swapon /var/swap

swapon: /var/swap: insecure permissions 0644, 0600 suggested.

[root@JD ~]# cat /proc/swaps

Filename Type Size Used Priority

/var/swap file 2047996 0 -2

[root@JD ~]# vim /etc/fstab

-bash: vim: command not found

讓上面指令在重新開機後仍然生效需要以下操作:

[root@JD ~]# vi /etc/fstab

再檢視記憶體,已經設定了swap了,執行上面指令導緻buff/cache裡面多了不少記憶體,過段時間會減少,或者直接重新開機可以清掉

Mem: 3789 154 1286 8 2348 3379

Swap: 1999 0 1999

reboot重新開機後再檢視結果如下:

Mem: 3789 146 3411 8 232 3414

如果不再需要swap,可以清理該分區:

[root@mysql01 var]# swapoff /var/swap