linux cache过大问题

转载: https://www.shangmayuan.com/a/2d4d74e140024d39a58f3a34.html

  • 操做系统 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会很是小。

 

 

 

参考 

 

posted on 2022-05-25 10:32  Colin88  阅读(845)  评论(0编辑  收藏  举报