Linux命令free -h解释


原命令

root@xxx-03:~# free -h
              total        used        free      shared  buff/cache   available
Mem:           125G         88G        821M        179M         35G         35G
Swap:           19G        121M         19G

问题

1、什么时候开始使用swap?
释: 内核参数Swappiness用于定义Linux内核将RAM内容复制到交换的数量(以及频率)。该参数的默认值是"60"(可选值为0~100)。当前我这边设置的swappiness的值为30,swappiness参数的值越高表明内核交换的力度就越大。拿我当前的环境来说即100-30=70%,意为内核拿出内存总量的70%给应用使用,当应用使用完这70%后开始使用swap。剩下的30%供OS本身使用(或其他使用)如上图所示,125的70%等于89.6G,当应用使用到内存总量的89.6后开始用使用swap,当前已用完或又用到了121M的swap(约值)
root@xxx-03:~# cat /proc/sys/vm/swappiness
30

临时修改
root@xxx-03:~# echo "vm.swappiness=10">>/etc/sysctl.conf
root@xxx-03:~# source /etc/sysctl.conf

永久修改
root@xxx-03:~# vim /proc/sys/vm/swappiness

命令释义

第一行: 系统物理内存的使用情况
第二行: swap交换内存的使用情况
total列: 系统中内存的总量,
used列: 已用内存总量(used = total-free-buffers-cache)
free列: 空闲内存容量(真正尚未被使用的物理内存数)
shared列: 共享内存使用的容量
buff/cache: buffers和cache所用总量的总和(buffers为内核缓冲区所用的内存,cache为页缓存和slabs所用的内存容量)

available列为估算值,是在不需要swapping内存的情况下,可用物理内存容量。它是从应用程序的角度看到的可用内存数量。
内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据(就是buffer和cache),所以对于内核来说buffer和cache都属于已经被使用的内存。
当应用程序需要内存时,如没有足够的 free 内存可用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。
注: 这只是一个很理想的计算方式,实际中的数据往往有较大的误差。


就我而言找了很多关于available列的解释,最后在man free中看到了这段:
root@xxx-03:~# man free
....
  ....
       available
              Estimation of how much memory is available for starting new applications, without swapping. Unlike the data provided  by the  cache  or free fields, this field takes into account page cache and also that not all reclaimable memory slabs will  be reclaimed due to items being in use (MemAvailable in /proc/meminfo, available on kernels 3.14,  emulated  on  kernels 2.6.27+, otherwise the same as free)






# 查看各进程使用内存情况可使用ps_mem命令
root@xxx-03:~# yum -y install ps_mem
root@xxx-03:~# ps_mem
 Private  +   Shared  =  RAM used	Program

108.0 KiB +  92.5 KiB = 200.5 KiB	lvmetad
212.0 KiB +  52.0 KiB = 264.0 KiB	irqbalance
196.0 KiB +  70.0 KiB = 266.0 KiB	auditd
....
  ....
696.0 KiB +  24.2 MiB =  24.9 MiB	rpt_main
888.0 KiB +  24.2 MiB =  25.0 MiB	agent_app
 48.2 MiB + 136.0 KiB =  48.4 MiB	ttagent
 92.6 GiB +  16.4 MiB =  92.6 GiB	java (11)
---------------------------------
                         92.8 GiB


通过上面可以看出使用内存最多的是11各java


# 查看这11各Tomcat的路径等
root@xxx-03:~# ps -ef | grep java | grep -v color
root      4718     1  3 Dec02 ?        01:40:56 /data/app/jdk1.8.0_201/bin/java -Djava.util.logging.config.file=/data/app/tomcat-xxx/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /data/app/tomcat/bin/bootstrap.jar:/data/app/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/data/app/ -Dcatalina.home=/data/app/tomcat -Djava.io.tmpdir=/data/app/tomcat/temp org.apache.catalina.startup.Bootstrap start
root     29116     1  2 Nov29 ?        02:31:43 /data/app/jdk1.8.0_201/bin/java -Djava.util.logging.config.file=/data/app/tomcat-qua-10/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /data/app/tomcat-zhtj-qua-10/bin/bootstrap.jar:/data/app/tomcat-zhtj-qua-10/bin/tomcat-juli.jar -Dcatalina.base=/data/app/tomcat-zhtj-qua10 -Dcatalina.home=/data/app/tomcat-qua-10 -Djava.io.tmpdir=/data/app/tomcat-qua-10/temp org.apache.catalina.startup.Bootstrap start
....
  ....



root@xxx-03:~# ps -ef | grep java | grep -v color | wc -l
11


.
.
.
.
游走在各发行版间老司机QQ群:905201396
不要嫌啰嗦的新手QQ群:756805267
Debian适应QQ群:912567610


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM