【現場問題】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會非常小。

 

 

 

參考 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM