Linux 性能調優內存篇:工具命令篇


 

系統內存

free

free -mh
  • 第一列,total 是總內存大小;
  • 第二列,used 是已使用內存的大小,包含了共享內存;
  • 第三列,free 是未使用內存的大小;
  • 第四列,shared 是共享內存的大小;
  • 第五列,buff/cache 是緩沖區和緩存的大小;
  • 最后一列,available 是新進程可用內存的大小。

注意:

1、total = used + free + buff/cache
2、available:vailable 不僅包含未使用內存,還包括了可回收的緩存(cache),所以一般會比未使用內存更大。不過,並不是所有緩存都可以回收,因為有些緩存可能正在使用中。

 vmstat

當使用free查看buff/cache使用的內存后,再使用vmstat查看詳細的使用量。

hcache

當我們想具體查看cache被哪些進程所使用就需要使用到hcache。

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

先安裝go環境

mkdir  /usr/local/go
cd
/usr/local/go
wget https://dl.google.com/go/go1.7.6.linux-amd64.tar.gz

vi /etc/profile export GOROOT=/usr/local/go export PATH=/usr/local/go/bin:$PATH source /etc/profile

安裝hcache

wget https://silenceshell-1255345740.cos.ap-shanghai.myqcloud.com/hcache
chmod +x hcache
mv hcache /usr/local/bin/

查看使用緩存最多的3個文件

hcache -top 3

查看使用緩存最多的3個文件(文件一列指顯示文件名)

hcache --top 3 --bname

查看指定進程的緩存使用

hcache -pid 1397

進程內存

top

  • VIRT 是進程虛擬內存的大小,只要是進程申請過的內存,即便還沒有真正分配物理內存,也會計算在內。
  • RES 是常駐內存的大小,也就是進程實際使用的物理內存大小,但不包括 Swap 和共享內存。
  • SHR 是共享內存的大小,比如與其他進程共同使用的共享內存、加載的動態鏈接庫以及程序的代碼段等。
  • %MEM 是進程使用物理內存占系統總內存的百分比。

系統緩存的命中率

cachestat

cachestat 1 3 
TOTAL MISSES HITS DIRTIES BUFFERS_MB CACHED_MB
2 0 2 1 17 279

2 0 2 1 17 279

2 0 2 1 17 279
  • TOTAL ,表示總的 I/O 次數;
  • MISSES ,表示緩存未命中的次數;
  • HITS ,表示緩存命中的次數;
  • DIRTIES, 表示新增到緩存中的臟頁數;
  • BUFFERS_MB 表示 Buffers 的大小,以 MB 為單位;
  • CACHED_MB 表示 Cache 的大小,以 MB 為單位。

進程緩存的命中率

cachetop

cachetop11:58:50 Buffers MB: 258 / Cached MB: 347 / Sort: HITS / Order: ascending
PID UID CMD HITS MISSES DIRTIES READ_HIT% WRITE_HIT%
13029 root python 1 0 0 100.0% 0.0%

默認按照緩存的命中次數(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
最后一行添加
/var/swap swap swap defaults 0 0
再查看內存,已經設置了swap了,執行上面命令導致buff/cache里面多了不少內存,過段時間會減少,或者直接重啟可以清掉
[root@JD ~]# free -m
total used free shared buff/cache available
Mem: 3789 154 1286 8 2348 3379
Swap: 1999 0 1999

reboot重啟后再查看結果如下:
[root@JD ~]# free -m
total used free shared buff/cache available
Mem: 3789 146 3411 8 232 3414
Swap: 1999 0 1999

如果不再需要swap,可以清理該分區:
[root@mysql01 var]# swapoff /var/swap

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM