>시스템 튜토리얼 >리눅스 >60초 안에 Linux 시스템 성능 문제를 진단하세요

60초 안에 Linux 시스템 성능 문제를 진단하세요

王林
王林앞으로
2024-02-12 23:36:161231검색

Linux 시스템이 느리게 실행되거나 비정상적으로 멈추는 경우가 자주 있습니까? 그렇다면 성능을 확인하여 문제를 찾고 시스템 효율성을 높이는 데 60초밖에 걸리지 않으니 너무 걱정하지 않으셔도 됩니다.

60초 안에 Linux 시스템 성능 문제를 진단하세요

개요: 다음 명령을 실행하면 1분 안에 시스템 리소스 사용량을 전반적으로 이해할 수 있습니다

으아악

이러한 명령 중 일부는 sysstat 패키지를 설치해야 하며 일부는 procps 패키지에서 제공됩니다. 이러한 명령의 출력은 성능 병목 현상을 빠르게 찾아내고 소위 USE 방법인 모든 리소스(CPU, 메모리, 디스크 IO 등)의 활용도, 포화도 및 오류 지표를 확인하는 데 도움이 됩니다.

이 명령을 하나씩 소개하겠습니다. 이 명령에 대한 자세한 매개변수와 지침은 명령 매뉴얼을 참조하세요.

가동시간

으아악

이 명령을 사용하면 머신의 로드 상태를 빠르게 확인할 수 있습니다. Linux 시스템에서 이러한 데이터는 CPU 리소스를 기다리고 있으며 중단 불가능한 IO 프로세스에서 차단된 프로세스 수를 나타냅니다(프로세스 상태는 D). 이 데이터를 통해 시스템 리소스 사용량을 높은 수준으로 이해할 수 있습니다.

명령의 출력은 각각 1분, 5분, 15분 동안의 평균 부하 조건을 나타냅니다. 이 세 가지 데이터를 통해 해당 지역의 서버 부하가 타이트해지고 있는지, 완화되고 있는지를 파악할 수 있습니다. 1분 평균 로드가 매우 높고 15분 평균 로드가 매우 낮다면 서버가 높은 로드를 명령하고 있다는 의미이므로 어디에서 CPU 리소스가 소비되고 있는지 추가 조사가 필요합니다. 반면, 15분 로드 평균이 높고, 1분 로드 평균이 낮다면 CPU 자원이 타이트한 시기가 지났을 가능성이 있습니다.

위 예시의 출력은 마지막 순간의 평균 부하가 매우 높고 지난 15분간의 부하보다 훨씬 높다는 것을 보여줍니다. 따라서 현재 시스템에서 어떤 프로세스가 많은 리소스를 소비하는지 계속해서 조사해야 합니다. . vmstat, mpstat 및 아래에 소개된 기타 명령을 통해 문제를 추가로 해결할 수 있습니다.

dmesg丨tail

으아악

이 명령은 시스템 로그의 마지막 10줄을 출력합니다. 예제의 출력에서 ​​커널 oom kill과 TCP 패킷 손실을 볼 수 있습니다. 이러한 로그는 성능 문제를 해결하는 데 도움이 될 수 있습니다. 이 단계를 잊지 마세요.

vmstat 1

으아악

vmstat(8) 명령을 사용하면 각 줄은 시스템 상태를 더 자세히 이해할 수 있는 몇 가지 핵심 시스템 표시기를 출력합니다. 다음 매개변수 1은 통계 정보가 초당 1회 출력됨을 나타냅니다. 헤더는 각 열의 의미를 나타냅니다. 이 열은 성능 튜닝과 관련된 몇 가지 열을 소개합니다.

r: CPU 리소스를 기다리는 프로세스 수입니다. 이 데이터는 평균 로드보다 CPU 로드를 더 잘 반영합니다. 데이터에는 IO를 기다리는 프로세스가 포함되지 않습니다. 이 값이 시스템 CPU 코어 수보다 크면 시스템의 CPU 리소스가 포화 상태입니다.

free: 시스템에서 사용할 수 있는 메모리 양(KB)입니다. 남은 메모리가 부족하면 시스템 성능 문제도 발생합니다. 아래에 소개된 free 명령을 사용하면 시스템 메모리 사용량을 더 자세히 이해할 수 있습니다.

si, so: 스왑 영역의 쓰기 및 읽기 수입니다. 이 데이터가 0이 아니면 시스템이 이미 스왑 영역(swap)을 사용하고 있고 머신의 물리적 메모리가 부족하다는 의미입니다.

us, sy, id, wa, st: 이들은 모두 CPU 시간 소비를 나타냅니다. 이들은 각각 사용자 시간(user), 시스템(커널) 시간(sys), 유휴 시간(idle) 및 IO 대기 시간(wait)을 나타냅니다. ) 및 도난당한 시간(도난, 일반적으로 다른 가상 머신에서 소비).

위의 CPU 시간을 통해 CPU가 사용 중인지 여부를 빠르게 이해할 수 있습니다. 일반적으로 사용자 시간과 시스템 시간의 합이 매우 크면 CPU는 명령을 실행하느라 바쁩니다. IO 대기 시간이 길면 시스템의 병목 현상이 디스크 IO일 수 있습니다.

예제 명령의 출력을 보면 사용자 모드에서 많은 CPU 시간이 소비되는 것을 볼 수 있습니다. 즉, 사용자 애플리케이션이 CPU 시간을 소비합니다. 이는 반드시 성능 문제는 아니며 r 대기열과 함께 분석해야 합니다.

mpstat-P 전체 1 으아악

이 명령은 각 CPU의 사용량을 표시할 수 있습니다. CPU 사용량이 특히 높은 경우 단일 스레드 애플리케이션으로 인해 발생할 수 있습니다.

pidstat 1 으아악

pidstat 명령은 프로세스의 CPU 사용량을 출력합니다. 이 명령은 계속 출력되며 이전 데이터를 덮어쓰지 않으므로 시스템 역학을 쉽게 관찰할 수 있습니다. 위 출력에서 ​​두 개의 JAVA 프로세스가 CPU 시간의 거의 1600%를 차지하고 약 16개의 CPU 코어 컴퓨팅 리소스를 소비한다는 것을 알 수 있습니다.

iostat-xz 1 으아악

iostat 명령은 주로 머신 디스크 IO 상태를 확인하는 데 사용됩니다. 이 명령으로 출력되는 열의 주요 의미는 다음과 같습니다.

r/s, w/s, rkB/s, wkB/s:分别表示每秒读写次数和每秒读写数据量(千字节)。读写量过大,可能会引起性能问题。
await:IO操作的平均等待时间,单位是毫秒。这是应用程序在和磁盘交互时,需要消耗的时间,包括IO等待和实际操作的耗时。如果这个数值过大,可能是硬件设备遇到了瓶颈或者出现故障。
avgqu-sz:向设备发出的请求平均数量。如果这个数值大于1,可能是硬件设备已经饱和(部分前端硬件设备支持并行写入)。
%util:设备利用率。这个数值表示设备的繁忙程度,经验值是如果超过60,可能会影响IO性能(可以参照IO操作平均等待时间)。如果到达100%,说明硬件设备已经饱和。

如果显示的是逻辑设备的数据,那么设备利用率不代表后端实际的硬件设备已经饱和。值得注意的是,即使IO性能不理想,也不一定意味这应用程序性能会不好,可以利用诸如预读取、写缓存等策略提升应用性能。

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

free命令可以查看系统内存的使用情况,-m参数表示按照兆字节展示。最后两列分别表示用于IO缓存的内存数,和用于文件系统页缓存的内存数。需要注意的是,第二行-/+ buffers/cache,看上去缓存占用了大量内存空间。这是Linux系统的内存使用策略,尽可能的利用内存,如果应用程序需要内存,这部分内存会立即被回收并分配给应用程序。因此,这部分内存一般也被当成是可用内存。

如果可用内存非常少,系统可能会动用交换区(如果配置了的话),这样会增加IO开销(可以在iostat命令中提现),降低系统性能。

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   rx

cmp/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   docke

r0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00 ^C

sar命令在这里可以查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量,判断网络设备是否已经饱和。如示例输出中,eth0网卡设备,吞吐率大概在22 Mbytes/s,既176 Mbits/sec,没有达到1Gbit/sec的硬件上限。

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    o

seg/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.0

0   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

sar命令在这里用于查看TCP连接状态,其中包括:

active/s:每秒本地发起的TCP连接数,既通过connect调用创建的TCP连接;

passive/s:每秒远程发起的TCP连接数,即通过accept调用创建的TCP连接;

retrans/s:每秒TCP重传数量;

TCP连接数可以用来判断性能问题是否由于建立了过多的连接,进一步可以判断是主动发起的连接,还是被动接受的连接。TCP重传可能是因为网络环境恶劣,或者服务器压力过大导致丢包。

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, 2269807

3+free,    60448 buffers KiB Swap:        0 total,        0 used,        0 free.   5542

08 cached Mem   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMA

ND 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 2

0.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

/u256:0     8 root      20   0       0      0      0 S   0.0  0.0   2:38.05 rcu_sched

top命令包含了前面好几个命令的检查的内容。比如系统负载情况(uptime)、系统内存使用情况(free)、系统CPU使用情况(vmstat)等。因此通过这个命令,可以相对全面的查看系统负载的来源。同时,top命令支持排序,可以按照不同的列排序,方便查找出诸如内存占用最多的进程、CPU占用率最高的进程等。

但是,top命令相对于前面一些命令,输出是一个瞬间值,如果不持续盯着,可能会错过一些线索。这时可能需要暂停top命令刷新,来记录和比对数据。

总结

总之,在有限的时间内,只需进行简单的命令行操作,就可以轻松解决Linux系统的某些性能问题。通过这些简单的方法,你可以让你的系统更快速,响应更迅速,从而更好地满足你的需求。

위 내용은 60초 안에 Linux 시스템 성능 문제를 진단하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 lxlinux.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제