内存:
概念:
主存
虚拟内存, 一个抽象的主存概念,几乎是无限的和非竞争性的(其实跟操作系统位数有一定关系), 并不是真实内存,它是对于内存的抽象,与真实内存拥有一定的映射关系
常驻内存
匿名内存 ,没有文件系统路径或者路径名的内存, 它包括进程地址空间的工作数据,一般叫做堆
地址空间 , 内存上下文, 每个进程和内核都有对应的虚拟地址空间
OOM 内存耗尽, 内存溢出
页 操作系统和cpu使用的内存单位, 一般是4k, 8K 有时候可以开启大页, 可以设置为2M
缺页 无效的内存访问
换页 主存与存储设备之间交换页
交换(空间) swap
虚拟内存:
是一个抽象概念,它向每个进程和内核提供巨大的,线性的并且私有的地址空间。 可以进行超额使用,因此虚拟机内存空间可以大于实际的内存空间,但是当用出超过实际的内存空间时,有可能发生换页,进行内存空间交换,产生大量的IO操作
分析工具:
-
top
-
ps
# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 41404 3728 ? Ss Jul05 0:06 /usr/lib/systemd/systemd --system --deserialize 17 root 2 0.0 0.0 0 0 ? S Jul05 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Jul05 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< Jul05 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S Jul05 0:00 [migration/0] [root@dev ~]# ps aux |sort -rnk4 |head -10 mysql 3255 0.0 9.8 980756 98964 ? Sl Jul19 0:28 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock root 50073 0.3 4.5 992184 45584 ? Sl 09:52 0:06 mongod -f /data/mongodb/conf/mongodb.cfg
ps aux |sort -rnk4 |head -10 查找内存使用高的进程
如果:
echo `cat /proc/meminfo |grep -i slab|awk '{print $2}'`/1024/1024|bc
输出值较大,则系统可能存在异常
%MEM 内存使用占比
RSS 常驻集合大小 KB
VSZ 虚拟内存大小
-
vmstat
# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 0 1272 139700 0 447832 0 0 5 20 48 210 0 0 99 0 0
swpd 交换除的内存量
free 空间的可用空间
buff 可用于缓冲缓存的内存
cache 用于页缓存的内存
si 换入的内存
so 换出的内存
-
sar
-B 换页统计信息
-H 大页面统计信息
-r 内存使用率
-R 内存统计信息
-S 交换空间统计信息
-W 交换统计信息
[root@mirror 46552]# sar -r Linux 3.10.0-123.el7.x86_64 (mirror) 07/07/2019 _x86_64_ (1 CPU) 12:00:01 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 12:10:01 AM 140168 863264 86.03 0 457524 463456 14.95 275312 309600 4 12:20:01 AM 139228 864204 86.12 0 459624 459776 14.83 274604 311576 0 12:30:01 AM 139164 864268 86.13 0 459628 459776 14.83 274608 311576 0 12:40:01 AM 139208 864224 86.13 0 459636 459776 14.83 274592 311576 0 12:50:02 AM 139176 864256 86.13 0 459668 459776 14.83 274612 311588 0 01:00:01 AM 119792 883640 88.06 0 459676 516524 16.66 292704 311624 0 01:10:01 AM 139076 864356 86.14 0 459736 459776 14.83 274636 311632 0 [root@mirror 46552]# sar -H Linux 3.10.0-123.el7.x86_64 (mirror) 07/07/2019 _x86_64_ (1 CPU) 12:00:01 AM kbhugfree kbhugused %hugused 12:10:01 AM 0 0 0.00 12:20:01 AM 0 0 0.00 12:30:01 AM 0 0 0.00 12:40:01 AM 0 0 0.00 12:50:02 AM 0 0 0.00 01:00:01 AM 0 0 0.00 01:10:01 AM 0 0 0.00 01:20:01 AM 0 0 0.00 01:30:01 AM 0 0 0.00 01:40:01 AM 0 0 0.00 01:50:01 AM 0 0 0.00 02:00:01 AM 0 0 0.00 Average: 0 0 0.00
-
slabtop 内存块分配统计信息
-
pmap 进程地址空间统计信息
列出进程的内存映射, 显示它们的大小,权限,及映射的对象。 这使进程内存使用能被仔细地检查以及量化共享内存
# pmap -x 47299 47299: /usr/lib64/erlang/erts-10.4/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1 048576 -t 5000000 -stbt db -zdbbl 128000 -K true -- -root /usr/lib64/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/li b/rabbitmq/lib/rabbitmq_server-3.7.15/ebin -noshell -noinput -s rabbit boot -sname rabbit@mirror -boot start_sasl -config /etc/rab bitmq/rabbitmq -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -ra Address Kbytes RSS Dirty Mode Mapping 0000000000400000 3620 2736 0 r-x-- beam.smp 0000000000988000 4 4 4 r---- beam.smp 0000000000989000 116 68 32 rw--- beam.smp 00000000009a6000 200 188 188 rw--- [ anon ] 0000000001736000 132 116 116 rw--- [ anon ] 00007fb590000000 32 4 4 rw--- [ anon ] ..... ffffffffff600000 4 0 0 r-x-- [ anon ] ---------------- ------- ------- ------- total kB 1816508 70896 66336
-
free
-
dmesg 检查oom 信息
-
iostat
-
perf
-
/proc/zoneinfo
-
/proc/buddyinfo