운영 환경 서버 느려짐, 진단 사고방식 및 성능 평가
운영 환경 서버 느려짐, 진단 사고방식 및 성능 평가
전체 시스템:top
[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 * 60% 이상 100%)
CPU: vmstat
[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 도구의 사용은 두 개의 매개 변수를 통해 이루어진다. 첫 번째 매개 변수는 샘플링의 시간 간격수이고 단위는 초이다.두 번째 파라미터는 샘플링 횟수입니다.
[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-u1 -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
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-r1-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 남은 디스크 보기
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
디스크 IO: iostat
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: 1초에 완성된 읽기 횟수 w/s: 1초에 완성된 쓰기 횟수 rkB/s: 1초에 데이터를 읽는 횟수(kB 단위) wkB/s: 1초에 데이터를 쓰는 횟수(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-d1 -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
네트워크 IO: ifstat
1. 원본 ifstatfind/-name ifstat을 마운트 해제하여/usr/sbin/ifstat,ifstat의 man 디렉터리를 제거합니다.gz 파일 삭제 2, 다운로드 설치 wgethttp://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 광대역 증가
CPU가 너무 높고, 사고방식과 포지셔닝
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
제이티의 사용에 대한 상세한 설명Continuation 메커니즘을 이용하여 대량의 사용자 요청과 비교적 긴 연결을 처리한다.또한 Jetty는 매우 좋은 인터페이스를 설계했기 때문에 Jetty의 어떤 실현이 사용자의 수요를 만족시키지 못할 때 사용자...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.