ホームページ > 記事 > システムチュートリアル > Linux システムのパフォーマンスの問題を 60 秒で診断します
Linux システムの動作が遅くなったり、異常にスタックしたりすることがよくありますか?その場合は、パフォーマンスをチェックして問題を見つけてシステム効率を向上させるのに 60 秒しかかからないため、あまり心配する必要はありません。
概要: 次のコマンドを実行すると、1 分以内にシステム リソースの使用状況を大まかに把握できます
リーリーこれらのコマンドの中には、sysstat パッケージをインストールする必要があるものと、procps パッケージによって提供されるものがあります。これらのコマンドの出力は、パフォーマンスのボトルネックを迅速に特定し、すべてのリソース (CPU、メモリ、ディスク IO など) の使用率、飽和度、エラー メトリックを確認するのに役立ちます。これはいわゆる USE メソッドです。
これらのコマンドを 1 つずつ紹介します。これらのコマンドの詳細なパラメーターと手順については、コマンド マニュアルを参照してください。
稼働時間
リーリーこのコマンドはマシンの負荷状況を素早く確認できます。 Linux システムでは、これらのデータは、CPU リソースを待機しており、無中断 IO プロセスでブロックされているプロセス (プロセス ステータスは D) の数を表します。このデータにより、システム リソースの使用状況をマクロに理解できます。
コマンドの出力は、それぞれ 1 分、5 分、15 分の平均負荷状態を示します。これら 3 つのデータを通じて、そのエリアのサーバー負荷が逼迫しているか緩和しているかを把握できます。 1 分間の平均負荷が非常に高く、15 分間の平均負荷が非常に低い場合は、サーバーが高い負荷を指令していることを意味するため、CPU リソースがどこで消費されているかをさらに調査する必要があります。一方、15 分間の負荷平均が高く、1 分間の負荷平均が低い場合は、CPU リソースが逼迫する時期が過ぎている可能性があります。
上記の例の出力は、最後の 1 分間の平均負荷が非常に高く、過去 15 分間の負荷よりもはるかに高いことを示しています。したがって、現在のシステムのどのプロセスが多くの負荷を消費しているかを引き続き調査する必要があります。リソースの。 vmstat、mpstat、および以下で紹介するその他のコマンドを使用して、さらに調査することができます。
dmesg丨tail
リーリーこのコマンドは、システム ログの最後の 10 行を出力します。この例の出力では、カーネル oom kill と TCP パケット損失が確認できます。これらのログは、パフォーマンスの問題のトラブルシューティングに役立ちます。このステップを忘れないでください。
vmstat 1
リーリーvmstat(8) コマンドを実行すると、各行にいくつかのコア システム インジケーターが出力され、システムのステータスをより詳細に理解できるようになります。次のパラメータ 1 は、統計情報が 1 秒に 1 回出力されることを示します。ヘッダーは各列の意味を示します。これらの列には、パフォーマンス チューニングに関連するいくつかの列が紹介されています:
r: CPU リソースを待機しているプロセスの数。このデータは平均負荷よりも CPU 負荷を反映していますが、IO を待機しているプロセスは含まれていません。この値がマシンの CPU コアの数より大きい場合、マシンの CPU リソースは飽和状態になります。
free: システムで利用可能なメモリの量 (キロバイト単位) 残りのメモリが不十分な場合は、システムのパフォーマンスの問題も発生します。以下に紹介する無料コマンドを使用すると、システム メモリの使用状況をより詳細に把握できます。
si, so: スワップ領域の書き込みおよび読み取りの数。このデータが 0 でない場合は、システムがすでにスワップ領域 (スワップ) を使用しており、マシンの物理メモリが不足していることを意味します。
us、sy、id、wa、st: これらはすべて CPU 時間の消費量を表し、それぞれユーザー時間 (user)、システム (カーネル) 時間 (sys)、アイドル時間 (idle)、および IO 待機時間を表します。 (待機) および盗まれた時間 (盗まれ、通常は他の仮想マシンによって消費されます)。
上記の CPU 時間により、CPU がビジーかどうかをすぐに理解できます。一般に、ユーザー時間とシステム時間の合計が非常に大きい場合、CPU は命令の実行でビジーになります。 IO 待ち時間が長い場合、システムのボトルネックはディスク IO である可能性があります。
サンプル コマンドの出力からわかるように、ユーザー モードでは大量の CPU 時間が消費されます。つまり、ユーザー アプリケーションが CPU 時間を消費します。これは必ずしもパフォーマンスの問題ではないため、r キューと一緒に分析する必要があります。
mpstat-P オール 1
リーリーこのコマンドは、各 CPU の使用率を表示できます。CPU 使用率が特に高い場合は、シングル スレッド アプリケーションが原因である可能性があります。
pidstat 1
リーリーpidstat コマンドは、プロセスの CPU 使用率を出力します。このコマンドは出力を継続し、以前のデータを上書きしないため、システムのダイナミクスを簡単に観察できます。上記の出力から、2 つの 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系统的某些性能问题。通过这些简单的方法,你可以让你的系统更快速,响应更迅速,从而更好地满足你的需求。
以上がLinux システムのパフォーマンスの問題を 60 秒で診断しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。