查看Linux服务器下的内存使用情况

查看Linux服务器下的内存使用情况 ,可以使用命令free -m。注意此命令只在Linux下有效,在FreeBSD中没有此命令。命令如下所示:

  used:已经使用的内存数

  free:空闲的内存数

  shared:多个进程共享的内存总额

  -buffers/cache:(已用)的内存数,即used-buffers-cached

  +buffers/cache:(可用)的内存数,即free+buffers+cached

  得出结论:

  可用内存的计算公式为:

  可用内存=free+buffers+cached,即2551MB+268MB+917MB=3737MB

  很久以前在笔记本上用Ubuntu8.04时就觉得Linux管理内存的机制非常优秀,简而言之:Linux的内存是拿来用的,而不是拿来看的。我与一个朋友探讨Linux的使用情况时,他问我为什么Linux使用的内存这么高。他机器上1GB的内存free才232MB,而Windows XP才用了200MB不到的样子。这其实是被Linux的free命令之表象迷惑了,Linux的内存使用是很有讲究的。还是举例说明,如下的free命令所显示的是当前内存的使用情况,-m的意思是用M个字节来显示内容,我们来一起看看。

  在第一部分Mem行中有如下参数。

  total:内存总数,即1002MB
used:已经使用的内存数,即769MB
free:空闲的内存数,即232MB
shared:当前已经废弃不用,总是0
buffers Buffer:缓存内存数,即62MB
cached Page:缓存内存数,即421MB

  其中,内存总数与已使用内存数和空闲内存数的关系是:

  total(1002M)=used(769M)+free(232M)

  在第二部分内容(-/+buffers/cache)中各参数如下所示。

  (-buffers/cache):used内存数,即286MB(指的是第一部分Mem行中的used-buffers-cached)。
(+buffers/cache):free内存数,即715MB(指的是第一部分Mem行中的free+buffers+cached)。

  可见-buffers/cache反映的是被程序实实在在用掉的内存,而+buffers/cache反映的是可以挪用的内存总数。

  第三部分是指交换(swap)分区,大家应该都明白,这里就不再讲了。

  有可能大家看了上面的解释还是不太明白。比如:第一部分(Mem)与第二部分(-/+buffers/cache)的结果有关,used和free为什么这么奇怪?其实我们可以从两个方面来分析。对操作系统来讲这两项是Mem的参数,buffers/cached都属于被使用,所以它认为free只有232MB;对应用程序来讲+buffers/cached等同于可用的内存,因为buffer/cached可提高程序执行的性能,当程序使用内存时,buffer/cached很快就会被使用。所以从应用的角度来看,应以(-/+buffers/cache)的free和used为主,即我们主要看与它相关的free和used就可以了。另外告诉大家一些常识,为了提高磁盘和内存的存取效率,对Linux做了很多精心的设计,除了对dentry进行缓存(用于VFS、加速文件路径名到inode的转换)外,还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者用于针对磁盘块的读写,后者用于针对文件inode的读写。这些Cache能有效地缩短I/O系统调用(比如read、write、getdents)的时间。

  在Linux中,内存是拿来用的,不是拿来看的。而在Windows中,无论你的真实物理内存有多少,它都会用硬盘交换文件来读,即使是内存还有一大部分。这也就是Windows常常提示虚拟空间不足的原因。可以想见,硬盘怎么会快过内存,所以我们在观察Linux的内存使用情况时,只要没发现用swap的交换空间,就不用担心自己的内存太少。如果常常看到swap用了很多,那么你就要考虑加物理内存了。这也是在Linux服务器上看内存是否够用的标准。

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-08-23 21:43:29

查看Linux服务器下的内存使用情况的相关文章

linux服务器下LNMP安装与配置方法

现在很多朋友都选择了linux服务器下配置LNMP(linux+nginx+mysql+php),这里分享下LNMP安装与配置方法,需要的朋友可以参考下   Nginx与apache.lighttp性能综合对比,如下图: 注意:关闭rpm默认安装的apache和mysql 1.准备php函数的rpm包 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-de

在Linux中可视化显示内存占用情况的方法

  物理内存不足对Linux桌面系统和服务器系统的性能影响都很大.当你的计算机变慢时,要做的第一件事就是释放内存.尤其是在多用户环境以及执行关键任务的服务器环境下,内存消耗会变得更加关键,因为多个用户和应用线程会同时竞争更多的内存空间. 如果要监测系统内各种资源的使用情况(比如说CPU或内存),图形化显示是一种高效的方法,通过图形界面可以快速分析各用户和进程的资源消耗情况.本教程将给大家介绍在linux下图形化分析内存使用情况的方法,使用到命令行工具是smem. 物理内存使用情况: RSS .

查看Linux系统CPU、内存信息和操作系统的版本信息

经常要查看Linux服务器的CPU,内存信息以及操作系统版本等信息,总结一下常用的命令,以便以后查阅 . 1.查看CPU型号(8个逻辑CPU) [[root@mail ~]# cat /proc/cpuinfo |grep "name" |cut -f2 -d: |uniq -c      8  Intel(R) Xeon(R) CPU           E5506  @ 2.13GHz 2.查看物理CPU个数(两个4核CPU) [root@mail ~]# cat /proc/cp

java如何修改linux服务器下txt文件,

问题描述 java如何修改linux服务器下txt文件, 在linux服务器下面,有个txt文件,里面有三条数据,如何修改指定的那一条数据,那如何定位到指定的数据?比如我想修改2 55 66 77这条数据怎么定位到这条数据?txt文件内容格式如下:1 22 33 442 55 66 773 88 99 781 yy uu pp2 jj kk hh1 rr tt ww2 ww qq ee3 qq ff gg 解决方案 http://blog.csdn.net/jiangxinyu/article/

使用C#.NET的不能操作linux服务器下的ftp,这是为什么?

问题描述 使用C#.NET的不能操作linux服务器下的ftp,这是为什么? 我在windows7电脑上分别使用IIS和Quick easy ftp server软件搭建了ftp环境,用C#写了ftp上传的程序,程序能正常运行并上传文件.但是同样的代码连接linux下的ftp服务器,却无法上传成功,提示创建目录失败,(使用其他flashFxp软件和windows默认的ftp登录工具是可以正常操作的),这个是我程序代码问题,还是windows和linux的差异有关,或者是因为服务器的设置问题.具体

linux服务器下运行一个图形化的Java程序

问题描述 linux服务器下运行一个图形化的Java程序 安装一了一个纯命令行的Ubuntu服务器系统,在windows下用netbeans 做 了一个图形化Java程序.服务器下的jdk以安装.在运行这个打包好的java程序时出现错误.说是需要libX....等很多包. 估计是需要安装图形化包,那么怎么安装这些包呢,服务器不能连接互联网.如果有这些包,从哪里下载呢? 解决方案 不能连网,那还是重装下系统比较简单.找一个带xwindow的ubuntu标准版 解决方案二: ubuntu服务器版本不

linux服务器下的matlabpool问题

问题描述 linux服务器下的matlabpool问题 matlabpool local 4 Starting matlabpool using the 'local' profile ... Error using matlabpool (line 137) Java exception occurred: java.net.UnknownHostException: ic-m2.localdomain: ic-m2.localdomain: Name or service not known

sdos-关于linux服务器下 resin3 对SDOS的防御

问题描述 关于linux服务器下 resin3 对SDOS的防御 求救啊~~ 我们网络安全的大神 扫到了我们系统的 Slow HTTP Denial of Service 漏洞~~ 已经查了两天了 找不到很好的解决方案~~ 求大神指导~~~

mysql-WEB程序在linux服务器下连接Mysql超时!

问题描述 WEB程序在linux服务器下连接Mysql超时! 请问下,我linux服务器部署WEB项目后,启动没报超时,但是一访问有数据的页面就报连接数据库超时.本地跑就没问题,我改了Mysql的默认时间,还是这样.要怎么解决?求大神 解决方案 先看你的 web程序能不能正常连接上数据库,然后就是执行数据库查询是否成功 解决方案二: 看是什么数据,一个是你连接字符串,是不是根本没法打开数据库. 尝试先注释掉数据库访问的代码看看