$ free -m
total used free shared buffers cached
Mem: 1002 769 232 0 62 421
-/+ buffers/cache: 286 715
Swap: 1153 0 1153
第一部分Mem行:
total 内存总数: 1002M
used 已经使用的内存数: 769M
free 空闲的内存数: 232M
shared 当前已经废弃不用,总是0
buffers Buffer 缓存内存数: 62M
cached Page 缓存内存数:421M
关系:total(1002M) = used(769M) + free(232M)
第二部分(-/+ buffers/cache):
(-buffers/cache) used内存数:286M (指的第一部分Mem行中的used - buffers - cached)
(+buffers/cache) free内存数: 715M (指的第一部分Mem行中的free + buffers + cached)
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。
第三部分是指交换分区, 我想不讲大家都明白
我想大家看了上面,还是很晕第一部分(Mem)与第二部分(-/+ buffers/cache)的结果中有关used和free为什么这么奇怪
其实我们可以从二个方面来解释
对 *** 作系统来讲是Mem的参数buffers/cached 都是属于被使用,所以它认为free只有232
对应用程序来讲是(-/+ buffers/cach)buffers/cached 是等同可用的,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。
所以,以应用来看看,以(-/+ buffers/cache)的free和used为主所以我们看这个就好了另外告诉大家一些常识Linux为了提高磁盘和内存存取效率, Linux做了很多精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路 径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache能有效缩短了 I/O系统调用(比如read,write,getdents)的时间。
记住内存是拿来用的,不是拿来看的不象windows, 无论你的真实物理内存有多少,他都要拿硬盘交换文件来读这也就是windows为什么常常提示虚拟空间不足的原因你们想想,多无聊,在内存还有大部分 的时候,拿出一部分硬盘空间来充当内存硬盘怎么会快过内存所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少如果常常 swap用很多,可能你就要考虑加物理内存了这也是linux看内存是否够用的标准哦
分享一些在Linux中,查看内存信息的命令,不明觉厉,希望以后用的到
1 查看内存插槽数,已使用插槽数,每条内存多大
sudo dmidecode|grep -P -A 5 "Memory/s+Device" | grep Size|grep -v Range
2%20支持的最大内存容量
sudo%20dmidecode%20|%20grep%20-P%20'Maximum/s+Capacity'
公司的电脑居然只支持4G,,本来还想申请根4G的内存条呢。
3 查看内存频率
sudo dmidecode | grep -A16 "Memory Device"|grep 'Speed'
/proc/meminfo 不能反映每个进程的内存使用
这些东西只在/proc/xxxx/下的statm maps memmap 里有体现
你只需要查看这些虚拟文件在linux内核的实现即可
例如cat /proc/1/statm ,出来的7组数据里,第二组就是进程1的物理内存使用量,单位是当前内核的PAGE_SIZE
具体说明详见 Documentation/filesystems/proctxt
具体实现就是fs/proc/arrayc 下的
C/C++ code123456789101112131415int proc_pid_statm(struct seq_file m, struct pid_namespace ns, struct pid pid, struct task_struct task){ unsigned long size = 0, resident = 0, shared = 0, text = 0, data = 0; struct mm_struct mm = get_task_mm(task); if (mm) { size = task_statm(mm, &shared, &text, &data, &resident); mmput(mm); } seq_printf(m, "%lu %lu %lu %lu 0 %lu 0\n", size, resident, shared, text, data); return 0;}
这个函数改成你需要的结果,只有一个难点,就是根据pid得到对应的 task_struct。
不知道有没现成的api。遍历查找一下全局 task_struct链表应该不难解决
以上就是关于linux下如何查看服务器物理内存状况全部的内容,包括:linux下如何查看服务器物理内存状况、Linux中 如何查看Ubuntu内存信息 查看内存信息的命令、Linux如何获取进程在物理内存中的所有内容当进程在内存中的内容发生变化时,又如何获知内核中实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)