精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    11232

    瀏覽量

    208949
  • 服務器
    +關注

    關注

    12

    文章

    9029

    瀏覽量

    85205
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1351

    瀏覽量

    78995

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

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

收藏 人收藏

    評論

    相關推薦

    linux服務器和windows服務器

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

    linux服務器性能測試步驟

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

    Linux環境并發服務器設計技術研究

    講述并發服務器設計的主要技術,包括多進程服務器、多線程服務器和I/ O 復用服務器,同時對以上服務器技術的
    發表于 04-24 10:02 ?16次下載

    教你linux搭建web服務器

    教你linux搭建web服務器和大家分享了一份配置文檔,希望對您用linux搭建web服務器有所啟發。
    發表于 12-28 14:18 ?8848次閱讀

    基于Linux系統的FTP服務器的實現

    為了在Linux系統下實現安全、高效的FTP服務器,選擇了具有小巧輕快、安全易用等優點的服務器軟件vsftpd。通過對Linux平臺下FTP網絡服務
    發表于 07-24 15:36 ?39次下載

    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 ?1724次閱讀

    淺談Linux美國服務器常見操作系統

    使用和自由傳播的類Unix操作系統,它能運行主要的UNIX工具軟件、應用程序和網絡協議。由于Linux操作系統繼承了Unix以網絡為核心的設計思想,所以它是一個性能穩定的多用戶操作系統。 目前很多站長租用美國
    的頭像 發表于 09-30 14:48 ?2528次閱讀

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

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

    如何使用Checkmk監控Linux服務器

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

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

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

    影響linux服務器性能的因素

    一般互聯網的項目都是部署在linux服務器上的,如果linux服務器出了問題,那么咱們平時學習的高并發,穩定性之類的是沒有任何意義的,所以對linu
    的頭像 發表于 10-09 15:29 ?387次閱讀

    linux查看服務器配置

    如何使用Linux命令和工具來查看服務器配置,并提供一些附加的相關信息和技巧。 第一部分:概述服務器配置 為什么需要了解服務器配置
    的頭像 發表于 11-17 09:41 ?1084次閱讀

    Linux服務器性能查看方法

    Linux服務器性能查看是系統管理員和開發人員在日常工作中經常需要進行的任務,以確保系統穩定運行并優化資源使用。以下將詳細介紹多種Linux服務器
    的頭像 發表于 09-02 11:15 ?935次閱讀

    如何優化Linux服務器性能

    優化Linux服務器性能是一個綜合性的任務,涉及硬件、軟件、配置、監控等多個方面。以下是一個詳細的指南,旨在幫助系統管理員和運維人員提升Linux
    的頭像 發表于 09-29 16:50 ?254次閱讀