Linux 서버의 성능 평가

12384 단어 Linux 고급
운영 환경 서버가 느려지는데 어떻게 진단해야 합니까?진단 사고방식은 다음과 같습니다.
하나, 전체 컴퓨터: top
둘째, CPU: vmstat
3. 메모리:free
넷째, 하드디스크: df 보기 디스크 남은 공간
5. 디스크 IO: iostat
6. 네트워크 IO: ifstat

하나, 전체 컴퓨터: top

   
[root@node01 ~]#
[root@node01 ~]# top
top - 01:47:15 up 1 day, 18:04,  3 users,  load average: 0.27, 0.11, 0.03
Tasks:  78 total,   2 running,  75 sleeping,   1 stopped,   0 zombie
Cpu(s): 25.3%us, 11.5%sy,  0.0%ni, 62.8%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:   1004412k total,   569680k used,   434732k free,    33500k buffers
Swap:  2097144k total,        0k used,  2097144k free,   399752k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
  2077 root      20   0 1034m  31m  10m S 22.3  3.2   0:28.88 java
  1963 root      20   0 99.7m 6484 3748 S 14.3  0.6   0:18.53 sshd
     7 root      20   0     0    0    0 R  0.3  0.0   0:44.56 events/0
     1 root      20   0 19232 1516 1236 S  0.0  0.2   0:00.86 init
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
     3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
     4 root      20   0     0    0    0 S  0.0  0.0   0:00.03 ksoftirqd/0
     5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0
     6 root      RT   0     0    0    0 S  0.0  0.0   0:00.14 watchdog/0
     8 root      20   0     0    0    0 S  0.0  0.0   0:00.00 cgroup
     9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper
    10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 netns
    11 root      20   0     0    0    0 S  0.0  0.0   0:00.00 async/mgr
  

주로%CPU,%MEM loadaverage 보기(시스템 평가 부하 값): 1분 5분 15분 평균 부하 값(3개 값 더하기/3 * 60% 이상 100% 부하 중량 표시) 요약: uptime
[root@node01 ~]# uptime
 01:57:36 up 1 day, 18:15,  3 users,  load average: 0.20, 0.18, 0.10


 

둘째, CPU: vmstat

[root@node01 ~]# vmstat
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      0 434020  33796 399764    0    0     1     3   15   32  0  0 100  0  0
[root@node01 ~]# vmstat -n 2 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 434036  33804 399784    0    0     1     3   15   32  0  0 100  0  0
 1  0      0 433988  33804 399784    0    0     0     0 1080 3843 26 14 60  0  0
 1  0      0 433988  33804 399784    0    0     0     0 1075 3225 20  9 70  0  0
 0  0      0 433988  33812 399780    0    0     0    16 1082 3842 25 16 59  0  0
 2  0      0 433988  33812 399784    0    0     0     0 1080 3514 23 12 65  0  0


일반적인 vmstat 도구의 사용은 두 개의 매개 변수를 통해 이루어집니다.
  • 첫 번째 매개 변수는 샘플링의 시간 간격수이고 단위는 초이다
  • 두 번째 매개 변수는 샘플링 횟수입니다

  • procs r: CPU 타임 슬라이드를 실행하고 기다리는 프로세스 트리입니다. 원칙적으로 1핵의 CPU 운행 대기열은 2를 초과하지 마십시오. 전체 시스템의 운행 대기열은 전체 핵 수의 2배를 초과해서는 안 됩니다. 그렇지 않으면 시스템의 압력이 너무 크다는 것을 의미합니다.b: 디스크 I/O, 네트워크 I/O 등 cpu us: 사용자 프로세스가 CPU를 소모하는 시간 백분율, us값이 높고 사용자 프로세스가 CPU를 소모하는 시간이 많으며 장기적으로 50%보다 크면 최적화 프로그램입니다.sy: 코어 프로세스가 소모하는 CPU 시간 백분율 id: 비어 있는 CPU 백분율 wa: 시스템이 IO를 기다리는 CPU 시간 백분율 st: 한 가상 컴퓨터에서 훔친 CPU 시간의 백분율 us+sy 참고값이 80%라면 CPU 부족이 존재할 수 있음
    추가 명령: 모든 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-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

    3. 메모리:free


    free -m
    
    [root@node02 ~]# free -m
                 total       used       free     shared    buffers     cached
    Mem:           980        660        320          0         82         99
    -/+ buffers/cache:        479        501
    Swap:         2047          1       2046
    
    

    usage: free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay] [-c count] [-V]   -b,-k,-m,-g show output in bytes, KB, MB, or GB   -l show detailed low and high memory statistics   -o use old format (no -/+buffers/cache line)   -t display total for RAM + swap   -s update every [delay] seconds   -c update [count] times   -V display version information and exit
    - 경험치:
  • 애플리케이션 가용 메모리/시스템 물리적 메모리 > 70%의 메모리가 충분합니다
  • 응용 프로그램의 사용 가능한 메모리/시스템 물리적 메모리<20% 메모리가 부족하여 메모리를 늘려야 합니다
  • 20%

  • 프로세스당 메모리 정보 사용(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 (diskfree -human)
    
    [root@node02 ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3        97G  2.1G   90G   3% /
    tmpfs           491M     0  491M   0% /dev/shm
    /dev/sda1       194M   28M  157M  15% /boot

    5. 디스크 IO: iostat


    설치:yum install -y sysstat


    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

    디스크 블록 장치 배포:
  • rkB/s초당 읽기 데이터량 KB
  • wkB/s초당 쓰기 데이터량 KB
  • svctm I/O 요청의 평균 서비스 시간, 밀리초
  • await I/O 요청의 평균 대기 시간, 밀리초 단위, 값이 작을수록 성능이 좋다
  • util은 입출력 작업에 1초에 몇 퍼센트의 시간을 보냅니다.100%에 가까울 때 표지 디스크의 광대역이 꽉 차서 최적화 프로그램이나 디스크를 늘려야 한다

  • rkB/s, wkB/s는 시스템 응용에 따라 값이 다르지만 규칙적으로 따른다. 장기적이고 초대형 데이터 읽기와 쓰기는 정상적이지 않기 때문에 프로그램 읽기를 최적화해야 한다.svctm, await의 값은 매우 가깝다. 표지 거호는 I/O 대기가 없고 디스크의 성능이 좋다. 만약에 await의 값이svctm의 값보다 훨씬 높으면 I/O 대기열이 너무 길기 때문에 최적화 프로그램이나 디스크를 교체해야 한다.0
    프로세스당 디스크 정보 사용(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

    6. 네트워크 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/각 네트워크 카드의 in,out, 네트워크 부하 상황을 관찰하고 프로그램 네트워크 읽기와 쓰기가 정상인지 – 프로그램 네트워크 I/O 최적화 – 네트워크 I/O 광대역 증가

     

    좋은 웹페이지 즐겨찾기