[root@tesm-jenkins-16-32 ~]# top
top - 15:05:02 up 38 days, 22:30, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 214 total, 2 running, 212 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8174712 total, 2022928 free, 2040060 used, 4111724 buff/cache
KiB Swap: 8257532 total, 8233776 free, 23756 used. 5691080 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1148 root 20 0 916512 11028 2004 S 0.3 0.1 43:25.68 docker-containe
2369 root 20 0 157728 2336 1552 R 0.3 0.0 0:00.09 top
1 root 20 0 191184 3080 2060 S 0.0 0.0 10:21.62 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.45 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.16 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.08 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 R 0.0 0.0 1:54.15 rcu_sched
10 root rt 0 0 0 0 S 0.0 0.0 0:10.07 watchdog/0
11 root rt 0 0 0 0 S 0.0 0.0 0:07.01 watchdog/1
12 root rt 0 0 0 0 S 0.0 0.0 0:00.07 migration/1
13 root 20 0 0 0 0 S 0.0 0.0 0:00.15 ksoftirqd/1
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H
16 root rt 0 0 0 0 S 0.0 0.0 0:06.91 watchdog/2
17 root rt 0 0 0 0 S 0.0 0.0 0:00.08 migration/2
主要查看 %CPU 、 %MEM
load average:1分钟 5分钟 15分钟平均负载值(3个值相加/3 * 100% 大于60%说明负载过重)
[root@tesm-jenkins-16-32 ~]# vmstat -n 2 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 23756 2024212 0 4111256 0 0 0 1 1 1 0 0 100 0 0
0 0 23756 2024244 0 4111364 0 0 0 0 203 225 0 0 100 0 0
0 0 23756 2024212 0 4111364 0 0 0 4 199 214 0 0 100 0 0
一般vmstat工具的使用是通过两个参数完成的,
第一个参数是采样的时间间隔数,单位是秒。
第二个参数是采样的次数
额外的命令:
查看所有CPU核信息(每隔2秒): mpstat -P ALL 2
[root@tesm-jenkins-16-32 ~]# mpstat -P ALL 2
Linux 3.10.0-693.21.1.el7.x86_64 (tesm-jenkins-16-32) 06/13/2019 _x86_64_ (8 CPU)
03:21:27 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
03:21:29 PM all 0.06 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.94
03:21:29 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:21:29 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:21:29 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:21:29 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:21:29 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:21:29 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:21:29 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:21:29 PM 7 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.50
03:21:29 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
03:21:31 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:21:31 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:21:31 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:21:31 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:21:31 PM 3 0.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.50
03:21:31 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:21:31 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:21:31 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
03:21:31 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
每个进程使用CPU核信息(每个1秒): pidstat -u 1 -p 进程号
[root@tesm-jenkins-16-32 ~]# ps -ef | grep java
jenkins 1214 1 0 May05 ? 01:04:00 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/opt/jenkins -jar /opt/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
root 3250 2304 0 15:22 pts/0 00:00:00 grep --color=auto java
[root@tesm-jenkins-16-32 ~]# pidstat -u 1 -p 1214
Linux 3.10.0-693.21.1.el7.x86_64 (tesm-jenkins-16-32) 06/13/2019 _x86_64_ (8 CPU)
03:22:52 PM UID PID %usr %system %guest %CPU CPU Command
03:22:53 PM 997 1214 0.00 0.00 0.00 0.00 0 java
03:22:54 PM 997 1214 0.00 0.00 0.00 0.00 0 java
03:22:55 PM 997 1214 0.00 1.00 0.00 1.00 0 java
03:22:56 PM 997 1214 0.00 0.00 0.00 0.00 0 java
03:22:57 PM 997 1214 0.00 0.00 0.00 0.00 0 java
03:22:58 PM 997 1214 0.00 0.00 0.00 0.00 0 java
free -m
[root@tesm-jenkins-16-32 ~]# free -m
total used free shared buff/cache available
Mem: 7983 1992 1974 56 4015 5557
Swap: 8063 23 8040
每个进程使用内存信息(每个1秒): pidstat -r 1 -p 进程号
[root@tesm-jenkins-16-32 ~]# pidstat -r 1 -p 1214
Linux 3.10.0-693.21.1.el7.x86_64 (tesm-jenkins-16-32) 06/13/2019 _x86_64_ (8 CPU)
03:29:53 PM UID PID minflt/s majflt/s VSZ RSS %MEM Command
03:29:54 PM 997 1214 0.00 0.00 8033372 1636384 20.02 java
03:29:55 PM 997 1214 0.00 0.00 8033372 1636384 20.02 java
03:29:56 PM 997 1214 0.00 0.00 8033372 1636384 20.02 java
03:29:57 PM 997 1214 0.00 0.00 8033372 1636384 20.02 java
df -h
[root@tesm-jenkins-16-32 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 48G 24G 25G 50% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 57M 3.9G 2% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 210M 805M 21% /boot
/dev/mapper/centos-home 24G 8.4G 15G 36% /home
tmpfs 799M 0 799M 0% /run/user/0
iostat -xdk 2 3
[root@tesm-jenkins-16-32 ~]# iostat -xdk 2 3
Linux 3.10.0-693.21.1.el7.x86_64 (tesm-jenkins-16-32) 06/13/2019 _x86_64_ (8 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
sda 0.00 0.02 0.05 0.32 1.03 9.55 57.10 0.00 7.22 5.69 7.48 0.54 0.02
dm-0 0.00 0.00 0.05 0.33 1.01 9.54 54.79 0.00 9.12 5.58 9.67 0.48 0.02
dm-1 0.00 0.00 0.00 0.00 0.00 0.01 8.39 0.00 51.80 178.42 13.19 5.43 0.00
dm-2 0.00 0.00 0.00 0.00 0.02 0.00 19.97 0.00 1.22 1.77 0.15 1.20 0.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.50 0.00 4.00 0.00 16.00 0.01 24.00 24.00 0.00 24.00 1.20
dm-0 0.00 0.00 0.50 0.00 4.00 0.00 16.00 0.01 24.00 24.00 0.00 24.00 1.20
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 1.00 0.00 4.00 8.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 1.00 0.00 4.00 8.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 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队列非空的时间比率
重点关注参数
1、iowait% 表示CPU等待IO时间占整个CPU周期的百分比,如果iowait值超过50%,或者明显大于%system、%user以及%idle,表示IO可能存在问题。
2、avgqu-sz 表示磁盘IO队列长度,即IO等待个数。
3、await 表示每次IO请求等待时间,包括等待时间和处理时间
4、svctm 表示每次IO请求处理的时间
5、%util 表示磁盘忙碌情况,一般该值超过80%表示该磁盘可能处于繁忙状态。
rkB/s、wkB/s根据系统应用不同会有不同的值,担忧规律遵循:长期、超大数据读写,肯定不正常,需要优化程序读取。
svctm 、await 的值很接近,标识巨虎没有I/O等待,磁盘性能好,如果await的值远高于svctm的值,则表示I/O队列等待太长,需要优化程序或更换磁盘。
每个进程使用磁盘信息(每个1秒): pidstat -d 1 -p 进程号
[root@tesm-jenkins-16-32 ~]# pidstat -d 1 -p 1214
Linux 3.10.0-693.21.1.el7.x86_64 (tesm-jenkins-16-32) 06/13/2019 _x86_64_ (8 CPU)
04:41:17 PM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command
04:41:18 PM 997 1214 0.00 0.00 0.00 java
04:41:19 PM 997 1214 0.00 8.00 0.00 java
04:41:20 PM 997 1214 0.00 0.00 0.00 java
04:41:21 PM 997 1214 0.00 0.00 0.00 java
04:41:22 PM 997 1214 0.00 0.00 0.00 java
1、卸载原装ifstat
find / -name ifstat
把/usr/sbin/ifstat、ifstat的man目录的.gz文件删除
2、下载安装
wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz
tar xzvf ifstat-1.1.tar.gz
cd ifstat-1.1
./configure
make
make install
cp ifstat /usr/sbin/
[root@node3 ifstat-1.1]# ifstat 1
eth0 eth1 docker0
KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out
0.00 0.00 19.05 1377.84 0.00 0.00
0.00 0.00 19.54 1388.09 0.00 0.00
0.00 0.00 19.39 1282.41 0.00 0.00
0.00 0.00 19.78 1392.49 0.00 0.00
0.00 0.00 19.85 1403.73 0.00 0.00
0.00 0.00 20.42 1383.93 0.00 0.00
0.00 0.00 18.46 1278.94 0.00 0.00
0.00 0.00 19.80 1399.47 0.00 0.00
0.00 0.00 18.27 1271.58 0.00 0.00
0.00 0.00 17.58 1268.47 0.00 0.00
0.00 0.00 19.60 1392.27 0.00 0.00
0.00 0.00 20.13 1393.69 0.00 0.00
0.00 0.00 19.90 1386.89 0.00 0.00
0.00 0.00 18.04 1277.04 0.00 0.00
0.00 0.00 21.35 1513.58 0.00 0.00
0.00 0.00 18.23 1283.19 0.00 0.00
0.00 0.00 17.93 1275.76 0.00 0.00
各个网卡的in、out,观察网络负载情况,程序网络读写是否正常
–程序网络I/O优化
–增加网络I/O宽带
top - 09:11:37 up 21 min, 3 users, load average: 0.54, 0.25, 0.16
Tasks: 94 total, 1 running, 93 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.0 us, 6.4 sy, 0.0 ni, 89.3 id, 0.0 wa, 0.0 hi, 1.3 si, 0.0 st
KiB Mem : 499428 total, 81452 free, 131984 used, 285992 buff/cache
KiB Swap: 1572860 total, 1572860 free, 0 used. 325184 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2485 root 20 0 2024360 25616 12256 S 8.6 5.1 0:08.54 java
2436 root 20 0 154608 5500 4132 S 1.3 1.1 0:01.50 sshd
580 root 20 0 376240 9256 6804 S 0.3 1.9 0:00.20 NetworkManager
1331 root 20 0 0 0 0 S 0.3 0.0 0:00.41 kworker/0:1
1 root 20 0 128036 6604 4144 S 0.0 1.3 0:01.48 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.08 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kworker/u2:0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.53 rcu_sched
[root@node3 ~]# jps -l
2516 sun.tools.jps.Jps
2485 com.wu.pratice.jvm.UnableCreateNewThreadDemo
1413 -- process information unavailable
7162 -- process information unavailable
[root@node3 ~]# ps -ef | grep java
root 2485 2440 8 09:09 pts/2 00:00:26 java com.wu.pratice.jvm.UnableCreateNewThreadDemo
root 2527 2495 0 09:14 pts/1 00:00:00 grep --color=auto java
[root@node3 ~]# ps -mp 2485 -o THREAD,tid,time
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
root 8.5 - - - - - - 00:00:30
root 0.0 19 - futex_ - - 2485 00:00:00
root 8.3 19 - n_tty_ - - 2486 00:00:29
root 0.0 19 - futex_ - - 2487 00:00:00
root 0.0 19 - futex_ - - 2488 00:00:00
root 0.0 19 - futex_ - - 2489 00:00:00
root 0.0 19 - futex_ - - 2490 00:00:00
root 0.0 19 - futex_ - - 2491 00:00:00
root 0.0 19 - futex_ - - 2492 00:00:00
root 0.0 19 - futex_ - - 2493 00:00:00
root 0.0 19 - futex_ - - 2494 00:00:00
[root@node3 ~]# jstack 2485 | grep 9b6 -A60
"main" #1 prio=5 os_prio=0 tid=0x00007f165004b800 nid=0x9b6 runnable [0x00007f16590c3000]
java.lang.Thread.State: RUNNABLE
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:326)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
- locked <0x00000000fac20580> (a java.io.BufferedOutputStream)
at java.io.PrintStream.write(PrintStream.java:482)
- locked <0x00000000fac18170> (a java.io.PrintStream)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)
- locked <0x00000000fac18128> (a java.io.OutputStreamWriter)
at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)
at java.io.PrintStream.newLine(PrintStream.java:546)
- eliminated <0x00000000fac18170> (a java.io.PrintStream)
at java.io.PrintStream.println(PrintStream.java:807)
- locked <0x00000000fac18170> (a java.io.PrintStream)
at com.wu.pratice.jvm.UnableCreateNewThreadDemo.main(UnableCreateNewThreadDemo.java:24)
"VM Thread" os_prio=0 tid=0x00007f16500cb800 nid=0x9b7 runnable
"VM Periodic Task Thread" os_prio=0 tid=0x00007f165011a000 nid=0x9be waiting on condition
JNI global references: 5