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進程也不起做用。 php

查看lsof -ihtml

[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工具: java

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 查看佔用最大的進程:node

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佔用不少bufferpython

[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的內存:mysql

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已經減小了不少linux

[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進程ios

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沒有被當即回收git

[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回收。 github

 

經常使用排查工具

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會很是小。

 

 

 

參考 

相關文章
相關標籤/搜索