区别于Windows的内存管理。Linux内存使用的主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。
没有正在运行的程序的话,一般是驱动的问题。如果安装了私有驱动的话,那就删除。开源驱动可满足除了大型游戏之外的大多数需要。Windows是只在需要内存时, 才为应用程序分配内存,并不能充分利用大容量的内存空间。换句话说,每增加一些物理内存,Linux都将能充分利用起来,发挥了硬件投资带来的好处,而 Windows只将其做为摆设,即使增加8GB甚至更大。
当Linux系统的"system"内存占用过高时,可能是因为系统中的某些进程或内核模块占用了过多的内存。可以使用以下步骤来诊断和解决问题:
使用命令"top"或"htop"来查看哪些进程占用了大量内存。在这些进程中查找可疑进程。
使用命令"ps aux"来查看进程的详细信息,以了解它是如何使用内存的。
使用命令"free -m"来查看内存使用情况,确定哪些类型的内存占用过高。
使用命令"vmstat"来查看虚拟内存使用情况,确定是否存在缺页或其他虚拟内存问题。
使用命令"dmesg"来查看内核消息缓冲区,确定是否存在内核崩溃或其他内核问题。
使用命令"lsof"来查看打开的文件,确定是否有进程占用了大量文件句柄
如果这些步骤未能找到原因,可能需要收集系统日志和性能数据并向管理员或Linux专家寻求帮助。
先来在阿里的ECS上top一下感受内存爆满的感觉,终端输入 top
结合 *** 作系统,计组等课程,以及多年以来windows培养给我的直觉,认为0.96G(1016272K)的总内存,使用了0.84G(880960K)的内存,使用率高达88%。然而我还啥都没干,怎么会这样呢?
仔细查看还会发现后面有一个buffers,Swap后面还有一个Cached Mem。
现在我们用free来观察下
虽然Mem显示了0.9G左右的used,但是-/+buffers/cache(减去buffers和cache的结果)可以看到,当前进程实际占用内存是0.24G(256348K),而可用空闲(free)内存为0.72G(759924K)。
可以这么理解:在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。
如上面的例子:共1G的内存,0.9G被占用,但是buffer和cached
mem部分作为缓存,可以使用命中率的方式提高使用效率,而且这部分缓存是根据指令随时可以释放的,我们可以认为这部分内存没有实际被使用,也可以认为它是空闲的。
因此查看目前进程正在实际被使用的内存,是used-(buffers+cache),也可以认为如果swap没有大量使用,mem还是够用的,只有mem被当前进程实际占用完(没有了buffers和cache),才会使用到swap的。
再举个栗子: 这个是我在RPi一群看到的一个群友发的探针监测截图
观察内存使用状况一栏,发现物理内存功925.89M,已用911.74M,Cache化的内存是676.46M,Buffers为61.3M,现在用上述公式:
带入:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)