最近内存的价值越来越高。学习Linux操作系统原理时,都讲内存作为高速读写的硬件,本身就非常“可贵”。那么内存出现问题,如果能解决,就挽回不少的价值成本。事实上,一个成熟的操作系统,都会提供内存故障时,解决问题的方法。这一点在Windows系统,很多用户体验过任务管理器的强大。但是面对Linux系统出现内存问题的时候,往往不知所措。其实Linux系统一样有非常多的工具可以帮助检查和解决内存问题。现如今,由于Linux内核已经进化到十分稳定的阶段,Linux的内存问题,在系统层面产生的概率,越来越低,。而出现大多数Linux内存问题,发生在系统的组件和应用软件上。额外的提一句,无论是使用Ubuntu Linux、Fedora Linux、Arch Linux等具体流行的发行版。新手朋友在没有运行什么程序的状况下,在终端使用命令查询内存,比如top或free,却看到很高的内存占用。这种现象,往往不是真实的内存占用。 一种情况是Linux将部分硬盘上的文件缓存到内存中,保证读写效率,第二种情况是Linux系统提前占用了部分内存,避免程序需要内存的时候再次执行申请操作。根本原因,是Linux系统高效运行的表现,内存不能浪费,而闲置是最大的浪费。那么,真实的Linux内存出现问题时,会有什么状况?一般来说用户启动的应用程序,如果出现内存问题,往往被OOM Killer结束并记录起来。OOM Killer是一个专门为异常内存占用的软件准备的,它利用算法监测这些进程,必要时强制中断问题程序的运行,保证Linux系统的正常运行。有了记录可查的话,遇到内存问题,第一件要做的事,就是查看系统日志判断出现问题的原因。上面提到的OOM Killer在中断进程时,就会记录到日志中。sudo dmesg | grep -i "out of memory"
journalctl -xe | grep -i "memory"
grep -i "ECC" /var/log/syslog
日常使用不需要等主动发现了,某个程序可能存在内存异常去查询。平时偶尔查一查,就能发现某些不会明显报错的Linux程序问题,提前做出解决。除了查询日志,还可以通过Linux实时检测工具,来通过动态观测的方式查看问题。这三个命令,大多数Linux系统都能提供。尽管它们输出内容的格式略显古老,但是却非常准确使用。能够清晰地观察某个进程的内存占用的变化。有时候,可能就是物理内存条坏了,导致Linux系统的内存使用不正常,这时候可以使用高级的检测工具对内存进行检测。有一种方式是使用memtester,对内存进行检测对2048M的内存读写检测5遍。这个工具有个缺点,就是只能对当前Linux系统的空闲内存作检测。最好的方法,是重启Linux系统,在GRUB菜单中选择Memory test进行整机所有的内存检测。当然作为Linux的用户,使用开发者工具,判断和调查内存泄漏的原因,是更加高级的玩法,比如用valgrind检测。valgrind --leak-check=full ./test_program
总的来说,Linux系统一样可以提供,良好且快速的解决内存问题的办法,有助于用户的使用体验,进步增强桌面游戏等的使用市场。你的电脑遇到过内存问题吗?是否尝试去亲自去解决一下?可以留言交流一下~