Heim  >  Artikel  >  System-Tutorial  >  Diagnostizieren Sie Leistungsprobleme Ihres Linux-Systems in 60 Sekunden

Diagnostizieren Sie Leistungsprobleme Ihres Linux-Systems in 60 Sekunden

王林
王林nach vorne
2024-02-12 23:36:161118Durchsuche

Stellen Sie oft fest, dass Ihr Linux-System langsam läuft oder ungewöhnlich blockiert? Wenn ja, müssen Sie sich keine allzu großen Sorgen machen, denn es dauert nur 60 Sekunden, die Leistung zu überprüfen, einige Probleme zu finden und die Systemeffizienz zu verbessern.

Diagnostizieren Sie Leistungsprobleme Ihres Linux-Systems in 60 Sekunden

Übersicht: Durch Ausführen des folgenden Befehls erhalten Sie in 1 Minute einen allgemeinen Überblick über die Systemressourcennutzung

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

Einige dieser Befehle erfordern die Installation des sysstat-Pakets, andere werden vom procps-Paket bereitgestellt. Die Ausgabe dieser Befehle hilft dabei, Leistungsengpässe schnell zu lokalisieren und die Auslastung, Sättigung und Fehlermetriken aller Ressourcen (CPU, Speicher, Festplatten-IO usw.) zu überprüfen, was die sogenannte USE-Methode darstellt.

Lassen Sie uns diese Befehle einzeln vorstellen. Weitere Parameter und Anweisungen zu diesen Befehlen finden Sie im Befehlshandbuch.

Verfügbarkeit

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

Mit diesem Befehl kann der Ladestatus der Maschine schnell überprüft werden. In Linux-Systemen stellen diese Daten die Anzahl der Prozesse dar, die auf CPU-Ressourcen warten und in unterbrechungsfreien E/A-Prozessen blockiert sind (Prozessstatus ist D). Diese Daten können uns ein makroökonomisches Verständnis der Systemressourcennutzung vermitteln.

Die Ausgabe des

Befehls gibt die durchschnittlichen Lastbedingungen für 1 Minute, 5 Minuten bzw. 15 Minuten an. Anhand dieser drei Daten können Sie erkennen, ob die Serverlast in der Region knapper wird oder nachlässt. Wenn die durchschnittliche 1-Minuten-Auslastung sehr hoch und die 15-minütige durchschnittliche Auslastung sehr niedrig ist, bedeutet dies, dass der Server eine hohe Auslastung aufweist und Sie weiter untersuchen müssen, wo die CPU-Ressourcen verbraucht werden. Wenn andererseits der 15-Minuten-Auslastungsdurchschnitt hoch und der 1-Minuten-Auslastungsdurchschnitt niedrig ist, ist es möglich, dass die Zeit, in der die CPU-Ressourcen knapp sind, vorbei ist.

Die Ausgabe im obigen Beispiel zeigt, dass die durchschnittliche Last in der letzten Minute sehr hoch und viel höher ist als die Last in den letzten 15 Minuten. Daher müssen wir weiterhin untersuchen, welche Prozesse im aktuellen System viele Ressourcen verbrauchen . Sie können mit den unten vorgestellten Befehlen vmstat, mpstat und anderen Befehlen eine weitere Fehlerbehebung durchführen.

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.

Dieser Befehl gibt die letzten 10 Zeilen des Systemprotokolls aus. In der Ausgabe des Beispiels können Sie einen Kernel-Oom-Kill und einen TCP-Paketverlust sehen. Diese Protokolle können bei der Behebung von Leistungsproblemen helfen. Vergessen Sie diesen Schritt nicht.

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 ^C

vmstat(8)-Befehl, jede Zeile gibt einige Kernsystemindikatoren aus, die es uns ermöglichen, den Systemstatus detaillierter zu verstehen. Der folgende Parameter 1 gibt an, dass statistische Informationen einmal pro Sekunde ausgegeben werden. Die Kopfzeile gibt die Bedeutung jeder Spalte an. Diese Spalten stellen einige Spalten vor, die sich auf die Leistungsoptimierung beziehen

r: Anzahl der Prozesse, die auf CPU-Ressourcen warten. Diese Daten spiegeln die CPU-Auslastung besser wider als die durchschnittliche Auslastung. Die Daten umfassen keine Prozesse, die auf E/A warten. Wenn dieser Wert größer ist als die Anzahl der CPU-Kerne der Maschine, sind die CPU-Ressourcen der Maschine ausgelastet.

frei: Die Menge des verfügbaren Systemspeichers (in Kilobyte). Wenn der verbleibende Speicher nicht ausreicht, führt dies ebenfalls zu Systemleistungsproblemen. Der unten vorgestellte kostenlose Befehl kann ein detaillierteres Verständnis der Systemspeichernutzung liefern.

si, also: Die Anzahl der Schreib- und Lesevorgänge im Swap-Bereich. Wenn diese Daten nicht 0 sind, bedeutet dies, dass das System bereits den Auslagerungsbereich (Swap) verwendet und der physische Speicher der Maschine nicht ausreicht.

us, sy, id, wa, st: Diese repräsentieren jeweils den Verbrauch an CPU-Zeit. Sie repräsentieren Benutzerzeit (user), Systemzeit (Kernel) (sys), Leerlaufzeit (idle) und IO-Wartezeit (wait). ). und gestohlene Zeit (gestohlen, normalerweise von anderen virtuellen Maschinen verbraucht).

Anhand der oben genannten CPU-Zeiten können wir schnell erkennen, ob die CPU ausgelastet ist. Wenn die Summe aus Benutzerzeit und Systemzeit sehr groß ist, ist die CPU im Allgemeinen damit beschäftigt, Anweisungen auszuführen. Wenn die E/A-Wartezeit lang ist, liegt der Engpass des Systems möglicherweise in der Festplatten-E/A.

Anhand der Ausgabe des Beispielbefehls können Sie erkennen, dass im Benutzermodus viel CPU-Zeit verbraucht wird, d. h. Benutzeranwendungen verbrauchen CPU-Zeit. Dies ist nicht unbedingt ein Leistungsproblem und muss zusammen mit der R-Warteschlange analysiert werden.

mpstat-P ALLE 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 [...]

Dieser Befehl kann die Auslastung jeder CPU anzeigen. Wenn eine CPU-Auslastung besonders hoch ist, kann sie durch eine Single-Threaded-Anwendung verursacht werden.

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  java07: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

Der Befehl pidstat gibt die CPU-Auslastung des Prozesses aus. Dieser Befehl führt die Ausgabe fort und überschreibt keine vorherigen Daten, wodurch die Systemdynamik einfacher beobachtet werden kann. Aus der obigen Ausgabe können Sie ersehen, dass die beiden JAVA-Prozesse fast 1600 % der CPU-Zeit beanspruchen und etwa 16 CPU-Kern-Rechenressourcen verbrauchen.

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

1     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

Der Befehl iostat wird hauptsächlich zum Überprüfen des E/A-Status der Maschinenfestplatte verwendet. Die Hauptbedeutung der von diesem Befehl ausgegebenen Spalten ist:

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系统的某些性能问题。通过这些简单的方法,你可以让你的系统更快速,响应更迅速,从而更好地满足你的需求。

Das obige ist der detaillierte Inhalt vonDiagnostizieren Sie Leistungsprobleme Ihres Linux-Systems in 60 Sekunden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:lxlinux.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen