内存cached占用分析

最近在进行项目压测,并发压力8000,在测试的过程中发现内存一直在减少,开始也没觉得是大问题,但是压力测试进行几天之后,再看内存,15G内存的服务器只剩下100来M了。但此时服务器并没有崩溃,统计来看内存减少至约160M时会自动释放一些,但不会释放很多(基本不超过180)。见下图:

linux服务器内存一直在减少-Cached占用很大的原因和解决

    可见linux服务器会自动释放内存,保障系统运行,但只会释放够用的内存,而不会去释放更多的内存,现在的问题有1.是什么东西占了这么多内存?查看进程根本没有几个进程占用多少内存。2.linux内存释放时也不释放这些内存是为什么?3.为什么减至160M后才开始释放?

使用命令:cat /proc/meminfo 查看内存占用情况时发现内存占用很大时,是Cached值非常大,基本快接近总内存值15G了。

linux服务器内存一直在减少-Cached占用很大的原因和解决

(上图是问题解决后的图,此时Cached已经释放)

    cached是什么?cached是作为page cache的内存, 文件系统的cache。主要负责缓存文件使用, 日志文件过大造成cached区内存增大把内存占用完,如果 cache 的值很大,说明cache住的文件占用很大。可我服务器上的程序里基本没有对磁盘进行读写操作,为什么会这么大呢?这时才突然想起来nginx的访问日志,因为是写到一个access.log里,这个文件一直在增加,且nginx每次请求都会写入,是极有可能是这个问题。于是我对nginx日志的文件进行清空:echo > access.log。在执行此操作前后对比发现内存被释放了,基本Cached完全释放出来(最终我通过将nginx日志分时处理解决了这个内存问题)。

    手动释放,将内存释放出来了,实际也是释放的Cached,这是Linux内核的策略:最大程度的利用内存cache 文件系统的数据,以提高IO速度。所以可以是因为nginx一直要写这个access.log.而这个文件可能在压测几天后慢慢地超过了内存的大小,使得它快占用完整个内存。而在linux服务器自动释放内存时又会尽量不释放Cached这块内存,使得内存越来越小。所以内存一直在减少-Cached占用很大时可以排查一下有没有很大很多的文件在读写,
   可以配置系统 开始回收内存的阀值:/proc/sys/vm/min_free_kbytes。通过查看我服务器配置的是:67584 。约66M,但不知为何通过测试发现我这里是到160M左右就开始释放的。先放着也许哪天就顺手解决了。

<think>好的,用户让我介绍一下Linux下查看内存占用的指令。我需要回忆一下常用的命令,并整理出来。首先,我记得最基础的是free命令,它能显示内存和交换空间的使用情况。可能需要详细说明各个参数,比如free -h,这样人类可读的格式更友好。 然后top命令也是一个常用工具,可以实时查看进程的内存占用情况。不过用户可能需要更简洁的界面,这时候htop可能更好,但需要安装,我得提醒用户这一点。 接下来是/proc/meminfo文件,里面详细记录了内存的各种信息,比如MemTotal、MemFree等等,用户可以直接读取这个文件来获取更详细的数据。不过这个可能需要解释每个字段的含义。 还有vmstat命令,它不仅能查看内存,还能看系统整体性能,包括进程、内存、分页、块IO等信息。可能需要说明各个参数的意义,比如vmstat -s以更详细的方式显示。 另外,ps命令结合参数也可以查看进程的内存使用情况,例如ps aux --sort=-%mem | head,这样可以列出内存占用最高的几个进程,这对用户排查问题应该有帮助。 glances工具可能也是一个选择,不过它属于第三方工具,需要安装,用户可能需要额外步骤才能使用。 还有sar命令,属于sysstat包的一部分,可以查看历史内存使用情况,适合分析过去的性能数据。 在整理这些命令的时候,需要注意每个命令的常用选项和输出解释,比如free中的buffers和cache的区别,top中的RES和VIRT内存的含义。同时,可能需要提醒用户不同发行版中某些命令可能默认未安装,比如htop或者glances,需要手动安装。 用户可能的实际应用场景包括监控系统内存使用、排查内存泄漏、优化性能等,所以需要给出不同情况下的推荐命令。比如快速查看用free,实时监控用top或htop,查看详细统计用/proc/meminfo,历史数据分析用sar。 还需要注意命令的输出格式,确保用户能正确理解每个数值的单位和意义,比如free -h中的G和M单位,避免混淆。此外,如果有多个命令可以实现相似功能,可以对比它们的优缺点,帮助用户选择最适合自己需求的工具。 最后,可能需要总结一下,根据不同的使用场景推荐相应的命令,并强调常用命令如free、top和htop的重要性。确保回答结构清晰,逐步引导用户了解每个命令的使用方法和适用情况。</think>在 Linux 系统中,查看内存占用的常用指令有以下几种,以下按使用场景分类说明: --- ### 一、基础内存查看:`free` **功能**:显示系统内存和交换空间(Swap)的使用情况。 **常用参数**: - `free -h`:以人类可读格式(如 GB/MB)显示 - `free -s <秒数>`:每隔指定秒数刷新一次(如 `free -s 5`) **输出解析**: - `total`:总内存 - `used`:已用内存(包括缓存和缓冲区) - `free`:完全空闲内存 - `shared`:共享内存 - `buff/cache`:缓存和缓冲区占用内存(可快速释放) - `available`:实际可用内存(估算值) **示例**: ```bash $ free -h total used free shared buff/cache available Mem: 15Gi 4.2Gi 2.1Gi 320Mi 8.7Gi 10Gi Swap: 2.0Gi 0B 2.0Gi ``` --- ### 二、实时进程监控:`top` 和 `htop` #### 1. `top` 命令 **功能**:动态显示进程资源占用(包括内存)。 **操作**: - 按 `M` 键按内存占用排序 - 按 `q` 退出 **关键列**: - `VIRT`:虚拟内存总量 - `RES`:实际使用的物理内存 - `%MEM`:内存占用百分比 #### 2. `htop` 命令(需安装) **功能**:增强版 `top`,支持颜色和鼠标操作。 **安装**: ```bash sudo apt install htop # Debian/Ubuntu sudo yum install htop # CentOS/RHEL ``` **操作**: - 按 `F6` → 选择 `PERCENT_MEM` 按内存排序 --- ### 三、详细内存统计:`/proc/meminfo` **功能**:查看系统内存的详细统计信息。 **命令**: ```bash cat /proc/meminfo ``` **关键字段**: - `MemTotal`:总物理内存 - `MemFree`:空闲内存 - `Buffers`:缓冲区内存 - `Cached`:缓存内存 - `SwapTotal` 和 `SwapFree`:交换空间信息 --- ### 四、综合性能分析:`vmstat` **功能**:显示虚拟内存、进程、CPU 活动等统计信息。 **常用命令**: ```bash vmstat -s # 显示详细内存统计 vmstat 2 5 # 每2秒刷新一次,共刷新5次 ``` --- ### 五、按进程筛选:`ps` **功能**:查看特定进程的内存占用。 **示例**: ```bash ps aux --sort=-%mem | head -n 10 # 列出内存占用最高的前10个进程 ``` **输出列**: - `%MEM`:内存占用百分比 - `RSS`:实际物理内存占用(单位 KB) --- ### 六、图形化工具:`gnome-system-monitor` 或 `glances` 1. **gnome-system-monitor**(GUI): ```bash gnome-system-monitor ``` 2. **glances**(终端工具,需安装): ```bash sudo apt install glances # Debian/Ubuntu glances ``` --- ### 总结建议 - **快速查看内存总量和剩余**:`free -h` - **实时监控进程内存**:`top` 或 `htop` - **分析详细内存分配**:`cat /proc/meminfo` - **排查内存泄漏**:结合 `ps` 和 `vmstat` 长期观察
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值