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

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

问题排查:

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

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

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

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

发现systemd进程journal占用很多buffer

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

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

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

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

1[root@clxcld-gateway-prod d14e699e8bbc43228324a169b0f855fe]# hcache --top 10 2+-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------+ 3| Name | Size (bytes) | Pages | Cached | Percent | 4|-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------| 5| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-000000000075b6bb-00059a801bbaf6ca.journal | 58720256 | 14336 | 12242 | 085.393 | 6| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-000000000076f05c-00059ad09a381e0a.journal | 58720256 | 14336 | 12226 | 085.282 | 7| /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 | 8| /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 | 9| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system.journal | 8388608 | 2048 | 1311 | 064.014 | 10| /usr/lib64/dri/swrast_dri.so | 9597216 | 2344 | 1143 | 048.763 | 11| /usr/lib64/libmozjs-24.so | 5987032 | 1462 | 1076 | 073.598 | 12| /usr/lib64/libgtk-3.so.0.1400.13 | 7116800 | 1738 | 1024 | 058.918 | 13| /usr/lib/locale/locale-archive | 106070960 | 25897 | 1024 | 003.954 | 14| /usr/lib64/gnome-shell/libgnome-shell.so | 2671456 | 653 | 653 | 100.000 | 15+-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------+

由于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没有被立即回收

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

强制将cache回收。 

常用排查工具

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

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

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

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

3) top 命令

1[tben@hopbox-ops-compass-local ~]$ top 2top - 20:20:22 up 69 days, 10:53, 8 users, load average: 3.27, 3.35, 3.49 3Tasks: 1753 total, 4 running, 1744 sleeping, 0 stopped, 5 zombie 4%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 5KiB Mem : 32944340 total, 375788 free, 27034940 used, 5533612 buff/cache 6KiB Swap: 8257532 total, 932 free, 8256600 used. 3713268 avail Mem 7 8 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 913596 p.sachd+ 39 19 853472 32620 5912 R 88.5 0.1 24032:33 tracker-extract 1014821 d.gawri 39 19 1820528 55920 3332 R 84.6 0.2 64011:48 tracker-extract 1131326 n.kumar 39 19 757096 13204 2828 R 84.6 0.0 88929:53 tracker-extract 1218151 tben 20 0 175496 4888 2300 R 26.9 0.0 0:00.15 top 13 5091 n.chaud+ 20 0 9479252 400828 4552 S 7.7 1.2 2398:44 java 1424683 n.dagar 20 0 10.2g 1.2g 5076 S 7.7 3.7 4991:40 java 1515265 d.gawri 20 0 9939848 498224 7260 S 3.8 1.5 3907:38 java 1618242 n.chaud+ 20 0 9.8g 1.1g 9208 S 3.8 3.6 3856:41 java 1720187 v.gandh+ 20 0 9776.2m 716396 14416 S 3.8 2.2 1908:50 java 1825632 rmeng 20 0 4610792 117076 22384 S 3.8 0.4 56:47.21 gnome-shell 1927746 a.kumar 20 0 9048676 290672 2220 S 3.8 0.9 2533:07 java 2029517 a.kumar 20 0 9391440 260188 2984 S 3.8 0.8 3924:07 java 21 1 root 20 0 342384 5940 2540 S 0.0 0.0 19:35.06 systemd 22 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``)` ```

虚拟机偷取时间

 

  1. vmstat

1[tben@hopbox-ops-compass-local ~]$ vmstat 2procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- 3 r b swpd free buff cache si so bi bo in cs us sy id wa st 4 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命令

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

 

1[root@localhost ~]# iostat -x -k -d 1 2Linux 2.6.32-696.el6.x86_64 (centos6-vm02) 01/04/2018 _x86_64_ (4 CPU) 3 4Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 5scd0 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 6vda 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 7dm-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 8dm-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 9dm-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释放缓存区内存的方法 2 31)清理pagecache(页面缓存) 4[root@backup ~]# echo 1 > /proc/sys/vm/drop_caches 或者 # sysctl -w vm.drop_caches=1 5 62)清理dentries(目录缓存)和inodes 7[root@backup ~]# echo 2 > /proc/sys/vm/drop_caches 或者 # sysctl -w vm.drop_caches=2 8 93)清理pagecache、dentries和inodes 10[root@backup ~]# echo 3 > /proc/sys/vm/drop_caches 或者 # sysctl -w vm.drop_caches=3 11  12上面三种方式都是临时释放缓存的方法,要想永久释放缓存,需要在/etc/sysctl.conf文件中配置:vm.drop_caches=1/2/3,然后sysctl -p生效即可! 13 14另外,可以使用sync命令来清理文件系统缓存,还会清理僵尸(zombie)对象和它们占用的内存 15[root@backup ~]# sync 16 17 18温馨提示: 19上面操作在大多数情况下都不会对系统造成伤害,只会有助于释放不用的内存。 20但是如果在执行这些操作时正在写数据,那么实际上在数据到达磁盘之前就将它从文件缓存中清除掉了,这可能会造成很不好的影响。 21 22那么如果避免这种事情发生呢? 23因此,这里不得不提一下/proc/sys/vm/vfs_cache_pressure这个文件,告诉内核,当清理inoe/dentry缓存时应该用什么样的优先级。 24[root@backup ~]# cat /proc/sys/vm/vfs_cache_pressure 25100 26 27vfs_cache_pressure=100 这个是默认值,内核会尝试重新声明dentries和inodes,并采用一种相对于页面缓存和交换缓存比较"合理"的比例。 28 29减少vfs_cache_pressure的值,会导致内核倾向于保留dentry和inode缓存。 30增加vfs_cache_pressure的值,(即超过100时),则会导致内核倾向于重新声明dentries和inodes 31 32总之,vfs_cache_pressure的值: 33小于100的值不会导致缓存的大量减少 34超过100的值则会告诉内核你希望以高优先级来清理缓存。 35 36其实无论vfs_cache_pressure的值采用什么值,内核清理缓存的速度都是比较低的。 37如果将此值设置为10000,系统将会将缓存减少到一个合理的水平。 38====================================================== 39 40这里顺便说下自己遇到的一个内存问题: 41IDC机房有一台专门的备份服务器,每天凌晨执行多个备份脚本。某天早上突然发现收到很多条zabbix监控报警信息:这台备份服务器的内存使用了已超过80%42于是,赶紧登陆这台备份服务器,使用free命令查看内存使用情况: 43[root@backup ~]# free -m 44 total used free shared buffers cached 45Mem: 64181 48585 15596 3 2 18 46-/+ buffers/cache: 48564 15617 47Swap: 32767 0 3276 48 49确实发现内存使用率已超过80%!但是使用"top"命令查看,发现此时并没有什么进程在占用内存,并且本机是备份服务器,只有晚上执行备份脚本, 50其他时间都没有服务进程在跑!于是尝试手动释放内存: 51[root@backup ~]# echo 1 > /proc/sys/vm/drop_caches 52[root@backup ~]# echo 2 > /proc/sys/vm/drop_caches 53[root@backup ~]# echo 3 > /proc/sys/vm/drop_caches 54[root@backup ~]# sync 55 56发现在执行了上面第三条命令后,内存才真正被释放出来了,其他命令都没有起到效果。

名词解释

**缓存(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会非常小。

参考

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Linux Cache过大问题排查 - HelloWorld