作者:枫凡
问题背景
服务器内主要运行程序 : Jadeos
问题描述 : LINUX tmpfs 空间使用未达到100% , 内存也未占满。
执行任何命令提示 bash: fork: Cannot allocate memory 过几秒时间系统会自动重启。
但在客户本地环境是没有这种情况的,即使tmpfs 使用达到100%系统未提示Cannot allocate memory
处理过程
1.首先判断客户是否内存不足导致,每次执行测试操作后,free 结果显示可用内存是有的
2.当进程Process 比较多,导致无法分配pid,也会提示Cannot allocate memory,执行命令pstree -a | wc -l 统计下进程数,排除进程数过多导致的内存无法分配
3.登录主机内部查看客户客户内部设置min_free_kbytes值为1G
即强制Linux 系统最低保留多少空闲内存(Kbytes),如果系统可用内存低于该值,默认会启用oom killer 或者强制重启
当耗尽内存直至系统最低保存内存时会有两种现象,根据内核参数vm.panic_on_oom 设置值的不同而有不同的行为
vm.panic_on_oom=0 系统会提示oom ,并启动oom-killer杀掉占用最高内存的进程
vm.panic_on_oom =1. 系统关闭oom,不会启动oom-killer,而是会自动重启
解决方案
建议客户降低min_free_kbytes值
更改减小min_free_kbytes后,再执行更多次的拷贝,最后一次free 可用内存显示解决到设置值是,才提示内存不足
这个是符合linux 系统对内存管理的预期的