最近项目联调发现各种OutOfMemory,然后大家很容易的就把原因归结到High Physical Memory上去,因为在shell中运行top指令可以看到free的内存很少(64G的内存只有1G空闲)
但是习惯了Windows的内存机制,很容易对Linux的内存机制产生误解。再细看上面图片中,应用进程占用的内存并不高,几近30G左右,而剩下的30G去哪了?Linux核把它分配给了cached缓存区,用于文件的快速读写。那么有必要手动释放这一部分内存吗?答案是不必的,linux有自己的机制可以在物理内存紧缺的情况下,快速释放缓存,所以尽量不要人工参与. 那么如何判断内存真的紧缺?看Swap的free内存时候在快速减少。所以通过top可以得知现在可以申请到的最高内存大致为Mem free + cached 内存,上例中即大致35G。
但是有时候cached占用过高的内存也容易导致其他一些异常,可参考ulimit -v 进行内存占用设置
————————————————————————————
关于top中的各个参数的释义为:
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。
top – 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
Tasks: 29 total, 1 r