現場問題:
- 操做系統 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%,則須要對程序算法或代碼等進行優化 |
|
系統態使用的cpu時間比 | ||
|
用作 nice 加權的進程分配的用戶態cpu時間比 |
||
|
空閒的cpu時間比 | 若是該值持續爲0,同時sy是us的兩倍,則一般說明系統則面臨着 CPU 資源的短缺 | |
|
cpu等待磁盤寫入完成時間 | 該值較高時,說明IO等待比較嚴重,這可能磁盤大量做隨機訪問形成的,也多是磁盤性能出現了瓶頸。 | |
|
硬中斷消耗時間 | ||
|
軟中斷消耗時間 | ||
|
虛擬機偷取時間 |
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爲單位) | |
|
每秒寫數據量(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會很是小。