<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

排查Linux服務器性能問題工具

lhl545545 ? 來源:InfoQ ? 作者:InfoQ ? 2022-09-16 09:16 ? 次閱讀

如果你的Linux服務器突然負載暴增,告警短信快發爆你的手機,如何在最短時間內找出Linux性能問題所在?來看Netflix性能工程團隊的這篇博文,看它們通過十條命令在一分鐘內對機器性能問題進行診斷。

概述

通過執行以下命令,可以在1分鐘內對系統資源使用情況有個大致的了解。

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

其中一些命令需要安裝sysstat包,有一些由procps包提供。這些命令的輸出,有助于快速定位性能瓶頸,檢查出所有資源(CPU、內存、磁盤IO等)的利用率(utilization)、飽和度(saturation)和錯誤(error)度量,也就是所謂的USE方法。 下面我們來逐一介紹下這些命令,有關這些命令更多的參數和說明,請參照命令的手冊。

uptime


$uptime 2326up21:31,1user,loadaverage:30.02,26.43,19.02  這個命令可以快速查看機器的負載情況。在Linux系統中,這些數據表示等待CPU資源的進程和阻塞在不可中斷IO進程(進程狀態為D)的數量。這些數據可以讓我們對系統資源使用有一個宏觀的了解。  命令的輸出分別表示1分鐘、5分鐘、15分鐘的平均負載情況。通過這三個數據,可以了解服務器負載是在趨于緊張還是區域緩解。如果1分鐘平均負載很高,而15分鐘平均負載很低,說明服務器正在命令高負載情況,需要進一步排查CPU資源都消耗在了哪里。反之,如果15分鐘平均負載很高,1分鐘平均負載較低,則有可能是CPU資源緊張時刻已經過去。  上面例子中的輸出,可以看見最近1分鐘的平均負載非常高,且遠高于最近15分鐘負載,因此我們需要繼續排查當前系統中有什么進程消耗了大量的資源??梢酝ㄟ^下文將會介紹的vmstat、mpstat等命令進一步排查。

dmesg丨tail


$dmesg|tail [1880957.563150]perlinvokedoom-killer:gfp_mask=0x280da,order=0,oom_score_adj=0 [...] [1880957.563400]Outofmemory:Killprocess18694(perl)score246orsacrificechild [1880957.563408]Killedprocess18694(perl)total-vm:1972392kB,anon-rss:1953348kB,file-rss:0kB [2320864.954447]TCP:PossibleSYNfloodingonport7001.Droppingrequest.CheckSNMPcounters. 該命令會輸出系統日志的最后10行。示例中的輸出,可以看見一次內核的oom kill和一次TCP丟包。這些日志可以幫助排查性能問題。千萬不要忘了這一步。

vmstat 1


$vmstat1 procs---------memory-------------swap-------io-----system--------cpu----- rbswpdfreebuffcachesisobiboincsussyidwast 3400200889792737085918280005610961300 320020088992073708591860000592132844282981100 320020089011273708591860000095012154991000 32002008895687371259185600048119002459990000 3200200890208737125918600000158984840981100  vmstat(8) 命令,每行會輸出一些系統核心指標,這些指標可以讓我們更詳細的了解系統狀態。后面跟的參數1,表示每秒輸出一次統計信息,表頭提示了每一列的含義,這幾介紹一些和性能調優相關的列:

r:等待在CPU資源的進程數。這個數據比平均負載更加能夠體現CPU負載情況,數據中不包含等待IO的進程。如果這個數值大于機器CPU核數,那么機器的CPU資源已經飽和。

free:系統可用內存數(以千字節為單位),如果剩余內存不足,也會導致系統性能問題。下文介紹到的free命令,可以更詳細的了解系統內存的使用情況。

si, so:交換區寫入和讀取的數量。如果這個數據不為0,說明系統已經在使用交換區(swap),機器物理內存已經不足。

us, sy, id, wa, st:這些都代表了CPU時間的消耗,它們分別表示用戶時間(user)、系統(內核)時間(sys)、空閑時間(idle)、IO等待時間(wait)和被偷走的時間(stolen,一般被其他虛擬機消耗)。

上述這些CPU時間,可以讓我們很快了解CPU是否出于繁忙狀態。一般情況下,如果用戶時間和系統時間相加非常大,CPU出于忙于執行指令。如果IO等待時間很長,那么系統的瓶頸可能在磁盤IO。 示例命令的輸出可以看見,大量CPU時間消耗在用戶態,也就是用戶應用程序消耗了CPU時間。這不一定是性能問題,需要結合r隊列,一起分析。

mpstat-P ALL 1


$mpstat-PALL1 Linux3.13.0-49-generic(titanclusters-xxxxx)07/14/2015_x86_64_(32CPU) 0749PMCPU%usr%nice%sys%iowait%irq%soft%steal%guest%gnice%idle 0750PMall98.470.000.750.000.000.000.000.000.000.78 0750PM096.040.002.970.000.000.000.000.000.000.99 0750PM197.000.001.000.000.000.000.000.000.002.00 0750PM298.000.001.000.000.000.000.000.000.001.00 0750PM396.970.000.000.000.000.000.000.000.003.03 [...] 該命令可以顯示每個CPU的占用情況,如果有一個CPU占用率特別高,那么有可能是一個單線程應用程序引起的。

pidstat 1


$pidstat1 Linux3.13.0-49-generic(titanclusters-xxxxx)07/14/2015_x86_64_(32CPU) 0702PMUIDPID%usr%system%guest%CPUCPUCommand 0703PM090.000.940.000.941rcuos/0 0703PM042145.665.660.0011.3215mesos-slave 0703PM043540.940.940.001.898java 0703PM065211596.231.890.001598.1127java 0703PM065641571.707.550.001579.2528java 0703PM60004601540.944.720.005.669pidstat 0703PMUIDPID%usr%system%guest%CPUCPUCommand 0704PM042146.002.000.008.0015mesos-slave 0704PM065211590.001.000.001591.0027java0704PM065641573.0010.000.001583.0028java 0704PM10867181.000.000.001.000snmp-pass 0704PM60004601541.004.000.005.009pidstat  pidstat命令輸出進程的CPU占用率,該命令會持續輸出,并且不會覆蓋之前的數據,可以方便觀察系統動態。如上的輸出,可以看見兩個JAVA進程占用了將近1600%的CPU時間,既消耗了大約16個CPU核心的運算資源。

iostat-xz 1


$iostat-xz1 Linux3.13.0-49-generic(titanclusters-xxxxx)07/14/2015_x86_64_(32CPU) avg-cpu:%user%nice%system%iowait%steal%idle 73.960.003.730.030.0622.21 Device:rrqm/swrqm/sr/sw/srkB/swkB/savgrq-szavgqu-szawaitr_awaitw_awaitsvctm%util xvda0.000.230.210.184.522.0834.370.009.9813.805.422.440.09 xvdb0.010.001.028.94127.97598.53145.790.000.431.780.280.250.25 xvdc0.010.001.028.86127.79595.94146.500.000.451.820.300.270.26 dm-00.000.000.692.3210.4731.6928.010.013.230.713.980.130.04 dm-10.000.000.000.940.013.788.000.33345.840.04346.810.010.00 dm-20.000.000.090.071.350.3622.500.002.550.235.621.780.03 [...]  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 totalusedfreesharedbufferscached Mem:245998245452214538359541 -/+buffers/cache:23944222053 Swap:000  free命令可以查看系統內存的使用情況,-m參數表示按照兆字節展示。最后兩列分別表示用于IO緩存的內存數,和用于文件系統頁緩存的內存數。需要注意的是,第二行-/+ buffers/cache,看上去緩存占用了大量內存空間。這是Linux系統的內存使用策略,盡可能的利用內存,如果應用程序需要內存,這部分內存會立即被回收并分配給應用程序。因此,這部分內存一般也被當成是可用內存。  如果可用內存非常少,系統可能會動用交換區(如果配置了的話),這樣會增加IO開銷(可以在iostat命令中提現),降低系統性能。

sar -n DEV 1


$sar-nDEV1 Linux3.13.0-49-generic(titanclusters-xxxxx)07/14/2015_x86_64_(32CPU) 1248AMIFACErxpck/stxpck/srxkB/stxkB/srxcmp/stxcmp/srxmcst/s%ifutil 1249AMeth018763.005032.0020686.42478.300.000.000.000.00 1249AMlo14.0014.001.361.360.000.000.000.00 1249AMdocker00.000.000.000.000.000.000.000.00 1249AMIFACErxpck/stxpck/srxkB/stxkB/srxcmp/stxcmp/srxmcst/s%ifutil 1250AMeth019763.005101.0021999.10482.560.000.000.000.00 1250AMlo20.0020.003.253.250.000.000.000.00 1250AMdocker00.000.000.000.000.000.000.000.00  sar命令在這里可以查看網絡設備的吞吐率。在排查性能問題時,可以通過網絡設備的吞吐量,判斷網絡設備是否已經飽和。如示例輸出中,eth0網卡設備,吞吐率大概在22 Mbytes/s,既176 Mbits/sec,沒有達到1Gbit/sec的硬件上限。

sar -n TCP,ETCP 1


$sar-nTCP,ETCP1 Linux3.13.0-49-generic(titanclusters-xxxxx)07/14/2015_x86_64_(32CPU) 1219AMactive/spassive/siseg/soseg/s 1220AM1.000.0010233.0018846.00 1219AMatmptf/sestres/sretrans/sisegerr/sorsts/s 1220AM0.000.000.000.000.00 1220AMactive/spassive/siseg/soseg/s 1221AM1.000.008359.006039.00 1220AMatmptf/sestres/sretrans/sisegerr/sorsts/s 1221AM0.000.000.000.000.00  sar命令在這里用于查看TCP連接狀態,其中包括:

active/s:每秒本地發起的TCP連接數,既通過connect調用創建的TCP連接;

passive/s:每秒遠程發起的TCP連接數,即通過accept調用創建的TCP連接;

retrans/s:每秒TCP重傳數量;

TCP連接數可以用來判斷性能問題是否由于建立了過多的連接,進一步可以判斷是主動發起的連接,還是被動接受的連接。TCP重傳可能是因為網絡環境惡劣,或者服務器壓力過大導致丟包。

top


$top top-0040up21:56,1user,loadaverage:31.09,29.87,29.92 Tasks:871total,1running,868sleeping,0stopped,2zombie %Cpu(s):96.8us,0.4sy,0.0ni,2.7id,0.1wa,0.0hi,0.0si,0.0st KiBMem:25190241+total,24921688used,22698073+free,60448buffers KiBSwap:0total,0used,0free.554208cachedMem PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND 20248root2000.227t0.012t18748S30905.229812:58java 4213root20027225446464044232S23.50.0233:35.37mesos-slave 66128titancl+2002434423321172R1.00.00:00.07top 5235root20038.227g54700449996S0.70.22:02.74java 4299root20020.015g2.682g16836S0.31.133:14.42java1root2003362029201496S0.00.00:03.82init 2root200000S0.00.00:00.02kthreadd 3root200000S0.00.00:05.35ksoftirqd/0 5root0-20000S0.00.00:00.00kworker/0:0H 6root200000S0.00.00:06.94kworker/u256:0 8root200000S0.00.02:38.05rcu_sched  top命令包含了前面好幾個命令的檢查的內容。比如系統負載情況(uptime)、系統內存使用情況(free)、系統CPU使用情況(vmstat)等。因此通過這個命令,可以相對全面的查看系統負載的來源。同時,top命令支持排序,可以按照不同的列排序,方便查找出諸如內存占用最多的進程、CPU占用率最高的進程等。  但是,top命令相對于前面一些命令,輸出是一個瞬間值,如果不持續盯著,可能會錯過一些線索。這時可能需要暫停top命令刷新,來記錄和比對數據。 

總 結

排查Linux服務器性能問題還有很多工具,上面介紹的一些命令,可以幫助我們快速的定位問題。例如前面的示例輸出,多個證據證明有JAVA進程占用了大量CPU資源,之后的性能調優就可以針對應用程序進行。

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11004

    瀏覽量

    206861
  • 服務器
    +關注

    關注

    12

    文章

    8184

    瀏覽量

    82735
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1276

    瀏覽量

    78363

原文標題:抓住 Linux 黃金 60 秒

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    linux服務器和windows服務器

    較為熟悉,需要高性能和穩定性,并且希望能夠進行自定義配置和更好的安全性,那 么Linux服務器是一個不錯的選擇。 而如果你對服務器操作系統不太熟悉,需要廣泛的應用支持和易用的管理
    發表于 02-22 15:46

    手機也能玩Linux服務器——NOKIA手機高端應用

    行管理和操作呢?今天給大家介紹一個軟件,可以用手機連接遠程的Linux服務器。SecureCRT和PUTTY,對于從事網絡和系統管理工作的人士來說是再熟悉不過的。通過這兩個工具遠程連接到Lin
    發表于 11-28 14:05

    Linux和Windows下的登錄和使用Linux服務器的方式

    關于登錄Linux服務器的方式有很多種,本文重點介紹了Linux和Windows下的登錄和使用Linux服務器的方式。
    發表于 07-05 07:54

    Linux系統上搭建 Web 服務器

    Linux,主要有 desktop(桌面)版本和 service(服務器)版本,配置服務器最好用 service 版。所需工具及軟件SSHSecureShellClient3.2.9:
    發表于 07-09 07:56

    window的linux服務器連接

    為了控制服務器權限以及登錄Windows服務器操作方式限制,運維這邊重新搭建了一套Linux跳板機V1.0,只針對SSH連接Linux機器,目前兩種權限(維護組與開發組);
    發表于 07-25 06:37

    linux服務器性能測試步驟

    linux服務器性能測試-服務器實時【磁盤】監控
    發表于 06-02 06:54

    關于使用終端工具遠程登錄連接Linux服務器失敗或者登錄成功后自動斷開的解決辦法

    關于使用終端工具遠程登錄連接Linux服務器失敗或者登錄成功后自動斷開問題
    發表于 06-09 17:25

    怎樣備份服務器服務器性能最佳

     天有不測風云,無論在什么時候,對數據有一個備份還是十分有必要的。尤其是對于服務器的備份,它關系到所有網站的正常運行,整體數據較多,涉及的面也比較廣,尤其是大型企業,對高性能服務器要求非常高。那么
    發表于 07-06 15:55

    什么是Boa服務器

    嵌入式web服務器Boa的移植什么是Boa服務器BOA 服務器是一個小巧高效的web服務器,是一個運行于unix或linux下的,支持CGI
    發表于 12-14 07:21

    Linux服務器性能測試及分析命令大全

    Linux服務器性能測試及分析命令大全
    發表于 09-05 15:42 ?12次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>服務器</b><b class='flag-5'>性能</b>測試及分析命令大全

    Linux服務器排障相關的性能問題、優化和便利工具

    Linux排障技巧在數據中心十分受人重視。數據中心專家對此提供了一些Linux服務器排障相關的性能問題、優化和便利工具參考。
    的頭像 發表于 09-03 10:29 ?1558次閱讀

    提高Linux服務器性能的20個技巧

     Linux功能豐富、強大、靈活,你可以用它完成各種任務,在這篇文章中,我們將討論一些提高Linux服務器性能的技巧。
    的頭像 發表于 03-11 10:14 ?1074次閱讀

    如何使用Checkmk監控Linux服務器?

    `Checkmk` 是用于監控 Linux 服務器的最常用和用戶友好的應用程序之一。它可以檢查與您的 Linux 服務器連接的服務器狀態、負
    的頭像 發表于 02-17 10:46 ?806次閱讀
    如何使用Checkmk監控<b class='flag-5'>Linux</b><b class='flag-5'>服務器</b>?

    Linux服務器常見的網絡故障排查方法

    日常工作中我們有時會遇到服務器網絡不通問題,導致服務器無法正常運行。要想解決服務器網絡故障問題,通常要先進行網絡故障排查,這里以Linux
    的頭像 發表于 04-14 15:47 ?2312次閱讀

    影響linux服務器性能的因素

    一般互聯網的項目都是部署在linux服務器上的,如果linux服務器出了問題,那么咱們平時學習的高并發,穩定性之類的是沒有任何意義的,所以對linu
    的頭像 發表于 10-09 15:29 ?228次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>