【现场问题】Linux Cache过大问题排查

 现场问题:

  • 操作系统 CentOS Linux release 7.3.1611 (Core) 
  • 系统内存 16G
[root@clxcld-gateway-prod ~]# free -g
              total        used        free      shared  buff/cache   available
Mem:             15           0           0           0          13          14
Swap:             3           0           3

  系统总共启动2个Java进程,一个Xmx 3G 另外一个Xmx 4G, 但发现系统使用的内存很少,所有的内存全部被cache占用,重启Java进程也不起作用。 

查看lsof -i

[root@clxcld-gateway-prod log]# lsof -i
COMMAND     PID    USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
systemd       1    root   43u  IPv6     13662      0t0  TCP *:sunrpc (LISTEN)
systemd       1    root   44u  IPv4     13663      0t0  TCP *:sunrpc (LISTEN)
chronyd     667  chrony    1u  IPv4     14114      0t0  UDP localhost:323 
chronyd     667  chrony    2u  IPv6     14115      0t0  UDP localhost:323 
avahi-dae   712   avahi   12u  IPv4     15942      0t0  UDP *:mdns 
avahi-dae   712   avahi   13u  IPv4     15943      0t0  UDP *:56794 
xinetd     1066    root    5u  IPv6     19825      0t0  TCP *:nrpe (LISTEN)
xinetd     1066    root    6u  IPv6     19826      0t0  TCP *:nsca (LISTEN)
sshd       1084    root    3u  IPv4     18988      0t0  TCP *:mxxrlogin (LISTEN)
sshd       1084    root    4u  IPv6     18997      0t0  TCP *:mxxrlogin (LISTEN)
rpc.statd  1133 rpcuser    5u  IPv4     20812      0t0  UDP localhost:885 
rpc.statd  1133 rpcuser    8u  IPv4     21033      0t0  UDP *:41165 
rpc.statd  1133 rpcuser    9u  IPv4     21037      0t0  TCP *:59161 (LISTEN)
rpc.statd  1133 rpcuser   10u  IPv6     21041      0t0  UDP *:32879 
rpc.statd  1133 rpcuser   11u  IPv6     21045      0t0  TCP *:39979 (LISTEN)
rpcbind    1138     rpc    4u  IPv6     13662      0t0  TCP *:sunrpc (LISTEN)
rpcbind    1138     rpc    5u  IPv4     13663      0t0  TCP *:sunrpc (LISTEN)
rpcbind    1138     rpc    8u  IPv4     20895      0t0  UDP *:sunrpc 
rpcbind    1138     rpc    9u  IPv4     20896      0t0  UDP *:iclcnet_svinfo 
rpcbind    1138     rpc   10u  IPv6     20897      0t0  UDP *:sunrpc 
rpcbind    1138     rpc   11u  IPv6     20898      0t0  UDP *:iclcnet_svinfo 
master     1250    root   13u  IPv4     20394      0t0  TCP localhost:smtp (LISTEN)
master     1250    root   14u  IPv6     20395      0t0  TCP localhost:smtp (LISTEN)
sshd      23166    root    3u  IPv4 175197624      0t0  TCP clxcld-gateway-prod:mxxrlogin->172.23.46.21:45974 (ESTABLISHED)
java      24608    root  138u  IPv6 175242571      0t0  TCP *:40673 (LISTEN)
java      24608    root  140u  IPv6 175242124      0t0  TCP clxcld-gateway-prod:47240->10.13.248.15:mysql (ESTABLISHED)
java      24608    root  141u  IPv6 175242127      0t0  TCP clxcld-gateway-prod:47246->10.13.248.15:mysql (ESTABLISHED)
java      24608    root  144u  IPv6 175242130      0t0  TCP *:pcsync-https (LISTEN)
java      24608    root  149u  IPv6 175252852      0t0  TCP clxcld-gateway-prod:51920->10.13.248.15:mysql (ESTABLISHED)
java      24610    root  108u  IPv6 175242117      0t0  TCP *:41423 (LISTEN)
java      24610    root  112u  IPv6 175242684      0t0  TCP *:warehouse (LISTEN)
java      24610    root  113u  IPv6 175242691      0t0  TCP clxcld-gateway-prod:47248->10.13.248.15:mysql (ESTABLISHED)
java      24610    root  114u  IPv6 175243437      0t0  TCP clxcld-gateway-prod:47258->10.13.248.15:mysql (ESTABLISHED)
java      24610    root  118u  IPv6 175242785      0t0  TCP clxcld-gateway-prod:47260->10.13.248.15:mysql (ESTABLISHED)
ssh       24748    root    3u  IPv4 175243834      0t0  TCP clxcld-gateway-prod:33706->clxcld-gateway-prod:mxxrlogin (ESTABLISHED)
sshd      24750    root    3u  IPv4 175242791      0t0  TCP clxcld-gateway-prod:mxxrlogin->clxcld-gateway-prod:33706 (ESTABLISHED)
python    24761    root    4u  IPv4 175242899      0t0  TCP clxcld-gateway-prod:46418->analytics-prod.cpkzgarrnsp3.us-west-2.redshift.amazonaws.com:5439 (ESTABLISHED)
zabbix_ag 25594  zabbix    4u  IPv4 175270400      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 25594  zabbix    5u  IPv6 175270401      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 25595  zabbix    4u  IPv4 175270400      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 25595  zabbix    5u  IPv6 175270401      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 25596  zabbix    4u  IPv4 175270400      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 25596  zabbix    5u  IPv6 175270401      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 25597  zabbix    4u  IPv4 175270400      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 25597  zabbix    5u  IPv6 175270401      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 25598  zabbix    4u  IPv4 175270400      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 25598  zabbix    5u  IPv6 175270401      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 25599  zabbix    4u  IPv4 175270400      0t0  TCP *:zabbix-agent (LISTEN)
zabbix_ag 25599  zabbix    5u  IPv6 175270401      0t0  TCP *:zabbix-agent (LISTEN)

问题排查:

参考 https://www.cnblogs.com/zh94/p/11922714.html , 下载hcache工具: 

github 地址:https://github.com/silenceshell/hcache  
直接下载:wget https://silenceshell-1255345740.cos.ap-shanghai.myqcloud.com/hcache 
chmod 755 hcache
mv hcache /usr/local/bin

 使用hcache -top 10 查看占用最大的进程:

hcache --top 10
+-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------+
| Name                                                                                                                                | Size (bytes)   | Pages      | Cached    | Percent |
|-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------|
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006ab097-000597ad5568adc2.journal | 58720256       | 14336      | 12246     | 085.421 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-0000000000734380-000599df09bbc4a3.journal | 58720256       | 14336      | 12245     | 085.414 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006d23a4-0005984dfc97fc32.journal | 58720256       | 14336      | 12242     | 085.393 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-0000000000747d1e-00059a2f7faf1d70.journal | 58720256       | 14336      | 12242     | 085.393 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-000000000075b6bb-00059a801bbaf6ca.journal | 58720256       | 14336      | 12242     | 085.393 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-0000000000697714-0005975cf155fc13.journal | 58720256       | 14336      | 12241     | 085.386 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-000000000070d02d-0005993e39fdff2a.journal | 58720256       | 14336      | 12239     | 085.372 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006bea28-000597fda900f06e.journal | 58720256       | 14336      | 12239     | 085.372 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006e5d54-0005989e300b3aa6.journal | 58720256       | 14336      | 12239     | 085.372 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000007209f2-0005998ebb1d505b.journal | 58720256       | 14336      | 12239     | 085.372 |
+-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------+

发现systemd进程journal占用很多buffer

[root@clxcld-gateway-prod d14e699e8bbc43228324a169b0f855fe]# ls -lath *
-rw-r-----+ 1 root systemd-journal 8.0M Jan  2 06:43 system.journal
-rw-r-----+ 1 root systemd-journal  56M Jan  2 03:26 system@6cfacedb39904c2499acffe16d0fd88a-000000000076f05c-00059ad09a381e0a.journal
-rw-r-----+ 1 root systemd-journal  56M Dec 29 05:00 system@6cfacedb39904c2499acffe16d0fd88a-000000000075b6bb-00059a801bbaf6ca.journal
-rw-r-----+ 1 root systemd-journal  56M Dec 25 04:56 system@6cfacedb39904c2499acffe16d0fd88a-0000000000747d1e-00059a2f7faf1d70.journal
-rw-r-----+ 1 root systemd-journal  56M Dec 21 04:47 system@6cfacedb39904c2499acffe16d0fd88a-0000000000734380-000599df09bbc4a3.journal
-rw-r-----+ 1 root systemd-journal  56M Dec 17 04:48 system@6cfacedb39904c2499acffe16d0fd88a-00000000007209f2-0005998ebb1d505b.journal
-rw-r-----+ 1 root systemd-journal  56M Dec 13 04:59 system@6cfacedb39904c2499acffe16d0fd88a-000000000070d02d-0005993e39fdff2a.journal
-rw-r-----+ 1 root systemd-journal  56M Dec  9 04:57 system@6cfacedb39904c2499acffe16d0fd88a-00000000006f9690-000598edd5ef0719.journal
-rw-r-----+ 1 root systemd-journal  56M Dec  5 05:02 system@6cfacedb39904c2499acffe16d0fd88a-00000000006e5d54-0005989e300b3aa6.journal
-rw-r-----+ 1 root systemd-journal  56M Dec  1 06:01 system@6cfacedb39904c2499acffe16d0fd88a-00000000006d23a4-0005984dfc97fc32.journal
-rw-r-----+ 1 root systemd-journal  56M Nov 27 06:20 system@6cfacedb39904c2499acffe16d0fd88a-00000000006bea28-000597fda900f06e.journal
-rw-r-----+ 1 root systemd-journal  56M Nov 23 06:30 system@6cfacedb39904c2499acffe16d0fd88a-00000000006ab097-000597ad5568adc2.journal
-rw-r-----+ 1 root systemd-journal  56M Nov 19 06:40 system@6cfacedb39904c2499acffe16d0fd88a-0000000000697714-0005975cf155fc13.journal
-rw-r-----+ 1 root systemd-journal  56M Nov 15 06:45 system@6cfacedb39904c2499acffe16d0fd88a-0000000000683d77-0005970c8a737b7b.journal
-rw-r-----+ 1 root systemd-journal  56M Nov 11 06:50 system@6cfacedb39904c2499acffe16d0fd88a-00000000006703c5-000596bbef4870ae.journal

 参考 https://blog.steamedfish.org/post/systemd-journald/ 清理journal的内存:

journalctl --vacuum-time=10d
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006703c5-000596bbef4870ae.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-0000000000683d77-0005970c8a737b7b.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-0000000000697714-0005975cf155fc13.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006ab097-000597ad5568adc2.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006bea28-000597fda900f06e.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006d23a4-0005984dfc97fc32.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006e5d54-0005989e300b3aa6.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006f9690-000598edd5ef0719.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-000000000070d02d-0005993e39fdff2a.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000007209f2-0005998ebb1d505b.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-0000000000734380-000599df09bbc4a3.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-0000000000747d1e-00059a2f7faf1d70.journal (56.0M).
Vacuuming done, freed 672.0M of archived journals on disk.
[root@clxcld-gateway-prod d14e699e8bbc43228324a169b0f855fe]# ls
system@6cfacedb39904c2499acffe16d0fd88a-000000000075b6bb-00059a801bbaf6ca.journal  system.journal
system@6cfacedb39904c2499acffe16d0fd88a-000000000076f05c-00059ad09a381e0a.journal

继续通过hcache -top 查询,发现journal已经减少了很多

[root@clxcld-gateway-prod d14e699e8bbc43228324a169b0f855fe]# hcache --top 10
+-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------+
| Name                                                                                                                                | Size (bytes)   | Pages      | Cached    | Percent |
|-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------|
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-000000000075b6bb-00059a801bbaf6ca.journal | 58720256       | 14336      | 12242     | 085.393 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-000000000076f05c-00059ad09a381e0a.journal | 58720256       | 14336      | 12226     | 085.282 |
| /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3.x86_64/jre/lib/rt.jar                                                         | 72964441       | 17814      | 10463     | 058.735 |
| /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3.x86_64/jre/lib/amd64/server/libjvm.so                                         | 13942784       | 3404       | 3216      | 094.477 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system.journal                                                                    | 8388608        | 2048       | 1311      | 064.014 |
| /usr/lib64/dri/swrast_dri.so                                                                                                        | 9597216        | 2344       | 1143      | 048.763 |
| /usr/lib64/libmozjs-24.so                                                                                                           | 5987032        | 1462       | 1076      | 073.598 |
| /usr/lib64/libgtk-3.so.0.1400.13                                                                                                    | 7116800        | 1738       | 1024      | 058.918 |
| /usr/lib/locale/locale-archive                                                                                                      | 106070960      | 25897      | 1024      | 003.954 |
| /usr/lib64/gnome-shell/libgnome-shell.so                                                                                            | 2671456        | 653        | 653       | 100.000 |
+-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------+

由于journal默认存储方式是auto,并且如果存在目录/var/log/journal则将日志cache到磁盘,否则会缓存到内存中。 因此创建/var/log/journal目录,同时重启journal进程

systemctl restart systemd-journal.service
[root@clxcld-gateway-prod journal]# hcache --top 10
+---------------------------------------------------------------------------------------------+----------------+------------+-----------+---------+
| Name | Size (bytes) | Pages | Cached | Percent |
|---------------------------------------------------------------------------------------------+----------------+------------+-----------+---------|
| /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3.x86_64/jre/lib/rt.jar | 72964441 | 17814 | 10463 | 058.735 |
| /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3.x86_64/jre/lib/amd64/server/libjvm.so | 13942784 | 3404 | 3216 | 094.477 |
| /var/log/journal/d14e699e8bbc43228324a169b0f855fe/system.journal | 8388608 | 2048 | 2048 | 100.000 |
| /usr/lib64/dri/swrast_dri.so | 9597216 | 2344 | 1143 | 048.763 |
| /usr/lib64/libmozjs-24.so | 5987032 | 1462 | 1076 | 073.598 |
| /usr/lib64/libgtk-3.so.0.1400.13 | 7116800 | 1738 | 1024 | 058.918 |
| /usr/lib/locale/locale-archive | 106070960 | 25897 | 1024 | 003.954 |
| /usr/lib64/gnome-shell/libgnome-shell.so | 2671456 | 653 | 653 | 100.000 |
| /root/azkaban-3.33.0/azkaban-exec-server-3.33.0/lib/hadoop-common-2.6.1.jar | 3318727 | 811 | 652 | 080.395 |
| /root/azkaban-3.33.0/azkaban-web-server-3.33.0/lib/hadoop-common-2.6.1.jar | 3318727 | 811 | 652 | 080.395 |
+---------------------------------------------------------------------------------------------+----------------+------------+-----------+---------+

重新查询,参考 https://blog.csdn.net/liuxiao723846/article/details/72628847 , system cache没有被立即回收

[root@clxcld-gateway-prod ~]# echo 1 > /proc/sys/vm/drop_caches
[root@clxcld-gateway-prod ~]#free -g
              total        used        free      shared  buff/cache   available
Mem:             15           1          14           0           0          14
Swap:             3           0           3

强制将cache回收。 

常用排查工具

1) w命令 显示当前登录用户及占用的资源情况

[tben@hopbox-ops-compass-local ~]$ w
 20:17:50 up 69 days, 10:51,  8 users,  load average: 3.23, 3.42, 3.54
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
tben     pts/2    :1               27Oct19 66days  0.06s  0.06s bash
tvithana pts/6    172.20.100.171   15:15    4:31m  0.05s  0.05s -bash
tben     pts/7    172.23.46.21     20:08    6.00s  0.20s  0.09s w
n.kumar  pts/8    192.168.127.179  20:12    1:34   0.07s  0.07s -bash
tvithana pts/15   172.20.100.171   14:40    5:36m  0.06s  0.06s -bash
m.afsar  pts/16   :17              03Dec19 30days  0.11s  0.11s bash
n.chaudh pts/29   :8               17Dec19 15days 56:12   0.07s bash
d.gawri  pts/22   :32              26Dec19  7days  0.10s  0.02s ssh hcldev@compass-jboss.calix.com -p 1035

2)uptime 命令(一般首先会根据最后那个15分钟的load负载为准)

[tben@hopbox-ops-compass-local ~]$ uptime
 20:19:44 up 69 days, 10:53,  8 users,  load average: 3.33, 3.36, 3.50

3) top 命令

[tben@hopbox-ops-compass-local ~]$ top
top - 20:20:22 up 69 days, 10:53,  8 users,  load average: 3.27, 3.35, 3.49
Tasks: 1753 total,   4 running, 1744 sleeping,   0 stopped,   5 zombie
%Cpu(s):  3.2 us,  4.1 sy, 18.5 ni, 74.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32944340 total,   375788 free, 27034940 used,  5533612 buff/cache
KiB Swap:  8257532 total,      932 free,  8256600 used.  3713268 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
13596 p.sachd+  39  19  853472  32620   5912 R  88.5  0.1  24032:33 tracker-extract
14821 d.gawri   39  19 1820528  55920   3332 R  84.6  0.2  64011:48 tracker-extract
31326 n.kumar   39  19  757096  13204   2828 R  84.6  0.0  88929:53 tracker-extract
18151 tben      20   0  175496   4888   2300 R  26.9  0.0   0:00.15 top
 5091 n.chaud+  20   0 9479252 400828   4552 S   7.7  1.2   2398:44 java
24683 n.dagar   20   0   10.2g   1.2g   5076 S   7.7  3.7   4991:40 java
15265 d.gawri   20   0 9939848 498224   7260 S   3.8  1.5   3907:38 java
18242 n.chaud+  20   0    9.8g   1.1g   9208 S   3.8  3.6   3856:41 java
20187 v.gandh+  20   0 9776.2m 716396  14416 S   3.8  2.2   1908:50 java
25632 rmeng     20   0 4610792 117076  22384 S   3.8  0.4  56:47.21 gnome-shell
27746 a.kumar   20   0 9048676 290672   2220 S   3.8  0.9   2533:07 java
29517 a.kumar   20   0 9391440 260188   2984 S   3.8  0.8   3924:07 java
    1 root      20   0  342384   5940   2540 S   0.0  0.0  19:35.06 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   1:47.54 kthreadd

说明:

行数 样例 说明 备注
第一行 20:20:22 当前服务器时间  
up 69 days 系统运行时间 指上次重启后69运行69天
8 users 当前有8个用户登录系统  
load average: 3.27, 3.35, 3.49 表示load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况 load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。
如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了!!!!! 
第二行 1753 total 当前总共有1753个进程   第二行主要展示任务状态
4 running 有4个正在运行状态  
1744 sleeping 有1744个正着休眠状态  
0 stopped 没有停止状态  
5 zombie 5个僵尸进程

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。

第三行 us(user cpu time 用户态使用的cpu时间比 该值较高时,说明用户进程消耗的 CPU 时间比较多,比如,如果该值长期超过 50%,则需要对程序算法或代码等进行优化
sy(system cpu time 系统态使用的cpu时间比  
ni(user nice cpu time 用做nice加权的进程分配的用户态cpu时间比  
id(idle cpu time 空闲的cpu时间比 如果该值持续为0,同时sy是us的两倍,则通常说明系统则面临着 CPU 资源的短缺
wa(io wait cpu time cpu等待磁盘写入完成时间 该值较高时,说明IO等待比较严重,这可能磁盘大量作随机访问造成的,也可能是磁盘性能出现了瓶颈。
hi(hardware irq) 硬中断消耗时间  
si(software irq) 软中断消耗时间  
st(steal time 虚拟机偷取时间  

4) vmstat

[tben@hopbox-ops-compass-local ~]$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 4  0 8257408 488360      0 5485776    0    0   688    14    0    0 18  1 79  1  0

说明:

指标 内容 说明 备注
procs部分 r 表示运行和等待cpu时间片的进程数 如果长期大于1,说明cpu不足,需要增加cpu。
b 表示在等待资源的进程数 比如正在等待I/O、或者内存交换等。
cpu部分 us 显示了用户方式下所花费 CPU 时间的百分比。 us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
sy 显示了内核进程所花费的cpu时间的百分比。 这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
wa 显示了IO等待所占用的CPU时间的百分比。 这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
id 显示了cpu处在空闲状态的时间百分比  
system部分 in 表示在某一时间间隔中观测到的每秒设备中断数。  
cs 表示每秒产生的上下文切换次数 如当 cs 比磁盘 I/O 和网络信息包速率高得多,都应进行进一步调查。
memory部分 swpd 切换到内存交换区的内存数量(k表示)。 如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常
free  当前的空闲页面列表中内存数量(k表示)  
buff  作为buffer cache的内存数量 一般对块设备的读写才需要缓冲。
cache 作为page cache的内存数量 一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。
swap部分 si  由内存进入内存交换区数量  
so 由内存交换区进入内存数量。  
IO部分 bi 从块设备读入数据的总量(读磁盘)(每秒kb)。  
bo 块设备写入数据的总量(写磁盘)(每秒kb)  

5)dstat命令

root@rancher:/home/calix# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw
  6   5  89   0   0   0|  75B  214k|   0     0 |   0    11B| 150  8377
  4   8  88   0   0   0|   0   376k|1790B 3660B|   0     0 |1835  8633
  8   2  90   0   0   0|   0     0 |  69k   88k|   0     0 |1759  8083
  8   6  86   0   0   0|   0   336k|2820B 4059B|   0     0 |1730  8096 

6)iostat查询IO负载

[root@localhost ~]# iostat 1 1
Linux 2.6.32-696.16.1.el6.x86_64 (nc-ftp01.kevin.cn)    2017年12月29日     _x86_64_    (4 CPU)
   
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          19.32    0.00   45.44    0.06    0.26   34.93
   
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
xvda             14.17        29.94       265.17   63120486  558975100
指标 说明 备注
avg-cpu 总体cpu使用情况统计信息 对于多核cpu,这里为所有cpu的平均值
%user 在用户级别运行所使用的CPU的百分比.  
%nice nice操作所使用的CPU的百分比.  
%sys 在系统级别(kernel)运行所使用CPU的百分比.  
%iowait CPU等待硬件I/O时,所占用CPU百分比.  
%idle CPU空闲时间的百分比.  
Device段 各磁盘设备的IO统计信息  
tps 每秒钟发送到的I/O请求数.  
Blk_read /s 每秒读取的block数  
Blk_wrtn/s 每秒写入的block数  
Blk_read 读入的block总数  
Blk_wrtn 写入的block总数  
[root@localhost ~]# iostat -x -k -d 1
Linux 2.6.32-696.el6.x86_64 (centos6-vm02)  01/04/2018  _x86_64_    (4 CPU)
  
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
scd0              0.00     0.00    0.00    0.00     0.00     0.00     8.00     0.00    0.36    0.36    0.00   0.36   0.00
vda               0.01     0.13    0.04    0.13     0.60     0.89    18.12     0.00    2.78    0.19    3.53   2.55   0.04
dm-0              0.00     0.00    0.04    0.22     0.58     0.88    11.25     0.00    3.27    0.25    3.82   1.61   0.04
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     8.00     0.00    0.13    0.13    0.00   0.04   0.00
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     7.91     0.00    0.19    0.10    5.00   0.16   0.00
指标 说明 备注
rrqm/s 每秒对该设备的读请求被合并次数 文件系统会对读取同块(block)的请求进行合并
wrqm/s 每秒对该设备的写请求被合并次数  
r/s 每秒完成的读次数  
w/s 每秒完成的写次数  
rkB/s 每秒读数据量(kB为单位)  
wkB/s 每秒写数据量(kB为单位)  
avgrq-sz 平均每次IO操作的数据量(扇区数为单位)  
avgqu-sz 平均等待处理的IO请求队列长度  
await 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)  
svctm 平均每次IO请求的处理时间(毫秒为单位)  
%util 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率  

备注: 

  • 如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
  • idle小于70% IO压力就较大了,一般读取速度有较多的wait。
  • 同时可以结合vmstat 查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)

手工清除缓存

释放缓存区内存的方法
1)清理pagecache(页面缓存)
[root@backup ~]# echo 1 > /proc/sys/vm/drop_caches     或者 # sysctl -w vm.drop_caches=1
 
2)清理dentries(目录缓存)和inodes
[root@backup ~]# echo 2 > /proc/sys/vm/drop_caches     或者 # sysctl -w vm.drop_caches=2
 
3)清理pagecache、dentries和inodes
[root@backup ~]# echo 3 > /proc/sys/vm/drop_caches     或者 # sysctl -w vm.drop_caches=3
 
上面三种方式都是临时释放缓存的方法,要想永久释放缓存,需要在/etc/sysctl.conf文件中配置:vm.drop_caches=1/2/3,然后sysctl -p生效即可!
 
另外,可以使用sync命令来清理文件系统缓存,还会清理僵尸(zombie)对象和它们占用的内存
[root@backup ~]# sync
 
 
温馨提示:
上面操作在大多数情况下都不会对系统造成伤害,只会有助于释放不用的内存。
但是如果在执行这些操作时正在写数据,那么实际上在数据到达磁盘之前就将它从文件缓存中清除掉了,这可能会造成很不好的影响。
 
那么如果避免这种事情发生呢?
因此,这里不得不提一下/proc/sys/vm/vfs_cache_pressure这个文件,告诉内核,当清理inoe/dentry缓存时应该用什么样的优先级。
[root@backup ~]# cat /proc/sys/vm/vfs_cache_pressure
100
 
vfs_cache_pressure=100    这个是默认值,内核会尝试重新声明dentries和inodes,并采用一种相对于页面缓存和交换缓存比较"合理"的比例。
 
减少vfs_cache_pressure的值,会导致内核倾向于保留dentry和inode缓存。
增加vfs_cache_pressure的值,(即超过100时),则会导致内核倾向于重新声明dentries和inodes
  
总之,vfs_cache_pressure的值:
小于100的值不会导致缓存的大量减少
超过100的值则会告诉内核你希望以高优先级来清理缓存。
  
其实无论vfs_cache_pressure的值采用什么值,内核清理缓存的速度都是比较低的。
如果将此值设置为10000,系统将会将缓存减少到一个合理的水平。
======================================================
 
这里顺便说下自己遇到的一个内存问题:
IDC机房有一台专门的备份服务器,每天凌晨执行多个备份脚本。某天早上突然发现收到很多条zabbix监控报警信息:这台备份服务器的内存使用了已超过80%!
于是,赶紧登陆这台备份服务器,使用free命令查看内存使用情况:
[root@backup ~]# free -m
             total       used       free     shared    buffers     cached
Mem:         64181      48585      15596          3          2         18
-/+ buffers/cache:      48564      15617
Swap:        32767          0      3276
 
确实发现内存使用率已超过80%!但是使用"top"命令查看,发现此时并没有什么进程在占用内存,并且本机是备份服务器,只有晚上执行备份脚本,
其他时间都没有服务进程在跑!于是尝试手动释放内存:
[root@backup ~]# echo 1 > /proc/sys/vm/drop_caches
[root@backup ~]# echo 2 > /proc/sys/vm/drop_caches
[root@backup ~]# echo 3 > /proc/sys/vm/drop_caches
[root@backup ~]# sync
 
发现在执行了上面第三条命令后,内存才真正被释放出来了,其他命令都没有起到效果。

名词解释

缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。

缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写入磁盘),也可以通过sync命令手动清空缓冲。

两者都是RAM中的数据,简单来说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。

buffer是由各种进程分配的,被用在如输入队列等方面。一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。

cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提高系统性能。

Cache:缓冲区,高速缓存,是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。Cache又分为一级Cache(L1 Cache)和二级Cache(L2 Cache),L1 Cache集成在CPU内部,L2 Cache早期一般是焊在主板上,现在也都集成在CPU内部,常见的容量有256KB或512KB L2 Cache。它是根据程序的局部性原理而设计的,就是cpu执行的指令和访问的数据往往在集中的某一块,所以把这块内容放入cache后,cpu就不用在访问内存了,这就提高了访问速度。当然若cache中没有cpu所需要的内容,还是要访问内存的。从内存读取与磁盘读取角度考虑,cache可以理解为操作系统为了更高的读取效率,更多的使用内存来缓存可能被再次访问的数据。

Cache并不是缓存文件的,而是缓存块的(块是I/O读写最小的单元);Cache一般会用在I/O请求上,如果多个进程要访问某个文件,可以把此文件读入Cache中,这样下一个进程获取CPU控制权并访问此文件直接从Cache读取,提高系统性能。

Buffer:缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据的区域通过buffer可以减少进程间通信需要等待的时间,当存储速度快的设备与存储速度慢的设备进行通信时,存储慢的数据先把数据存放到buffer,达到一定程度存储快的设备再读取buffer的数据,在此期间存储快的设备CPU可以干其他的事情。

Buffer:一般是用在写入磁盘的,例如:某个进程要求多个字段被读入,当所有要求的字段被读入之前已经读入的字段会先放到buffer中。Buffer是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写入磁盘),也可以通过sync命令手动清空缓冲。

cache是高速缓存,用于CPU和内存之间的缓冲;
buffer是I/O缓存,用于内存和硬盘的缓冲;

cache最初用于cpu cache,主要原因是cpu 与memory,由于cpu快,memory跟不上,且有些值使用次数多,所以放入cache中,主要目的是,重复使用,并且一级二级物理cache速度快,
buffer主要用于disk与 memory,主要是保护硬盘或减少网络传输的次数(内存数据表现dataSet).当然也可以提高速度(不会立即写入硬盘或直接从硬盘中读出的数据马上显示),重复使用,最初最主要的目的是保护disk,

Free中的buffer和cache:(它们都是占用内存):
buffer : 作为buffer cache的内存,是块设备的读写缓冲区
cache: 作为page cache的内存, 文件系统的cache

如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO bi会非常小。

参考 

 

原文地址:https://www.cnblogs.com/tben/p/12133697.html