26. 60s 빠른 포지셔닝 서버 성능 문제

12646 단어
60s 신속한 성능 문제 파악
  • uptime
  • dmesg | tail
  • vmstat 1
  • mpstat -P ALL 1
  • pidstat 1
  • iostat -xz 1
  • free -m
  • sar -n DEV 1
  • sar -n TCP,ETCP 1
  • top

  • 1、uptime
    $ uptime
    23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02
    

    이것은 시스템의 평균 부하를 신속하게 보는 방법으로 시스템에서 실행해야 할 작업 (프로세스) 이 얼마나 많은지를 나타낸다.Linux 시스템에서 이러한 숫자는 CPU에서 실행해야 하는 프로세스와 입출력을 기다리는 프로세스(일반적으로 디스크 입출력)를 포함합니다.그것은 단지 시스템 부하에 대한 대략적인 전시일 뿐, 조금만 보면 된다.너는 구체적인 상황을 한층 더 이해하기 위해 다른 도구가 필요하다.
    이 세 개의 숫자는 1분, 5분, 15분 동안 시스템의 부하 총량 평균치를 지수 비율에 따라 압축한 결과를 보여준다.그 중에서 우리는 시스템의 부하가 어떻게 시간에 따라 변화하는지 볼 수 있다.예를 들어 문제를 검사한 후에 1분에 대응하는 값이 15분보다 훨씬 적은 것을 보면 이 문제가 이미 지나갔고 제때에 관찰하지 못했다는 것을 설명할 수 있다.
    위의 예에서 시스템 부하는 시간이 증가함에 따라 증가한다. 왜냐하면 최근 1분의 부하치가 30을 넘었고 15분의 평균 부하는 19에 불과하기 때문이다.이렇게 현저한 차이는 CPU 부하와 같은 여러 가지 의미를 포함하고 있다.더 확인하려면 vmstat이나 mpstat 명령을 실행해야 합니다.
    2、dmesg | tail
    $ dmesg | tail
    [1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
    [...]
    [1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
    [1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
    [2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request.  Check SNMP counters.
    

    이 명령은 가장 가까운 10개의 시스템 메시지를 보여 줍니다. 만약 그것들이 존재한다면.성능 문제를 야기할 수 있는 오류를 찾습니다.위의 예는 oom-killer와 TCP가 요청을 버리는 것을 포함합니다.절대 이 걸음을 놓치지 마세요!dmesg 명령은 영원히 시도할 가치가 있다.
    3、vmstat 1
    $ vmstat 1
    procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
    34  0    0 200889792  73708 591828    0    0     0     5    6   10 96  1  3  0  0
    32  0    0 200889920  73708 591860    0    0     0   592 13284 4282 98  1  1  0  0
    32  0    0 200890112  73708 591860    0    0     0     0 9501 2154 99  1  0  0  0
    32  0    0 200889568  73712 591856    0    0     0    48 11900 2459 99  0  0  0  0
    32  0    0 200890208  73712 591860    0    0     0     0 15898 4840 98  1  1  0  0
    

    vmstat(8)은 가상 메모리 통계의 약칭으로 몇 십 년 전에 BSD를 위해 만들어진 일반적인 도구이다.각 행에 중요한 서버의 통계 요약을 인쇄합니다.
    vmstat 명령은 매 초의 통계 요약을 출력하기 위해 매개 변수 1을 지정합니다.(이 버전의 vmstat) 출력된 첫 줄의 열은 1초 전의 값이 아니라 켜진 후의 평균 값입니다.지금 우리는 네가 모든 열을 이해하고 기억하고 싶지 않으면 첫 번째 줄을 건너뛴다.
    다음 열을 확인합니다.
  • r: CPU에서 실행 및 대기 중인 프로세스의 수입니다.CPU가 I/O를 포함하지 않기 때문에 CPU가 포화되었는지 확인하는 데 평균 부하보다 좋은 신호를 제공합니다.설명: "r"의 값이 CPU 수량보다 크면 포화됨을 나타낸다.
  • free: kb 단위로 표시된 빈 메모리.만약 숫자 수가 매우 많다면, 이것은 네가 충분한 여유 메모리를 가지고 있다는 것을 설명한다."free-m"명령은 아래의 일곱 번째 명령으로 빈 메모리의 상태를 더 잘 설명할 수 있습니다.
  • si, so: Swap-ins와 swap-outs.만약 그것들이 0이 아니라면, 너의 메모리가 부족하다는 것을 대표한다.
  • us,sy,id,wa,st:이것들은 모두 모든 CPU의 CPU 분해 시간을 평균한 것이다.사용자 시간 (user), 시스템 시간 (커널) (시스템), 유휴 (idle), 대기 I/O (wait), 사용 시간 (stolen) (다른 방문객, 또는 Xen을 사용하여 방문객 자신의 독립된 드라이브 영역) 입니다.

  • CPU 분해 시간은 사용자 시간과 시스템 시간을 통해 CPU가 분주한 상태인지 확인합니다.입출력을 기다리는 시간이 변하지 않으면 디스크 병목이 표시됩니다.이것이 바로 CPU의 유휴입니다. 작업이 디스크 I/O를 끊을 때까지 막혀 있기 때문입니다.너는 I/O를 기다리는 것을 CPU가 유휴된 또 다른 형식으로 여길 수 있다. 이것은 왜 CPU가 유휴되었는지에 대한 단서를 제공한다.
    입출력 처리에 있어 시스템 시간은 매우 중요하다.평균 시스템 시간의 20%를 초과하여 더욱 연구할 필요가 있다. 아마도 코어가 I/O를 처리할 때 효율이 너무 낮을 것이다.
    위의 예에서 CPU 시간은 거의 사용자 등급에 완전히 걸렸고 응용 프로그램이 CPU 시간을 너무 많이 차지했다는 것을 나타낸다.CPU의 평균 사용률도 90% 이상입니다.이것은 반드시 문제가 아니다."r"열의 포화도를 검사하십시오.
    4、 mpstat -P ALL 1
    $ mpstat -P ALL 1
    Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU)
    
    07:38:49 PM  CPU   %usr  %nice   %sys %iowait   %irq  %soft  %steal  %guest  %gnice  %idle
    07:38:50 PM  all  98.47   0.00   0.75    0.00   0.00   0.00    0.00    0.00    0.00   0.78
    07:38:50 PM    0  96.04   0.00   2.97    0.00   0.00   0.00    0.00    0.00    0.00   0.99
    07:38:50 PM    1  97.00   0.00   1.00    0.00   0.00   0.00    0.00    0.00    0.00   2.00
    07:38:50 PM    2  98.00   0.00   1.00    0.00   0.00   0.00    0.00    0.00    0.00   1.00
    07:38:50 PM    3  96.97   0.00   0.00    0.00   0.00   0.00    0.00    0.00    0.00   3.03
    [...]
    

    이 명령은 모든 CPU의 CPU 분해 시간을 인쇄합니다. 불균형한 사용 상황을 검사하는 데 사용할 수 있습니다.하나의 단독 CPU가 바쁘다는 것은 하나의 라인을 실행하고 있는 응용 프로그램을 대표한다.
    5、 pidstat 1
    $ pidstat 1
    Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU)
    
    07:41:02 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
    07:41:03 PM     0         9    0.00    0.94    0.00    0.94     1  rcuos/0
    07:41:03 PM     0      4214    5.66    5.66    0.00   11.32    15  mesos-slave
    07:41:03 PM     0      4354    0.94    0.94    0.00    1.89     8  java
    07:41:03 PM     0      6521 1596.23    1.89    0.00 1598.11    27  java
    07:41:03 PM     0      6564 1571.70    7.55    0.00 1579.25    28  java
    07:41:03 PM 60004     60154    0.94    4.72    0.00    5.66     9  pidstat
    
    07:41:03 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
    07:41:04 PM     0      4214    6.00    2.00    0.00    8.00    15  mesos-slave
    07:41:04 PM     0      6521 1590.00    1.00    0.00 1591.00    27  java
    07:41:04 PM     0      6564 1573.00   10.00    0.00 1583.00    28  java
    07:41:04 PM   108      6718    1.00    0.00    0.00    1.00     0  snmp-pass
    07:41:04 PM 60004     60154    1.00    4.00    0.00    5.00     9  pidstat
    ^C
    

    pidstat 명령은 top 명령이 모든 프로세스에 대한 통계 요약과 비슷하지만, top의 도배를 대체하기 위해 스크롤된 통계 요약을 순환적으로 출력합니다.이것은 실시간으로 볼 수 있을 뿐만 아니라, 당신이 본 것을 조사 기록에 복사하여 붙일 수도 있다.
    위의 예에서는 두 Java 프로세스가 CPU를 소비하고 있음을 나타냅니다.%CPU 이 열은 모든 CPU의 합계입니다.1591%는 이 Java 프로세스에 16개에 가까운 CPU가 소모되었음을 나타냅니다.
    6、 iostat -xz 1
    $ iostat -xz 1
    Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU)
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
              73.96    0.00    3.73    0.03    0.06   22.21
    
    Device:   rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
    xvda        0.00     0.23    0.21    0.18     4.52     2.08    34.37     0.00    9.98   13.80    5.42   2.44   0.09
    xvdb        0.01     0.00    1.02    8.94   127.97   598.53   145.79     0.00    0.43    1.78    0.28   0.25   0.25
    xvdc        0.01     0.00    1.02    8.86   127.79   595.94   146.50     0.00    0.45    1.82    0.30   0.27   0.26
    dm-0        0.00     0.00    0.69    2.32    10.47    31.69    28.01     0.01    3.23    0.71    3.98   0.13   0.04
    dm-1        0.00     0.00    0.00    0.94     0.01     3.78     8.00     0.33  345.84    0.04  346.81   0.01   0.00
    dm-2        0.00     0.00    0.09    0.07     1.35     0.36    22.50     0.00    2.55    0.23    5.62   1.78   0.03
    [...]
    ^C
    

    이것은 작업 부하든 성능 표현이든 블록 장치 (디스크) 의 상황을 보는 데 아주 좋은 도구이다.열 보기:
  • r/s, w/s, rkB/s, wkB/s: 이것은 각각 이 장치의 초당 읽기 횟수, 쓰기 횟수, 읽기 kb수와 쓰기 kb수를 대표한다.이것은 작업 부하를 설명하는 데 쓰인다.성능 문제는 단지 너무 큰 부하를 넣었기 때문일 수 있다.
  • await: 밀리초 단위의 입출력 평균 소모 시간.이것은 프로그램이 소모하는 실제 시간입니다. 왜냐하면 줄 서기 시간과 처리 시간을 포함하기 때문입니다.예상보다 더 큰 평균 시간은 설비의 포화를 의미하거나 설비에 문제가 생겼다는 것을 의미할 수 있다.
  • avgqu-sz: 장치에 요청한 평균 수량.값이 1보다 크면 디바이스가 요청을 병렬적으로 처리할 수 있지만 특히 여러 디스크로 구성된 가상 디바이스는 포화됨을 나타냅니다.
  • %util: 설비 이용률.이 값은 이 장치가 작업할 때 초당 바쁜 상태임을 나타내는 백분율이다.값이 60% 보다 크면 일반적으로 성능이 좋지 않다는 것을 나타낸다. (await에서 볼 수 있듯이) 비록 장치 자체에 달려 있지만.값이 100%에 가깝다는 것은 통상적으로 포화되었다는 것을 의미한다.

  • 스토리지 디바이스가 많은 백엔드 디스크를 위한 논리적 디스크 디바이스인 경우 100% 활용도는 현재 일부 I/O를 처리하고 있다는 의미일 수 있지만 백엔드 디스크가 포화되지 않고 더 많은 작업을 처리할 수 있습니다.
    디스크 입출력 성능이 떨어지는 것은 반드시 프로그램의 문제가 아니라는 것을 명심하십시오.대부분의 기술은 일반적으로 비동기식 I/O로 애플리케이션이 막히지 않고 지연됩니다(예: 미리 읽기, 쓰기 버퍼).
    7、 free -m
    $ free -m
                 total       used       free     shared    buffers     cached
    Mem:        245998      24545     221453         83         59        541
    -/+ buffers/cache:      23944     222053
    Swap:            0          0          0
    

    오른쪽의 두 열 표현식:
  • buffers: 블록 장치 I/O에 사용되는 버퍼 캐시입니다.
  • cached: 파일 시스템의 페이지 캐시에 사용됩니다.

  • 우리는 단지 0에 가깝지 않은 크기를 검사하고 싶을 뿐, 더 높은 디스크 I/O (iostat 확인), 더 나쁜 성능을 초래할 수 있다.위의 예는 보기에 그런대로 괜찮다. 각 열마다 M개의 크기가 매우 많다.
    첫 줄보다 -/+buffers/cache가 제공하는 메모리 사용량이 더 정확합니다.Linux는 잠시 사용할 수 없는 메모리를 캐시로 사용하고 필요할 때 바로 다시 분배합니다.그래서 일부 캐시로 사용되는 메모리도 사실 빈 메모리라고 할 수 있다.이 점을 설명하기 위해 심지어 어떤 사람들은 전문적으로 사이트인 linuxatemyram을 만들었다.
    만약 당신이 Linux에 ZFS를 설치했다면, 이 점은 더욱 곤혹스러울 것이다. 왜냐하면 ZFS는 자신의 파일 시스템 캐시가free-m에 포함되지 않기 때문이다.때때로 시스템에서 사용할 수 있는 빈 메모리가 많지 않은 것을 발견하지만, 사실 메모리는 모두 ZFS의 캐시에 있다.
    8、 sar -n DEV 1
    $ sar -n DEV 1
    Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015     _x86_64_    (32 CPU)
    
    12:16:48 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
    12:16:49 AM      eth0  18763.00   5032.00  20686.42    478.30      0.00      0.00      0.00      0.00
    12:16:49 AM        lo     14.00     14.00      1.36      1.36      0.00      0.00      0.00      0.00
    12:16:49 AM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
    12:16:49 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
    12:16:50 AM      eth0  19763.00   5101.00  21999.10    482.56      0.00      0.00      0.00      0.00
    12:16:50 AM        lo     20.00     20.00      3.25      3.25      0.00      0.00      0.00      0.00
    12:16:50 AM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    ^C
    

    이 도구는 네트워크 인터페이스의 흡수량: rxkB/s와 txkB/s, 그리고 한도액에 도달했는지 확인하는 데 사용할 수 있습니다.위의 예에서 eth0이 수신한 데이터는 22Mbytes/s, 즉 176Mbits/sec에 달한다. (한도는 1Gbit/sec)
    우리가 사용하는 버전에는%ifutil을 장치 사용률 (수신과 발송의 최대치) 의 지표로 제공했다.우리도 Brendan의 nicstat 도구로 이 값을 계량할 수 있다.nicstat와 같이sar가 표시한 이 값은 정확하게 얻기 어려운데, 이 예에서 정상적인 작업(0.00)이 아니다.
    9、 sar -n TCP,ETCP 1
    $ sar -n TCP,ETCP 1
    Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU)
    
    12:17:19 AM  active/s passive/s    iseg/s    oseg/s
    12:17:20 AM      1.00      0.00  10233.00  18846.00
    
    12:17:19 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
    12:17:20 AM      0.00      0.00      0.00      0.00      0.00
    
    12:17:20 AM  active/s passive/s    iseg/s    oseg/s
    12:17:21 AM      1.00      0.00   8359.00   6039.00
    
    12:17:20 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
    12:17:21 AM      0.00      0.00      0.00      0.00      0.00
    ^C
    

    이것은 일부 관건적인 TCP 지표의 요약 보기이다.여기에는 다음이 포함됩니다.
  • active/s: 초당 로컬 시작 TCP 연결 수(예를 들어connect()를 통해).
  • passive/s: 초당 원격으로 시작하는 TCP 연결 수(예를 들어 accept ()를 통해).
  • retrans/s: 초당 TCP 재전송 횟수.
  • active와passive의 연결 수는 서버 부하를 대략적으로 평가하는 데 매우 유용하다. 새로 받아들인 연결 수(passive), 하행 연결 수(active).active 연결은 대외적인 것으로 이해할 수 있고passive 연결은 내부적인 것으로 엄격하게 말하면 완전히 정확하지는 않지만 (예를 들어localhost에서localhost까지의 연결)

  • 재전송은 네트워크와 서버 문제가 발생한 징조이다.신뢰할 수 없는 네트워크 (예를 들어 공공 네트워크) 때문일 수도 있고, 서버가 과부하되어 가방을 잃어버릴 수도 있다.위의 예는 초당 하나의 새로운 TCP 연결만 보여 줍니다.
    10、 top
    $ top
    top - 00:15:40 up 21:56,  1 user,  load average: 31.09, 29.87, 29.92
    Tasks: 871 total,   1 running, 868 sleeping,   0 stopped,   2 zombie
    %Cpu(s): 96.8 us,  0.4 sy,  0.0 ni,  2.7 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem:  25190241+total, 24921688 used, 22698073+free,    60448 buffers
    KiB Swap:        0 total,        0 used,        0 free.   554208 cached Mem
    
       PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     20248 root      20   0  0.227t 0.012t  18748 S  3090  5.2  29812:58 java
      4213 root      20   0 2722544  64640  44232 S  23.5  0.0 233:35.37 mesos-slave
     66128 titancl+  20   0   24344   2332   1172 R   1.0  0.0   0:00.07 top
      5235 root      20   0 38.227g 547004  49996 S   0.7  0.2   2:02.74 java
      4299 root      20   0 20.015g 2.682g  16836 S   0.3  1.1  33:14.42 java
         1 root      20   0   33620   2920   1496 S   0.0  0.0   0:03.82 init
         2 root      20   0       0      0      0 S   0.0  0.0   0:00.02 kthreadd
         3 root      20   0       0      0      0 S   0.0  0.0   0:05.35 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:06.94 kworker/u256:0
         8 root      20   0       0      0      0 S   0.0  0.0   2:38.05 rcu_sched
    

    top 명령은 우리가 이전에 검사한 지표를 많이 포함하고 있다.이전의 명령 출력에 비해 부하가 변할 수 있다는 것을 보여 주기 위해 편리하게 실행할 수 있다.
    top의 단점 중 하나는 데이터가 시간에 따라 변동하는 추세를 보기 어렵다는 것이다.vmstat과pidstat가 제공하는 스크롤 출력은 더 잘 알 수 있습니다.만약 당신이 충분한 속도로 출력을 멈추지 않는다면, (Ctrl-S가 멈추고, Ctrl-Q가 계속된다) 간헐적인 문제의 단서도 화면이 정리되어 잃어버릴 수 있습니다.
    소프트웨어 테스트 왕 주소 소프트웨어 테스트 왕 블로그 주소
    위챗 공중번호: 소프트웨어 테스트 왕에 관심을 가져 주십시오.소프트웨어 테스트 커뮤니케이션 그룹: 809111560
    전재 출처 주의하세요, 협조해 주셔서 감사합니다

    좋은 웹페이지 즐겨찾기