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本身使用(或其他使用)如上图所示,12570%等于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

posted @   Linux大魔王  阅读(6788)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示