久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Linux下Swap的用法

148次閱讀
沒有評論

共計 4576 個字符,預計需要花費 12 分鐘才能閱讀完成。

這篇文章主要講解了“Linux 下 Swap 的用法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“Linux 下 Swap 的用法”吧!

Linux 操作系統性能分析主要包含磁盤 IO、CPU、內存以及網絡流量,而這里主要針對系統內存的使用進程情況做個分析。
一、如何查看系統內存使用情況
1、根據常用命令查看系統內存使用概況
free  -g
        total  used  free  shared  buffers  cached
Mem:  31  31  0  0  0  3
-/+ buffers/cache:  28  3
Swap:  15  7  7
(根據 free 命令可以看到,系統使用了 28G 的物理內存,3G 的剩余內存,其中 swap 總 15G,已使用 7G)

top (f p M)
top – 14:18:50 up 1280 days,  7:15,  1 user,  load average: 1.05, 1.25, 1.12
Tasks: 229 total,  1 running, 227 sleeping,  0 stopped,  1 zombie
Cpu(s):  0.2%us,  0.1%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  32949816k total, 32848840k used,  100976k free,  169308k buffers
Swap: 16771776k total,  8384616k used,  8387160k free,  3276360k cached

  PID USER  PR  NI  VIRT  RES  SHR S %CPU %MEM  TIME+  SWAP DATA COMMAND   
12428 mysql  15  0 22.2g  20g 3964 S  3.3 66.5  91946:06 1.3g  22g mysqld   
22840 cyldj  15  0 9059m 6.7g 9012 S  0.0 21.5  22:05.42 2.1g 8.7g DBAgent   
28689 root  15  0  358m  30m 3036 S  0.0  0.1 187:37.41 328m 137m salt-minion   
30768 cyldj  21  0  462m  10m 1908 S  0.0  0.0  10:44.60 451m 373m java   
22567 root  15  0 86004 3292 2576 S  0.0  0.0  0:00.01  80m  688 sshd   
28690 root  20  0  267m 2188  704 S  0.0  0.0  0:00.00 264m  47m salt-minion   
  661 root  18  0 16340 1836 1632 S  0.0  0.0  0:47.42  14m  308 zabbix_agentd   
22569 root  15  0 68156 1520 1188 S  0.0  0.0  0:00.02  65m  408 bash   
 2901 root  18  0  197m 1336  884 S  0.0  0.0  4:04.57 196m 174m AxisAgent   
11236 root  15  0 60672 1324  760 S  0.0  0.0  2:01.21  57m  608 sshd   
  665 root  15  0 18432 1260  992 S  0.0  0.0  11:39.82  16m  308 zabbix_agentd   
  662 root  15  0 18432 1256  992 S  0.0  0.0  11:43.36  16m  308 zabbix_agentd
(根據 top 命令可以看到使用內存最大的進程是 mysql 進程,其次是 dbagent,其中 dbagent 使用的交換分區較多)

nmon (m)

nmon 下載地址:
https://sourceforge.net/projects/nmon/files/nmon_x86_64_rhel5/download (RHEL5)
https://sourceforge.net/projects/nmon/files/nmon_linux_14i_newer_Linux_versions.tar.gz/download(RHEL6)
(通過 nmon 可以看到內存的詳細分配情況,其中總內存為 32177.6 MB,總 swap 16378.7 MB , 空閑 93.4 MB,可回收 3188.2+166.5 MB,已使用交換分區 7273.6MB,已使用的活動數據大小為 30099.9MB,可以被交換出內存的數據大小為 1590.7  MB)

2、根據系統監控查看系統內存使用情況

(近 7 天的內存使用情況)
3、查看指定進程的系統內存使用信息
cat /proc/22840/statm
#virt  res  shr  text lib data dt  
2319113 1768037 2253 3836 0 2292997 0
(上述是查看 dbagent 的內存使用信息,其中單位是頁數,所以要看系統頁大小 4K,第一列是虛擬內存 2319113 頁,第二列是駐留內存 1768037 頁,第三列是共享內存 2253 頁,進程獨占內存大小為 res-shr)
getconf  PAGESIZE
4096
awk /^Swap:/ {SWAP+=$2}END{print SWAP KB} /proc/${pid}/smap
for i in `cd /proc;ls |grep ^[0-9] |awk $0 100 do awk /Swap:/{a=a+$2}END{print $i ,a/1024 M} /proc/$i/smaps ;done |sort -k2nr
(上述命令可以查看進程虛擬內存使用情況)
cat /proc/22840/status |grep Vm
VmPeak:  9341632 kB
VmSize:  9276452 kB
VmLck:  0 kB
VmHWM:  7074296 kB
VmRSS:  7073540 kB
VmData:  9171904 kB
VmStk:  84 kB
VmExe:  15344 kB
VmLib:  4728 kB
VmPTE:  15596 kB
(上述命令可以查看指定進程的內存使用情況 VmSize 表示虛擬內存大小,VmRSS 表示駐留內存大小)
二、綜合分析 MYSQL 數據庫內存使用情況
sh show_mem_usage.sh
全局內存大小:18592.00 MB
單線程最大內存:25.18 MB
最大線程占用內存:8815.62 MB
歷史最大線程占用內存:5213.81 MB
Innodb Buffer Pool 使用率: 99.00%
從 mysql 的內存使用和總的物理內存使用來看,服務器的內存使用已經基本達到上限(mysql 駐留內存大約是 21G,dbagent 大約為 7G,物理總內存為 31G,緩存了 3G,大約有 2G 左右的非活動區內存),當 mysql 進程、dbagent 使用超過 5G 內存,物理內存不夠,就會使用到了 swap 分區。
三、什么情況下會使用 swap 分區
1、物理內存確實不夠用的情況下,會使用到 swap 分區。
2、物理內存還有足夠的內存使用,比如 cache,buffer 的剩余較多的情況下使用了 swap 分區
四、使用 swap 分區擴展
如果有足夠的物理內存,依舊使用了 swap 分區,可以從以下幾方面查看為什么使用了 swap 分區
1、swap 分區比例調整
cat /etc/sysctl.conf  |grep swap   
vm.swappiness=0
設置為 0 表示優先最大限度的使用物理內存緩存數據,而不是磁盤作為分區,值越大越不利于物理內存的充分利用
2、numa 陷阱

為了提高 cpu 和內存的數據訪問速度、并發度,設計了 numa 架構,但如果 numa 的內存分配策略不合理,那么將會嚴重影響到內存的使用,尤其是對大內存塊使用的數據庫服務器。
#numactl –hardware 
available: 2 nodes (0-1)
node 0 size: 16160 MB
node 0 free: 15 MB
node 1 size: 16131 MB
node 1 free: 78 MB
node distances:
node  0  1
  0:  10  20
  1:  20  10
(上述命令可以查看各個 node 節點的物理內存分配情況,可以看到兩節點的內存分配比例基本平均,如果 node0 節點 free 和和 node1 的 free 值相差較大,說明分配策略存在問題,很大可能會帶來 swap 使用,而物理內存空閑的狀態)
也可以通過查看 numastat 查看 numa 的 miss 和 hit 比例來進一步確認
#numastat
  node0  node1
numa_hit  39150779957  38736256884
numa_miss  2658848763  8851827358
numa_foreign  8851827296  2658848763
interleave_hit  122652306  137287417
local_node  39096884744  38598664497
other_node  2712743976  8989419745
3、解決方案
(1)啟用大頁管理
(2)關閉 numa
***BIOS 關閉 NUMA
*** 啟動內核關閉:
vi /boot/grub/grub.conf
kernel /boot/vmlinuz-2.6.18-128.1.16.0.1.el5 root=LABEL=DBSYS ro bootarea=dbsys rhgb quiet console=ttyS0,115200n8 console=tty1 crashkernel=128M@16M numa=off
重啟操作系統,通過 cat /proc/cmdline 和 numactl –hardware 查看是否關閉
(3)調整內核參數
內核參數:zone_reclaim_mode,如果為 0 的話,那么系統會傾向于從其他節點分配內存,如果是 1 表示系統會傾向于從本地節點回收 Cache 內存多數時候
  vm.swappiness=0
echo 0 /proc/sys/vm/zone_reclaim_mode ; echo vm.zone_reclaim_mode = 0 /etc/sysctl.conf
(4)調整內核參數
Mysql 可以調整相關參數、交叉啟動方式來改善 numa,例如 numactl –interleave=all  /etc/init.d/mysql start
localalloc 規定進程從當前 node 上請求分配內存;
preferred 比較寬松地指定了一個推薦的 node 來獲取內存,如果被推薦的 node 上沒有足夠內存,進程可以嘗試別的 node。
membind 可以指定若干個 node,進程只能從這些指定的 node 上請求分配內存。
interleave 規定進程從指定的若干個 node 上以 RR(Round Robin 輪詢調度)算法交織地請求分配內存。

#NUMA support

numa_interleave = 1
innodb_buffer_pool_populate = 1
flush_caches=1

感謝各位的閱讀,以上就是“Linux 下 Swap 的用法”的內容了,經過本文的學習后,相信大家對 Linux 下 Swap 的用法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-01發表,共計4576字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 西平县| 寿宁县| 清新县| 甘谷县| 蓬安县| 泽库县| 定西市| 建水县| 永丰县| 涡阳县| 葵青区| 巴彦淖尔市| 富平县| 界首市| 曲沃县| 老河口市| 冀州市| 东台市| 桓仁| 台南县| 铁力市| 琼海市| 通海县| 寿阳县| 霍山县| 扎鲁特旗| 隆尧县| 长海县| 共和县| 措美县| 绵阳市| 双牌县| 分宜县| 灌南县| 玉树县| 大丰市| 长武县| 南京市| 雅安市| 凉城县| 安陆市|