实验一、研究top的几个内存参数
先关闭虚拟内存:swapoff -a, 手动释放buffer/cache:echo 3 > /proc/sys/vm/drop_caches,释放结果如下:free>avail Mem,竟有部分物理内存不可用(暂无法解释),buffer/cache不能完全释放,可行的解释是buffer/cache分为buffer(写IO设备的buffer缓存,内部有未落盘的数据,不能被释放),释放的仅是cache部分(读取过的文件缓存)
再开启虚拟内存:swapon -a,手动释放buffer/cache:echo 3 > /proc/sys/vm/drop_caches
docker启动几个耗内存的应用将free内存吃完,当free不足以分配时,部分内存被分配到swap,并释放足够cache内存用于启动新容器(如需1G内存,则是从cache释放1G用于新容器的应用,而不是free剩余235M+765M从cache释放的)
实验二、极低内存情况下系统OOM killer杀进程
情景1
设置物理内存256MB,启动,xshell连接上去会感觉很卡,这时物理内存用完并用去部分虚拟内存。swapon -s
当尝试swapoff -a关闭交换区时,会报错不能分配内存,如果关闭交换区就不足支持系统进行运行。这时另一个窗口可看到
情景2
从上可以看出,系统正常运行需要约512M内存。关闭系统,从新设置物理内存512M,这时是可以成功关闭交换区的,并且系统也不会卡,这个时候avail Mem是还有比较大的内存。
由于其它程序的运行,内存使用波动,耗尽了物理内存,这时又没有虚拟内存可用,linux保护机制OOM killer开始kill优先级低的进程如下是kill 了mysqld进行后,释放了物理内存。这就是比较常见的OOM killer导致应用挂掉的原因。
重启mysqld无法启动,内存不够用。
可以journalctl -f 监控系统日志看到
情景3 再把内存调高点600M,避免系统波动自动kill进程。
这时xsehll 执行 docker start mongodb ,一个容器不行启动两个,尝试耗尽内存触发OMM killer。如下虚拟机页面(命令输入状态即可)强制输出Linux触发的OOM killer杀掉了低优先级进程mysqld,但是linux的进程fork机制导致无限执行重启。mysqld -uroot -p 尝试连接无法连接。top查看系统负载可能达到几十。进入fork子进程死循环后,系统可能出现假死现象:
- 能 Ping 通访问的服务器。
- 系统负载非常的高。
- SSH 不能登陆或者登陆比较慢。
- 服务器上提供的服务都不能正常响应,比如:不能访问系统上部署的 Web 服务器所提供的页面。
- 在系统上做任何其它操作都没有反应或者反应较慢
这就是我们测试环境低可以内存每天mysqldump(耗内存)时导致一些进程被kill的原因以及myqldump 进行长时间一直不能结束的原因。而dump数据库会全局锁表,所以这时所有表都只能读不能增删改。
结论
1.最好能保证free常驻内存能有1G以上,避免Linux去释放buffer/cache,buffer/cache占用过多必然会降低IO读写速度;
2.另外应设当设置一些swap,既可以看作系统内存不足的发出的信号,也可降低系统内存波动OOM killer kill进程几率,但是swap经常被使用(定期重启虚拟内存)就得考虑扩物理内存了,虚拟内存太慢。
较简单一种swap设置如下:(另一种磁盘分区设置为交换区fdisk /dev/demo1)
dd if=/dev/zero of=swapadd bs=1024 count=5242880 在当前目录创建block size=1KB,共55242880个block即5G, 名为swapadd的文件,
mkswap swapadd 文件设为交换区
chmod 600 swapadd -R 修改权限否则开启交换区报错,而且不能777
swapon swapadd 开启
free -m 检测一下
swapoff swapadd 停用
永久生效在/etc/fstab 追加配置: swap绝对路径 swap swap default 0 0
3.为进一步避免kill关键进程,可以nice适当调整重要进程优先级
nice -n -10 sh restart vehicle-payment.jar (-19-20越低cpu获取率越高),修改运行的程序优先级
renice -n 11 12344进程号 ,top -p 12344查看修改后进程的优先级
参考链接
http://m.sohu.com/a/316712876_760387
https://blog.csdn.net/t0nsha/article/details/7284936
https://blog.csdn.net/chenghuikai/article/details/77476830