日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux内存使用策略swap,Linux Swap使用分析

發布時間:2024/8/23 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内存使用策略swap,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下載地址:

(RHEL5)

(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=0echo 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

%E4%BA%A4%E5%8F%89%E6%A8%A1%E5%BC%8F%E5%90%AF%E5%8A%A8%E8%AF%B4%E6%98%8E/

總結

以上是生活随笔為你收集整理的linux内存使用策略swap,Linux Swap使用分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。