现场问题:
操作系统 CentOS Linux release 7.3.1611 (Core)
系统内存 16G
[root@clxcld-gateway-prod ~]# free -g total used free shared buff/cache available Mem: 15 0 0 0 13 14 Swap: 3 0 3
系统总共启动2个Java进程,一个Xmx 3G 另外一个Xmx 4G, 但发现系统使用的内存很少,所有的内存全部被cache占用,重启Java进程也不起作用。
查看lsof -i
[root@clxcld-gateway-prod log]# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 43u IPv6 13662 0t0 TCP *:sunrpc (LISTEN)
systemd 1 root 44u IPv4 13663 0t0 TCP *:sunrpc (LISTEN)
chronyd 667 chrony 1u IPv4 14114 0t0 UDP localhost:323
chronyd 667 chrony 2u IPv6 14115 0t0 UDP localhost:323
avahi-dae 712 avahi 12u IPv4 15942 0t0 UDP *:mdns
avahi-dae 712 avahi 13u IPv4 15943 0t0 UDP *:56794
xinetd 1066 root 5u IPv6 19825 0t0 TCP *:nrpe (LISTEN)
xinetd 1066 root 6u IPv6 19826 0t0 TCP *:nsca (LISTEN)
sshd 1084 root 3u IPv4 18988 0t0 TCP *:mxxrlogin (LISTEN)
sshd 1084 root 4u IPv6 18997 0t0 TCP *:mxxrlogin (LISTEN)
rpc.statd 1133 rpcuser 5u IPv4 20812 0t0 UDP localhost:885
rpc.statd 1133 rpcuser 8u IPv4 21033 0t0 UDP *:41165
rpc.statd 1133 rpcuser 9u IPv4 21037 0t0 TCP *:59161 (LISTEN)
rpc.statd 1133 rpcuser 10u IPv6 21041 0t0 UDP *:32879
rpc.statd 1133 rpcuser 11u IPv6 21045 0t0 TCP *:39979 (LISTEN)
rpcbind 1138 rpc 4u IPv6 13662 0t0 TCP *:sunrpc (LISTEN)
rpcbind 1138 rpc 5u IPv4 13663 0t0 TCP *:sunrpc (LISTEN)
rpcbind 1138 rpc 8u IPv4 20895 0t0 UDP *:sunrpc
rpcbind 1138 rpc 9u IPv4 20896 0t0 UDP *:iclcnet_svinfo
rpcbind 1138 rpc 10u IPv6 20897 0t0 UDP *:sunrpc
rpcbind 1138 rpc 11u IPv6 20898 0t0 UDP *:iclcnet_svinfo
master 1250 root 13u IPv4 20394 0t0 TCP localhost:smtp (LISTEN)
master 1250 root 14u IPv6 20395 0t0 TCP localhost:smtp (LISTEN)
sshd 23166 root 3u IPv4 175197624 0t0 TCP clxcld-gateway-prod:mxxrlogin->172.23.46.21:45974 (ESTABLISHED)
java 24608 root 138u IPv6 175242571 0t0 TCP *:40673 (LISTEN)
java 24608 root 140u IPv6 175242124 0t0 TCP clxcld-gateway-prod:47240->10.13.248.15:mysql (ESTABLISHED)
java 24608 root 141u IPv6 175242127 0t0 TCP clxcld-gateway-prod:47246->10.13.248.15:mysql (ESTABLISHED)
java 24608 root 144u IPv6 175242130 0t0 TCP *:pcsync-https (LISTEN)
java 24608 root 149u IPv6 175252852 0t0 TCP clxcld-gateway-prod:51920->10.13.248.15:mysql (ESTABLISHED)
java 24610 root 108u IPv6 175242117 0t0 TCP *:41423 (LISTEN)
java 24610 root 112u IPv6 175242684 0t0 TCP *:warehouse (LISTEN)
java 24610 root 113u IPv6 175242691 0t0 TCP clxcld-gateway-prod:47248->10.13.248.15:mysql (ESTABLISHED)
java 24610 root 114u IPv6 175243437 0t0 TCP clxcld-gateway-prod:47258->10.13.248.15:mysql (ESTABLISHED)
java 24610 root 118u IPv6 175242785 0t0 TCP clxcld-gateway-prod:47260->10.13.248.15:mysql (ESTABLISHED)
ssh 24748 root 3u IPv4 175243834 0t0 TCP clxcld-gateway-prod:33706->clxcld-gateway-prod:mxxrlogin (ESTABLISHED)
sshd 24750 root 3u IPv4 175242791 0t0 TCP clxcld-gateway-prod:mxxrlogin->clxcld-gateway-prod:33706 (ESTABLISHED)
python 24761 root 4u IPv4 175242899 0t0 TCP clxcld-gateway-prod:46418->analytics-prod.cpkzgarrnsp3.us-west-2.redshift.amazonaws.com:5439 (ESTABLISHED)
zabbix_ag 25594 zabbix 4u IPv4 175270400 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 25594 zabbix 5u IPv6 175270401 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 25595 zabbix 4u IPv4 175270400 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 25595 zabbix 5u IPv6 175270401 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 25596 zabbix 4u IPv4 175270400 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 25596 zabbix 5u IPv6 175270401 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 25597 zabbix 4u IPv4 175270400 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 25597 zabbix 5u IPv6 175270401 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 25598 zabbix 4u IPv4 175270400 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 25598 zabbix 5u IPv6 175270401 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 25599 zabbix 4u IPv4 175270400 0t0 TCP *:zabbix-agent (LISTEN)
zabbix_ag 25599 zabbix 5u IPv6 175270401 0t0 TCP *:zabbix-agent (LISTEN)
问题排查:
参考 https://www.cnblogs.com/zh94/p/11922714.html , 下载hcache工具:
github 地址:https://github.com/silenceshell/hcache
直接下载:wget https://silenceshell-1255345740.cos.ap-shanghai.myqcloud.com/hcache
chmod 755 hcache
mv hcache /usr/local/bin
使用hcache -top 10 查看占用最大的进程:
hcache --top 10
+-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------+
| Name | Size (bytes) | Pages | Cached | Percent |
|-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------|
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006ab097-000597ad5568adc2.journal | 58720256 | 14336 | 12246 | 085.421 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-0000000000734380-000599df09bbc4a3.journal | 58720256 | 14336 | 12245 | 085.414 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006d23a4-0005984dfc97fc32.journal | 58720256 | 14336 | 12242 | 085.393 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-0000000000747d1e-00059a2f7faf1d70.journal | 58720256 | 14336 | 12242 | 085.393 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-000000000075b6bb-00059a801bbaf6ca.journal | 58720256 | 14336 | 12242 | 085.393 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-0000000000697714-0005975cf155fc13.journal | 58720256 | 14336 | 12241 | 085.386 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-000000000070d02d-0005993e39fdff2a.journal | 58720256 | 14336 | 12239 | 085.372 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006bea28-000597fda900f06e.journal | 58720256 | 14336 | 12239 | 085.372 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006e5d54-0005989e300b3aa6.journal | 58720256 | 14336 | 12239 | 085.372 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000007209f2-0005998ebb1d505b.journal | 58720256 | 14336 | 12239 | 085.372 |
+-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------+
发现systemd进程journal占用很多buffer
[root@clxcld-gateway-prod d14e699e8bbc43228324a169b0f855fe]# ls -lath *
-rw-r-----+ 1 root systemd-journal 8.0M Jan 2 06:43 system.journal
-rw-r-----+ 1 root systemd-journal 56M Jan 2 03:26 system@6cfacedb39904c2499acffe16d0fd88a-000000000076f05c-00059ad09a381e0a.journal
-rw-r-----+ 1 root systemd-journal 56M Dec 29 05:00 system@6cfacedb39904c2499acffe16d0fd88a-000000000075b6bb-00059a801bbaf6ca.journal
-rw-r-----+ 1 root systemd-journal 56M Dec 25 04:56 system@6cfacedb39904c2499acffe16d0fd88a-0000000000747d1e-00059a2f7faf1d70.journal
-rw-r-----+ 1 root systemd-journal 56M Dec 21 04:47 system@6cfacedb39904c2499acffe16d0fd88a-0000000000734380-000599df09bbc4a3.journal
-rw-r-----+ 1 root systemd-journal 56M Dec 17 04:48 system@6cfacedb39904c2499acffe16d0fd88a-00000000007209f2-0005998ebb1d505b.journal
-rw-r-----+ 1 root systemd-journal 56M Dec 13 04:59 system@6cfacedb39904c2499acffe16d0fd88a-000000000070d02d-0005993e39fdff2a.journal
-rw-r-----+ 1 root systemd-journal 56M Dec 9 04:57 system@6cfacedb39904c2499acffe16d0fd88a-00000000006f9690-000598edd5ef0719.journal
-rw-r-----+ 1 root systemd-journal 56M Dec 5 05:02 system@6cfacedb39904c2499acffe16d0fd88a-00000000006e5d54-0005989e300b3aa6.journal
-rw-r-----+ 1 root systemd-journal 56M Dec 1 06:01 system@6cfacedb39904c2499acffe16d0fd88a-00000000006d23a4-0005984dfc97fc32.journal
-rw-r-----+ 1 root systemd-journal 56M Nov 27 06:20 system@6cfacedb39904c2499acffe16d0fd88a-00000000006bea28-000597fda900f06e.journal
-rw-r-----+ 1 root systemd-journal 56M Nov 23 06:30 system@6cfacedb39904c2499acffe16d0fd88a-00000000006ab097-000597ad5568adc2.journal
-rw-r-----+ 1 root systemd-journal 56M Nov 19 06:40 system@6cfacedb39904c2499acffe16d0fd88a-0000000000697714-0005975cf155fc13.journal
-rw-r-----+ 1 root systemd-journal 56M Nov 15 06:45 system@6cfacedb39904c2499acffe16d0fd88a-0000000000683d77-0005970c8a737b7b.journal
-rw-r-----+ 1 root systemd-journal 56M Nov 11 06:50 system@6cfacedb39904c2499acffe16d0fd88a-00000000006703c5-000596bbef4870ae.journal
参考 https://blog.steamedfish.org/post/systemd-journald/ 清理journal的内存:
journalctl --vacuum-time=10d
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006703c5-000596bbef4870ae.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-0000000000683d77-0005970c8a737b7b.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-0000000000697714-0005975cf155fc13.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006ab097-000597ad5568adc2.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006bea28-000597fda900f06e.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006d23a4-0005984dfc97fc32.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006e5d54-0005989e300b3aa6.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000006f9690-000598edd5ef0719.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-000000000070d02d-0005993e39fdff2a.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-00000000007209f2-0005998ebb1d505b.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-0000000000734380-000599df09bbc4a3.journal (56.0M).
Deleted archived journal /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-0000000000747d1e-00059a2f7faf1d70.journal (56.0M).
Vacuuming done, freed 672.0M of archived journals on disk.
[root@clxcld-gateway-prod d14e699e8bbc43228324a169b0f855fe]# ls
system@6cfacedb39904c2499acffe16d0fd88a-000000000075b6bb-00059a801bbaf6ca.journal system.journal
system@6cfacedb39904c2499acffe16d0fd88a-000000000076f05c-00059ad09a381e0a.journal
继续通过hcache -top 查询,发现journal已经减少了很多
[root@clxcld-gateway-prod d14e699e8bbc43228324a169b0f855fe]# hcache --top 10
+-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------+
| Name | Size (bytes) | Pages | Cached | Percent |
|-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------|
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-000000000075b6bb-00059a801bbaf6ca.journal | 58720256 | 14336 | 12242 | 085.393 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system@6cfacedb39904c2499acffe16d0fd88a-000000000076f05c-00059ad09a381e0a.journal | 58720256 | 14336 | 12226 | 085.282 |
| /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3.x86_64/jre/lib/rt.jar | 72964441 | 17814 | 10463 | 058.735 |
| /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3.x86_64/jre/lib/amd64/server/libjvm.so | 13942784 | 3404 | 3216 | 094.477 |
| /run/log/journal/d14e699e8bbc43228324a169b0f855fe/system.journal | 8388608 | 2048 | 1311 | 064.014 |
| /usr/lib64/dri/swrast_dri.so | 9597216 | 2344 | 1143 | 048.763 |
| /usr/lib64/libmozjs-24.so | 5987032 | 1462 | 1076 | 073.598 |
| /usr/lib64/libgtk-3.so.0.1400.13 | 7116800 | 1738 | 1024 | 058.918 |
| /usr/lib/locale/locale-archive | 106070960 | 25897 | 1024 | 003.954 |
| /usr/lib64/gnome-shell/libgnome-shell.so | 2671456 | 653 | 653 | 100.000 |
+-------------------------------------------------------------------------------------------------------------------------------------+----------------+------------+-----------+---------+
由于journal默认存储方式是auto,并且如果存在目录/var/log/journal则将日志cache到磁盘,否则会缓存到内存中。 因此创建/var/log/journal目录,同时重启journal进程
systemctl restart systemd-journal.service[root@clxcld-gateway-prod journal]# hcache --top 10+---------------------------------------------------------------------------------------------+----------------+------------+-----------+---------+| Name | Size (bytes) | Pages | Cached | Percent ||---------------------------------------------------------------------------------------------+----------------+------------+-----------+---------|| /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3.x86_64/jre/lib/rt.jar | 72964441 | 17814 | 10463 | 058.735 || /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.111-2.b15.el7_3.x86_64/jre/lib/amd64/server/libjvm.so | 13942784 | 3404 | 3216 | 094.477 || /var/log/journal/d14e699e8bbc43228324a169b0f855fe/system.journal | 8388608 | 2048 | 2048 | 100.000 || /usr/lib64/dri/swrast_dri.so | 9597216 | 2344 | 1143 | 048.763 || /usr/lib64/libmozjs-24.so | 5987032 | 1462 | 1076 | 073.598 || /usr/lib64/libgtk-3.so.0.1400.13 | 7116800 | 1738 | 1024 | 058.918 || /usr/lib/locale/locale-archive | 106070960 | 25897 | 1024 | 003.954 || /usr/lib64/gnome-shell/libgnome-shell.so | 2671456 | 653 | 653 | 100.000 || /root/azkaban-3.33.0/azkaban-exec-server-3.33.0/lib/hadoop-common-2.6.1.jar | 3318727 | 811 | 652 | 080.395 || /root/azkaban-3.33.0/azkaban-web-server-3.33.0/lib/hadoop-common-2.6.1.jar | 3318727 | 811 | 652 | 080.395 |+---------------------------------------------------------------------------------------------+----------------+------------+-----------+---------+
重新查询,参考 https://blog.csdn.net/liuxiao723846/article/details/72628847 , system cache没有被立即回收
[root@clxcld-gateway-prod ~]# echo 1 > /proc/sys/vm/drop_caches
[root@clxcld-gateway-prod ~]#free -g
total used free shared buff/cache available
Mem: 15 1 14 0 0 14
Swap: 3 0 3
强制将cache回收。
常用排查工具
- 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``)` ```
虚拟机偷取时间
- 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会非常小。