文章转载自:https://www.cnblogs.com/pengdonglin137/p/3315124.html
linux下在终端环境下可以使用free命令看到系统实际使用内存的情况,一般用free -m方式查看内存占用情况(兆为单位)。而系统实际可用内存是不是free部分呢,不是的,系统实际内存占用以及可用内存有如下几个加减法:
total used free shared buffers cached
Mem: 128 119 8 0 1 22
-/+ buffers/cache: 95 32
swap: 255 0 255
第1行Mem数据:
第2行-/+ buffers/cache:
第三行数据是交换分区SWAP的,也就是我们通常所说的虚拟内存。
为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。
感兴趣的可以进一步参考文件/proc/meminfo,free命令就是根据它的信息生成的。free命令的源码可从procps-xxx-.src.rpm获取,xxx为版本号,比如procps-3.2.3-5.3.src.rpm。
知道了内存的使用概括,如何查找内存占用较高的进程呢?可以使用top命令。
top - 10:45:01 up 135 days, 23:34, 2 users, load average: 0.01, 0.03, 0.05
Tasks: 838 total, 1 running, 837 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.6 us, 0.3 sy, 0.0 ni, 98.0 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
78245 root 20 0 10.224g 2.598g 14008 S 46.5 4.1 414:40.34 java
78625 root 20 0 9921416 1.002g 13992 S 19.3 1.6 640:11.10 java
162617 root 20 0 2373152 575292 12540 S 8.6 0.9 502:46.88 gnome-shell
4651 root 20 0 324476 15300 1836 S 1.7 0.0 118:43.14 Xorg
138801 root 20 0 21.202g 1.393g 16620 S 0.7 2.2 0:18.46 java
139865 root 20 0 124276 2292 1184 R 0.7 0.0 0:00.12 top
111764 mysql 20 0 9.949g 4.721g 6708 S 0.3 7.5 497:02.17 mysqld
1 root 20 0 50820 3772 2004 S 0.0 0.0 0:45.80 systemd
其中VIRT是虚拟内存,RES是持续占用内存,SHR是共享内存 可以看到当前PID=78245这个进程占用的内存较高,通过ps -ef | grep 78245可以查看进程名称。
[root@s160 scripts]# ps -ef | grep 78245
root 78245 78244 4 Jan08 ? 06:54:51 java -Xms128m -Xmn128m -Xmx2048m -jar byinterserver-0.0.1-SNAPSHOT.jar
root 139991 132970 0 10:47 pts/0 00:00:00 grep --color=auto 78245