查看Linux Server的内存使用率


在性能测试中关于Linux服务器,基本上都会有这样一个问题,服务器的内存使用率应该是多少? 服务器有足够的内存么?

我们首先使用top来实时查看进程,CPU使用率,内存使用率等等,类似于MS Window下的任务管理器,下图是一台Linux Server的运行结果:


可以看到 Mem:  33015148k total, 27321116k used,  5694032k free,   264136k buffers 

那我们能不能得出一个结论,内存使用率=used/total=27321116k/33015148k=82.7%? 可是实际上运行的任务并不多,为什么会有这么高的内存使用率? 而且即使停止一些进程的服务器内存也不会释放太多,此时即使运行一些很占内存的应用也没有任何问题,这是为什么呢?  答案其实很简单,这些看起来used很多的内存中,相当一部分部分是缓存,这就要说到Linux的内存管理机制了。


Linux中的Cache Memory
 Linux内存管理的一个原则就是尽量利用闲置的内存来提高系统整体性能。当读写文件的时候,Linux内核为了提高读写性能与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致在Linux系统在使用一段时间后,可用物理内存会逐渐变少。实际上Cache Memory在需要使用内存的时候会自动释放,所以完全不必担心Cache占用太多内存,可以认为Cached=Free.

那缓存改怎么查看? 注意看在Top命令的输出结果中,Mem那行后面有个buffers ,Swap那行后面有个cached,这两个就是缓存大小。所以如果要计算应用程序真正使用物理内存的情况,应该是Used-Cached-buffers才对,所以刚才top看到的物理内存使用情况为27321116k-264136k-14474764=12582216。所以内存使用率也不过40%。

另外,如果单纯想要看内存使用情况,用free命令其实更直观,下图是在相同的机器上运行 free -m 的结果:


其中第一行用全局角度描述系统使用的内存状况: 
total - 总物理内存 
used - 已使用内存,一般情况这个值会比较大,因为这个值包括了cache+应用程序使用的内存 
free - 完全未被使用的内存 
shared - 应用程序共享内存 
buffers - 缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加) 

cached - 缓存,用于已打开的文件 


注意-/+ buffers/cache:
-buffers/cache - 不包括缓存,应用程序物理内存使用情况,即 -buffers/cache=used-buffers-cached ,所以此时应用程序才用了12288MB内存 。 

+buffers/cache - 所有可供应用程序使用的内存大小,free加上缓存值,即+buffers/cache=free+buffers+cached ,所以此时还有19953MB内存可供程序使用。 




### 查看 Redis 内存使用情况的方法 在 Linux 环境下,可以通过多种方式来检查 Redis 的内存使用情况。以下是几种常用方法: #### 方法一:通过 `INFO` 命令获取 Redis 内部统计信息 Redis 提供了一个内置命令 `INFO`,它可以返回关于 Redis 实例的各种运行状态数据。其中,`used_memory` 和 `used_memory_rss` 是两个重要的字段。 - **`used_memory`** 表示 Redis 分配器分配的内存量(字节单位),这是 Redis 自身报告的内存消耗[^1]。 - **`used_memory_rss`** 则表示进程实际使用的物理内存大小(驻留集大小)。这个值通常会大于或等于 `used_memory`,因为操作系统的内存管理机制可能导致部分已释放的内存未被立即回收。 执行以下命令可以从客户端连接到 Redis 并查询其内存使用状况: ```bash redis-cli INFO memory ``` 此命令将输出详细的内存相关信息,例如最大内存限制 (`maxmemory`)、峰值内存使用量 (`used_memory_peak`) 等。 --- #### 方法二:利用操作系统工具监控 Redis 进程 除了依赖于 Redis 自己提供的统计数据外,还可以借助外部工具直接观察 Redis 运行时所占有的资源。 ##### 使用 `ps` 命令查看单个进程的内存占用率 下面这条指令能够展示指定 PID 对应的 Redis 服务当前占据了多少虚拟地址空间以及常驻内存数量: ```bash ps aux | grep redis-server ``` 或者更精确地定位某特定实例: ```bash ps -o pid,user,%mem,rss,command -C redis-server --sort=-rss | head -n 1 ``` 上述代码片段中的 `%mem` 字段代表该程序相对于总 RAM 容量的比例;而 `RSS`(Resident Set Size)则对应的是真正加载入主存储器的部分[^3]。 --- #### 方法三:调整系统参数影响 Redis 内存行为 有时为了更好地控制 Redis 如何处理大对象或是频繁变动的数据集合,有必要调节某些 Linux 内核级别的设置项比如 `vm.overcommit_memory` 参数。当将其设定为 1 时,意味着允许过度承诺(over-committing),即使没有足够的可用页面也依旧批准新的请求直到真的耗尽为止——这可能会减少因 OOM killer 而突然终止的风险但在极端情况下也可能引发其他问题[^2]。 要改变此项配置可编辑 `/etc/sysctl.conf` 文件并加入如下一行然后再重新加载生效即可: ```bash echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf && sysctl -p ``` 注意这种改动仅适用于特殊场景下的性能调优不应随意更改生产环境默认值除非完全理解后果。 --- ### 总结 综上所述,在 Linux 中有三种主要途径用于评估 Redis 的内存消费水平:一是依靠内部 API 获取精准数值;二是运用通用诊断手段像 top 或者 htop 来概览全局负载分布;最后则是深入探索底层架构特性从而实现精细化治理策略[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值