原命令
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