日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

美女面试官问我:能说几个常见的Linux性能调优命令吗?

發(fā)布時間:2024/3/26 linux 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 美女面试官问我:能说几个常见的Linux性能调优命令吗? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

案例關(guān)注“Java后端技術(shù)全棧”

回復“000”獲取大量電子書

本文主要內(nèi)容:

簡單回答:

top、iostat、pidstat、ps、vmstat、netstat、sar等。

能細說一下嗎?下面就來好好聊聊這幾這個命令。

top命令

top命令是Linux下常用的性能分享工具,能夠?qū)崟r顯示系統(tǒng)中各個進程的資源占用狀況信息。使用top命令輸出:

輸出信息可以分為兩部分:

  • 系統(tǒng)統(tǒng)計信息

  • 進程信息

head部分

第一行

  • “11:16:53”為系統(tǒng)當前時刻;

  • “728 days, ?1:28”為系統(tǒng)啟動后到現(xiàn)在的運作時間;

  • “2 user”為當前登錄到系統(tǒng)的用戶,更確切的說是登錄到用戶的終端數(shù) , 同一個用戶同一時間對系統(tǒng)多個終端的連接將被視為多個用戶連接到系統(tǒng),這里的用戶數(shù)也將表現(xiàn)為終端的數(shù)目;

  • “l(fā)oad average”為當前系統(tǒng)負載的平均值,后面的三個值分別為1分鐘前、5分鐘前、15分鐘前進程的平均數(shù),一般的可以認為這個數(shù)值超過 CPU 數(shù)目時,CPU 將比較吃力的負載當前系統(tǒng)所包含的進程;

第二行

  • “78 total”為當前系統(tǒng)進程總數(shù);

  • “1 running”為當前運行中的進程數(shù);

  • “77 sleeping”為當前處于等待狀態(tài)中的進程數(shù);

  • “0 stoped”為被停止的系統(tǒng)進程數(shù);

  • “0 zombie”為被復原的進程數(shù);

第三行

  • 分別表示了 CPU 當前的使用率;

第四行

  • 分別表示了內(nèi)存總量、當前使用量、空閑內(nèi)存量、以及緩沖使用中的內(nèi)存量;

第五行

表示類別同第四行(Mem),但此處反映著交換分區(qū)(Swap)的使用情況。通常,交換分區(qū)(Swap)被頻繁使用的情況,將被視作物理內(nèi)存不足而造成的。

body部分

參數(shù)說明

在top命令下,按下f鍵。可以進行列的選擇,使用o鍵可以更改列的顯示順序。

另外一些常見快捷鍵:

上下箭頭:上下滾動查看進程;

  • u:顯示指定用戶的進程;

  • P:按照進程使用的CPU時間百分比排序;

  • M:按照進程使用的內(nèi)存百分比排序;

  • T:按照進程已連續(xù)運行時間排序;

注意:使用top命令可以從宏觀上觀察系統(tǒng)各個進程對CPU的占用情況以及內(nèi)存使用情況。

使用方式

top [-][d] [p][q] [c][C] [S][s] [n]

參數(shù)說明:
  • d:指定每兩次屏幕信息刷新之間的時間間隔。當然用戶可以使用s交互命令來改變之。

  • p:通過指定監(jiān)控進程ID來僅僅監(jiān)控某個進程的狀態(tài)。

  • q:該選項將使top沒有任何延遲的進行刷新。如果調(diào)用程序有超級用戶權(quán)限,那么top將以盡可能高的優(yōu)先級運行。

  • S:指定累計模式。

  • s:使top命令在安全模式中運行。這將去除交互命令所帶來的潛在危險。

  • i:使top不顯示任何閑置或者僵死進程。

  • c:顯示整個命令行而不只是顯示命令名

sar命令

sar命令也是Linux系統(tǒng)中重要的性能監(jiān)測工具之一,特可以周期性地對內(nèi)存和CPU進行采樣。

下面使用sar命令統(tǒng)計CPU使用情況,每秒鐘采樣一次,采樣五次。

使用方式

sar [options] []

interval和count分別表示采樣周期和采樣數(shù)量。

options:可以指定sar命令對哪些性能數(shù)據(jù)進行采樣,可能每個系統(tǒng)版本會導致其options不一樣,所以建議先試用

sar -h

查看具體參數(shù):

監(jiān)測內(nèi)存使用

我們來做一個內(nèi)存使用進行采樣:每秒一次,采樣五次。

監(jiān)測IO信息

每秒一次,采樣五次。

注意:sar命令可以查看I/O信息、內(nèi)存信息以及CPU情況。

vmstat命令

vmstat是一款功能比較齊全的性能監(jiān)測工具,使用它可以統(tǒng)計CPU、內(nèi)存、swap使用情況等信息。可以指定采樣周期和采樣次數(shù)。

小試牛刀

參數(shù)說明

procs

  • r:等等運行的進程數(shù)。

  • b:處在非終端睡眠狀態(tài)的進程數(shù)。

memory

  • swpd:虛擬內(nèi)存使用情況,單位:KB。

  • free :空閑的內(nèi)存,單位:KB。

  • buff:被用來作為緩存的內(nèi)存數(shù),單位:KB。

swap

  • si:每秒從交換區(qū)寫到內(nèi)存的大小 。

  • so:每秒寫入交換區(qū)的內(nèi)存大小 。

io

  • bi: 每秒讀取的塊數(shù)

  • bo: 每秒寫入的塊數(shù)

system

  • in: 每秒中斷數(shù),包括時鐘中斷。

  • cs: 每秒上下文切換數(shù)。

CPU

  • us: 用戶進程執(zhí)行時間(user time)

  • sy: 系統(tǒng)進程執(zhí)行時間(system time)

  • id: 空閑時間(包括IO等待時間),中央處理器的空閑時間 。以百分比表示。

  • wa: 等待IO時間

案例詳情

模擬一個線程切換頻繁的案例。

代碼如下:

寫一個controller:

????@RestController@RequestMapping("/thread")public?class?ThreadContextSwitchController?{?@GetMapping("/test")public?String?switchContext(){HoldLockDemo.test();try?{Thread.sleep(200000);}?catch?(InterruptedException?e)?{e.printStackTrace();}return?"ok";}}

線程切換部分代碼:

????import?java.util.Random;public?class?HoldLockDemo?{public?static?Object[]?lock?=?new?Object[10];public?static?Random?r?=?new?Random();static?{for?(int?i?=?0;?i?<?lock.length;?i++)?{lock[i]?=?new?Object();}}public?static?class?HoldLockTask?implements?Runnable?{private?int?i;public?HoldLockTask(int?i)?{this.i?=?i;}@Overridepublic?void?run()?{try?{while?(true)?{//獲取鎖synchronized?(lock[i])?{if?(i?%?2?==?0)?{System.out.println("wait");//等待lock[i].wait(r.nextInt(10));}?else?{System.out.println("notifyAll");//喚醒所有等待所lock[i].notifyAll();}}}}?catch?(Exception?e)?{e.printStackTrace();}}}public?static?void?test()?{for?(int?i?=0;i<lock.length;i++){System.out.println("test?method");new?Thread(new?HoldLockTask(i/2)).start();}}}

訪問:

使用vmstat命令一秒采樣一次,采樣五次:

可以看到對應cs線程切換的值,us用戶CPU的值。

注意:vmstat工具可以查看內(nèi)存、交互分區(qū)、I/O操作、上線文切換、時鐘中斷已經(jīng)CPU的使用情況。

iostat命令

iostat可以提供詳盡的I/O信息。

基本使用如下:每一秒采樣一次,采樣五次。

參數(shù)說明
  • %user:CPU處在用戶模式下的時間百分比。

  • %nice:CPU處在帶NICE值的用戶模式下的時間百分比。

  • %system:CPU處在系統(tǒng)模式下的時間百分比。

  • %iowait:CPU等待輸入輸出完成時間的百分比。

  • %steal:管理程序維護另一個虛擬處理器時,虛擬CPU的無意識等待時間百分比。

  • %idle:CPU空閑時間百分比。

注意
  • 如果%iowait的值過高,表示硬盤存在I/O瓶頸。

  • 如果%idle值高,表示CPU較空閑。

  • 如果%idle值高但系統(tǒng)響應慢時,可能是CPU等待分配內(nèi)存,應加大內(nèi)存容量。

  • 如果%idle值持續(xù)低于10,表明CPU處理能力相對較低,系統(tǒng)中最需要解決的資源是CPU。

CPU屬性值說明:
  • tps:該設(shè)備每秒的傳輸次數(shù)。

  • kB_read/s:每秒從設(shè)備(drive expressed)讀取的數(shù)據(jù)量。

  • kB_wrtn/s:每秒向設(shè)備(drive expressed)寫入的數(shù)據(jù)量。

  • kB_read:?讀取的總數(shù)據(jù)量。

  • kB_wrtn:寫入的總數(shù)量數(shù)據(jù)量。

pidstat命令

pidstat是一個功能強大的性能檢測工具,特也是Systat的組件之一。

systat組件主要包括
  • iostat 工具提供CPU使用率及硬盤吞吐效率的數(shù)據(jù);?#比較核心的工具

  • mpstat 工具提供單個處理器或多個處理器相關(guān)數(shù)據(jù);

  • pidstat: 關(guān)于運行中的進程/任務(wù)、CPU、內(nèi)存等的統(tǒng)計信息

  • sar 工具負責收集、報告并存儲系統(tǒng)活躍的信息;? ? #統(tǒng)計數(shù)據(jù)的核心工具

  • sa1 工具負責收集并存儲每天系統(tǒng)動態(tài)信息到一個二進制的文件中。它是通過計劃任務(wù)工具cron來運行,是為sadc所設(shè)計的程序前端程序;

  • sa2工具負責把每天的系統(tǒng)活躍性息寫入總結(jié)性的報告中。它是為sar所設(shè)計的前端 ,要通過cron來調(diào)用

  • sadc 是系統(tǒng)動態(tài)數(shù)據(jù)收集工具,收集的數(shù)據(jù)被寫一個二進制的文件中,它被用作sar工具的后端;

  • sadf 顯示被sar通過多種格式收集的數(shù)據(jù);

  • nfsiostat: NFS(Network File System)的I/O統(tǒng)計信息。

  • cifsiostat: CIFS(Common Internet File System)的統(tǒng)計信息

pidstat主要用于監(jiān)控全部或指定進程占用系統(tǒng)資源的情況,如CPU,內(nèi)存、設(shè)備IO、任務(wù)切換、線程等。pidstat首次運行時顯示自系統(tǒng)啟動開始的各項統(tǒng)計信息,之后運行pidstat將顯示自上次運行該命令以后的統(tǒng)計信息。用戶可以通過指定統(tǒng)計的次數(shù)和時間來獲得所需的統(tǒng)計信息。

通過pidstat -help命令,可以查看到有以下幾個常用參數(shù)可以監(jiān)測線程的性能:

常用參數(shù)
  • -u:默認參數(shù),顯示各個進程的cpu使用情況;

  • -r:顯示各個進程的內(nèi)存使用情況;

  • -d:顯示各個進程的I/O使用情況;

  • -w:顯示每個進程的上下文切換情況;

  • -p:指定進程號;

  • -t:顯示進程中線程的統(tǒng)計信息

監(jiān)測CPU

輸出參數(shù)說明:

PID: 進程pid

  • %usr: 進程在用戶態(tài)運行所占cpu時間比率

  • %system: 進程在內(nèi)核態(tài)運行所占cpu時間比率

  • %CPU: 進程運行所占cpu時間比率

  • CPU: 指示進程在哪個核運行

  • Command: 拉起進程對應的命令

監(jiān)測內(nèi)存

使用pidstat命令,還可以監(jiān)測指定進程的內(nèi)存使用情況。

下面就使用pidstat工具對進程pid=27180的進程進程內(nèi)存監(jiān)控。

每一秒采樣一次,采樣五次:

輸出參數(shù)說明:

  • minflt/s: 每秒次缺頁錯誤次數(shù)(minor page faults),次缺頁錯誤次數(shù)意即虛擬內(nèi)存地址映射成物理內(nèi)存地址產(chǎn)生的page fault次數(shù)

  • majflt/s: 每秒主缺頁錯誤次數(shù)(major page faults),當虛擬內(nèi)存地址映射成物理內(nèi)存地址時,相應的page在swap中,這樣的page fault為major page fault,一般在內(nèi)存使用緊張時產(chǎn)生

  • VSZ: ? ? ?該進程使用的虛擬內(nèi)存(以kB為單位)

  • RSS: ? ? ?該進程使用的物理內(nèi)存(以kB為單位)

  • %MEM: ? ? 該進程使用內(nèi)存的百分比

  • Command: ?拉起進程對應的命令

監(jiān)測I/O

使用-d選項,我們可以查看進程IO的統(tǒng)計信息:

輸出參數(shù)說明:

  • kB_rd/s: 每秒進程從磁盤讀取的數(shù)據(jù)量(以kB為單位)

  • kB_wr/s: 每秒進程向磁盤寫的數(shù)據(jù)量(以kB為單位)

  • Command: 拉起進程對應的命令

ps命令

ps (Process Status) 。進程狀態(tài)。使用該命令可以確定有哪些進程正在運行和運行的狀態(tài) 。ps是顯示瞬間進程的狀態(tài),并不動態(tài)連續(xù),如果想對進程進行實時監(jiān)控應該用 top 命令。

如果直接使用 ps 命令,會顯示所有進程的狀態(tài),通常結(jié)合 grep 命令查看某進程的狀態(tài)。(grep 即 global search regular expression(RE) and print out the line,全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。

ps

結(jié)果默認會顯示4列信息。

  • PID: 運行著的命令(CMD)的進程編號

  • TTY: 命令所運行的位置(終端)

  • TIME: 運行著的該命令所占用的CPU處理時間

  • CMD: 該進程所運行的命令

使用man ps可以查看:

參數(shù):
  • -A :所有的進程均顯示出來,與 -e 具有同樣的效用;

  • -a :顯示現(xiàn)行終端機下的所有進程,包括其他用戶的進程;

  • -u :以用戶為主的進程狀態(tài) ;

  • x :通常與 a 這個參數(shù)一起使用,可列出較完整信息。

輸出格式規(guī)劃:

  • l :較長、較詳細的將該PID 的的信息列出;

  • j :工作的格式 (jobs format)

  • -f :做一個更為完整的輸出。

使用ps -ef 命令查看Linux系統(tǒng)的進程

輸出參數(shù)說明:

  • UID:用戶ID,實際輸出的是用戶名,如root

  • PID:當前進程的ID

  • PPID:當前進程的父進程ID

  • C:當前進程占用的CPU的百分比

  • STIME:當前進程啟動到現(xiàn)在的時間

  • TTY:當前進程在哪個終端上運行,若與進程無關(guān),則顯示為?,若為pts/0等,則表示由網(wǎng)絡(luò)連接主機進程。

  • CMD:命令的名稱和參數(shù)

查找mysql進程、java進程、Tomcat進程等。

還可以使用ps aux查看

常見ps操作

  • ps a 顯示現(xiàn)行終端機下的所有程序,包括其他用戶的程序。

  • ps -A 顯示所有程序。

  • ps c 列出程序時,顯示每個程序真正的指令名稱,而不包含路徑,參數(shù)或常駐服務(wù)的標示。

  • ps -e 此參數(shù)的效果和指定”A”參數(shù)相同。

  • ps e 列出程序時,顯示每個程序所使用的環(huán)境變量。

  • ps f 用ASCII字符顯示樹狀結(jié)構(gòu),表達程序間的相互關(guān)系。

  • ps -H 顯示樹狀結(jié)構(gòu),表示程序間的相互關(guān)系。

  • ps -N 顯示所有的程序,除了執(zhí)行ps指令終端機下的程序之外。

  • ps s 采用程序信號的格式顯示程序狀況。

  • ps S 列出程序時,包括已中斷的子程序資料。

  • ps -t  指定終端機編號,并列出屬于該終端機的程序的狀況。

  • ps u  以用戶為主的格式來顯示程序狀況。

  • ps x  顯示所有程序,不以終端機來區(qū)分。

使用PS實時監(jiān)控進程狀態(tài)

ps 命令會顯示你系統(tǒng)當前的進程狀態(tài),但是這個結(jié)果是靜態(tài)的。

當有一種情況,我們需要像上面第四點中提到的通過CPU和內(nèi)存的使用率來篩選進程,并且我們希望結(jié)果能夠每秒刷新一次。為此,我們可以將ps命令和watch命令結(jié)合起來。

watch -n 1 ‘ps -aux --sort -pmem, -pcpu’

如果輸出太長,我們也可以限制它,比如前20條,我們可以使用head命令來做到。

watch -n 1 ‘ps -aux --sort -pmem, -pcpu | head 20’

這里的動態(tài)查看并不像top或者htop命令一樣。但是使用ps的好處是你能夠定義顯示的字段,你能夠選擇你想查看的字段。舉個例子,如果你只需要看名為‘root‘用戶的信息,你可以使用下面的命令:

watch -n 1 ‘ps -aux -U root u --sort -pmem, -pcpu | head 20’

netstat命令

netstat命令用于顯示網(wǎng)絡(luò)相關(guān)信息,例如網(wǎng)絡(luò)連接信息,路由表信息,端口占用情況等。建議查看:

https://www.thegeekstuff.com/2010/03/netstat-command-examples/

常見參數(shù)
  • -a (all)顯示所有選項,默認不顯示LISTEN相關(guān)

  • -t (tcp)僅顯示tcp相關(guān)選項

  • -u (udp)僅顯示udp相關(guān)選項

  • -n 拒絕顯示別名,能顯示數(shù)字的全部轉(zhuǎn)化成數(shù)字。

  • -l 僅列出有在 Listen (監(jiān)聽) 的服務(wù)狀態(tài)

  • -p 顯示建立相關(guān)鏈接的程序名

  • -r 顯示路由信息,路由表

  • -e 顯示擴展信息,例如uid等

  • -s 按各個協(xié)議進行統(tǒng)計

  • -c 每隔一個固定時間,執(zhí)行該netstat命令。

顯示所有連接信息

-a 選項用于顯示全部連接信息:

列出所有 tcp 端

netstat -at

顯示監(jiān)聽狀態(tài)的端口

netstat -l

查看某特定端口被哪個進程占用

netstat -an | grep ':8089'

總結(jié)

使用命令可以查看內(nèi)存、CPU和線程切換等信息。還可以通過命令查看進程信息,以及進程對內(nèi)存的占用和CPU的使用情況。

推薦閱讀

獲取《程序員面試金典.pdf》

快速掌握模板方法模式

線上系統(tǒng)CPU飆高,如何排查?

總結(jié)

以上是生活随笔為你收集整理的美女面试官问我:能说几个常见的Linux性能调优命令吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。