(18.3)项目实战:内存信息收集(配合zabbix)

1.不同操作系统提取内存信息注意点

  • 不同操作系统要注意free -m提取内存信息的区别:
    上面是Centos 7:内存使用了339M,还剩下15G,看available
    下面是Centos 6:内存使用了770M,还剩余15G。因为Linux会将内存作为文件的缓存使用,15912并不是程序进程真正使用的内存,而是作为inode缓存使用
    在这里插入图片描述

  • 脏页、页缓存、硬盘数据的关系
    小数据块称为blocksize,也叫page内存页x86的页缓存大小为4k,无论是从磁盘中读还是写数据,都会将其加载到内存页中,写完以后,一页不够,可能需要很多页,这些页就称为脏页,修改的数据发生在内存中,需要持久化到磁盘中去保存(也就是写脏页的过程)
    在这里插入图片描述

  • 因为需要配合zabbix,所以会写成这样的函数

#!/bin/bash
MemTotal()
{
	awk '/^MemTotal/{print $2}' /proc/meminfo
}
MemFree()
{
	awk '/^MemFree/{print $2}' /proc/meminfo
}
Dirty()
{
	awk '/^Dirty/{print $2}' /proc/meminfo
}
Buffers()
{
	awk '/^Buffers/{print $2}' /proc/meminfo
}
$1

执行./memory.sh MemFree
  • watch -n.5
    每隔5s看一次
watch -n.5 grep 'Dirty' /proc/meminfo
  • 结合脏页的概念看cp指令的执行过程
    cp表示将数据从硬盘中读取到内存中这些页上,然后copy到内存中的另一些页上去,最后将这些数据持久化到硬盘中去。
    cp命令结束仅仅代表:将内存中的一块脏页拷贝到另一个脏页中去
    磁盘写入是异步的,sync表示:立刻将脏页写到硬盘中(刷脏页),sync结束表示数据持久化(持久化表示数据掉电不丢失)到硬盘中去了
    在这里插入图片描述

2. 手工释放linux内存

[root@testserver ~]# uname -a
Linux testserver 2.6.18-164.el5 #1 SMP Thu Sep 3 03:28:30 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

[root@testserver ~]# free -m
              total        used        free      shared     buffers      cached
Mem:          2013        1661         352           0         223        1206
-/+ buffers/cache:         231        1782
Swap:          2047           0        2047

[root@testserver ~]# sync
[root@testserver ~]# sync
[root@testserver ~]# cat /proc/sys/vm/drop_caches 0
[root@testserver ~]# echo 3 > /proc/sys/vm/drop_caches
[root@testserver ~]# cat /proc/sys/vm/drop_caches      3
[root@testserver ~]# free -m
              total        used        free      shared     buffers      cached
Mem:           2013         100        1913           0           0          14
-/+ buffers/cache:          85        1927
Swap:          2047           0        2047

[root@testserver ~]# 测试成功

参考:手工释放linux内存——/proc/sys/vm/drop_caches

3.Linux中的空闲内存与已使用的内存

  • 如何运行 free
    不带选项运行会显示一个以KB为单位的默认输出。
    在这里插入图片描述
Mem:表示物理内存统计
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况

第一行:
Total(全部) : 1026740			表示物理内存总量
Used(已用) : 843396				表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用
Free(可用) : 183344			未被分配的内存
Shared(共享) : 0			共享内存,一般系统不会用到,这里也不讨论。
Buffers(块设备缓存区) : 52704				系统分配但未被使用的buffers 数量
Cached(文件缓存) : 376384			系统分配但未被使用的cache 数量
buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.
cached是用来给文件做缓冲。
那就是说:buffers是用来存储,目录里面有什么内容,权限等等。而cached直接用来记忆我们打开的文件

第二行: -/+ buffers/cached
used:也就是第一行中的used - buffers-cached   也是实际使用的内存总量。
free:未被使用的buffers 与cached 和未被分配的内存之和,这就是系统当前实际可用内存=free+buffers+cached

因为buffers和cached是系统为了提高性能申请的内存数,实际上当应用程序需要此功能时,是可以使用这些内存的,
所以对应用程序来说,这些内存也是可以使用的。

第三行
Swap (以KB计)
Total(全部) : 1045500
Used(已用) : 3376			显示使用量
Free(可用) : 1042124		有多少空闲的交换区

当你看见 buffer/cache 的空闲空间低或者 swap 的空闲空间低,说明内存需要升级了。这意味这内存利用率很高。
请注意 shared(共享)内存列应该被忽略 ,因为它已经被废弃了。

4.shell log

function log()
{
    local contend="$(date '+%Y-%m-%d %H:%M:%S') $@"
    echo -e "\033[32m"  "${contend}" "\033[0m"
}

more:挺好用 ! shell脚本日志技巧

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值