Rumah  >  Artikel  >  Tutorial sistem  >  Diagnosis masalah prestasi sistem Linux anda dalam masa 60 saat

Diagnosis masalah prestasi sistem Linux anda dalam masa 60 saat

王林
王林ke hadapan
2024-02-12 23:36:161118semak imbas

Adakah anda sering mendapati sistem Linux anda berjalan perlahan atau tersekat secara tidak normal? Jika ya, anda tidak perlu terlalu risau, kerana hanya mengambil masa 60 saat untuk menyemak prestasi untuk mencari beberapa masalah dan meningkatkan kecekapan sistem.

Diagnosis masalah prestasi sistem Linux anda dalam masa 60 saat

Ikhtisar: Dengan melaksanakan arahan berikut, anda boleh mempunyai pemahaman umum tentang penggunaan sumber sistem dalam masa 1 minit

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

Sesetengah daripada arahan ini memerlukan pakej sysstat dipasang dan sebahagian lagi disediakan oleh pakej procps. Output arahan ini membantu mengesan kesesakan prestasi dengan cepat dan menyemak metrik penggunaan, ketepuan dan ralat semua sumber (CPU, memori, cakera IO, dll.), yang merupakan kaedah USE yang dipanggil.

Mari perkenalkan arahan ini satu demi satu Untuk lebih banyak parameter dan arahan tentang arahan ini, sila rujuk manual arahan.

masa hidup

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

Arahan ini boleh menyemak status beban mesin dengan cepat. Dalam sistem Linux, data ini mewakili bilangan proses yang menunggu sumber CPU dan disekat dalam proses IO yang tidak terganggu (status proses ialah D). Data ini boleh memberi kita pemahaman peringkat tinggi tentang penggunaan sumber sistem.

Output arahan

menunjukkan keadaan beban purata untuk 1 minit, 5 minit dan 15 minit masing-masing. Melalui ketiga-tiga data ini, anda boleh memahami sama ada beban pelayan semakin ketat atau berkurangan di kawasan tersebut. Jika beban purata 1 minit adalah sangat tinggi dan beban purata 15 minit adalah sangat rendah, ini bermakna pelayan menjalankan beban yang tinggi dan anda perlu menyiasat lebih lanjut di mana sumber CPU sedang digunakan. Sebaliknya, jika purata beban 15 minit adalah tinggi dan purata beban 1 minit adalah rendah, ada kemungkinan masa apabila sumber CPU padat telah berlalu.

Keluaran dalam contoh di atas menunjukkan bahawa beban purata pada minit terakhir adalah sangat tinggi dan jauh lebih tinggi daripada beban dalam 15 minit terakhir Oleh itu, kita perlu terus menyiasat proses mana dalam sistem semasa menggunakan banyak sumber . Anda boleh menyiasat lebih lanjut dengan menggunakan vmstat, mpstat dan arahan lain yang akan diperkenalkan di bawah.

dmesg丨ekor

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

Arahan ini akan mengeluarkan 10 baris terakhir log sistem. Dalam output dalam contoh, anda boleh melihat pembunuh kernel oom dan kehilangan paket TCP. Log ini boleh membantu menyelesaikan masalah prestasi. Jangan lupa langkah ini.

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
Perintah

vmstat(8), setiap baris akan mengeluarkan beberapa penunjuk sistem teras, yang membolehkan kami memahami status sistem dengan lebih terperinci. Parameter 1 berikut menunjukkan bahawa maklumat statistik dikeluarkan sekali sesaat Pengepala menunjukkan maksud setiap lajur ini memperkenalkan beberapa lajur yang berkaitan dengan penalaan prestasi:

r: Bilangan proses menunggu sumber CPU. Data ini mencerminkan beban CPU lebih baik daripada beban purata Data tidak termasuk proses menunggu IO. Jika nilai ini lebih besar daripada bilangan teras CPU mesin, maka sumber CPU mesin adalah tepu.

percuma: Jumlah memori sistem yang tersedia (dalam kilobait Jika baki memori tidak mencukupi, ia juga akan menyebabkan masalah prestasi sistem). Perintah percuma yang diperkenalkan di bawah boleh memberikan pemahaman yang lebih terperinci tentang penggunaan memori sistem.

si, jadi: Bilangan tulis dan baca dalam kawasan swap. Jika data ini bukan 0, ini bermakna sistem sudah menggunakan kawasan swap (swap) dan memori fizikal mesin tidak mencukupi.

us, sy, id, wa, st: Ini semua mewakili penggunaan masa CPU masing-masing mewakili masa pengguna (pengguna), masa sistem (kernel) (sys), masa melahu (melahu) dan masa menunggu IO (tunggu. ). dan masa yang dicuri (dicuri, biasanya digunakan oleh mesin maya lain).

Masa CPU di atas membolehkan kita memahami dengan cepat sama ada CPU sibuk. Secara amnya, jika jumlah masa pengguna dan masa sistem adalah sangat besar, CPU sedang sibuk melaksanakan arahan. Jika masa menunggu IO adalah panjang, kesesakan sistem mungkin IO cakera.

Anda boleh melihat daripada output arahan sampel bahawa banyak masa CPU digunakan dalam mod pengguna, iaitu, aplikasi pengguna menggunakan masa CPU. Ini tidak semestinya isu prestasi dan perlu dianalisis bersama dengan baris gilir r.

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

Arahan ini boleh memaparkan penggunaan setiap CPU Jika penggunaan CPU sangat tinggi, ia mungkin disebabkan oleh aplikasi satu benang.

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

Arahan pidstat mengeluarkan penggunaan CPU bagi proses ini. Arahan ini akan terus menghasilkan dan tidak akan menimpa data sebelumnya, menjadikannya mudah untuk memerhatikan dinamik sistem. Daripada output di atas, anda dapat melihat bahawa kedua-dua proses JAVA menduduki hampir 1600% masa CPU, menggunakan lebih kurang 16 sumber pengkomputeran teras CPU.

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

Arahan iostat digunakan terutamanya untuk menyemak status IO cakera mesin. Maksud utama lajur yang dikeluarkan oleh arahan ini ialah:

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

Atas ialah kandungan terperinci Diagnosis masalah prestasi sistem Linux anda dalam masa 60 saat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:lxlinux.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam