日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

小編說:

今天為大家介紹一款實(shí)用工具——阿里開源內(nèi)核診斷工具diagnose-tools。diagnose-tools是由阿里巴巴開發(fā)的linux內(nèi)核診斷工具,用于linux性能分析,特別是大規(guī)模集群系統(tǒng)中的抖動(dòng)問題分析。

diagnose-tools工具是阿里工程師謝寶友在過去一年多時(shí)間開發(fā)的,代碼行數(shù)超過 5萬行。同時(shí),他也是《深入理解并行編程》、《自研操作系統(tǒng):DIM-SUM設(shè)計(jì)與實(shí)現(xiàn)》的作者。

 

1. 引言

 

作為一名Linux工程師,難免會(huì)遇到系統(tǒng)宕機(jī)、夯機(jī)、性能抖動(dòng)等問題。在夯機(jī)時(shí),常見的做法是編寫一個(gè)簡(jiǎn)單的腳本去遍歷系統(tǒng)中所在線程的堆棧。例如:

#!/bin/sh
#****************************************************************#
# ScriptName: load.sh
# Author: baoyou.xie@aliyun.com
# Create Date: 2020-08-13 19:32
# Modify Author: @alibaba-inc.com
# Modify Date: 2020-08-13 19:32
# Function:
#***************************************************************#

for pid in `ls /proc/`; do
    for tid in `ls /proc/$pid/task`; do
        echo pid: $pid, tid: $tid
        cat /proc/$pid/task/$tid/stack
    done
done

 

只要找到進(jìn)程的調(diào)用鏈,有經(jīng)驗(yàn)的工程師會(huì)很快知道引起系統(tǒng)卡頓的原因。換句話說,類似問題比較容易解決。

確實(shí),在單機(jī)中,解決這些問題的方法很多,看起來也很簡(jiǎn)單。但是,這樣的腳本可能存在如下問題:

1. 在生產(chǎn)環(huán)境中,一臺(tái)100個(gè)CPU的服務(wù)器,往往有數(shù)萬甚至數(shù)十萬個(gè)線程,運(yùn)行這樣的腳本要花費(fèi)一分鐘時(shí)間。

2. 如果在上千臺(tái)機(jī)器中部署這樣的腳本,必然會(huì)引起生產(chǎn)故障。

3. 這樣的腳本只能找到線程在內(nèi)核中的堆棧。如果應(yīng)用程序運(yùn)行在用戶態(tài),就沒有辦法知道這些應(yīng)用程序到底在做什么,為何引起系統(tǒng)卡頓。

 

2. 難題

 

互聯(lián)網(wǎng)一線工程師最頭疼的難題是“集群內(nèi)RT偶發(fā)抖動(dòng)”,以及系統(tǒng)卡頓

其中,RT抖動(dòng)問題最大的難點(diǎn)在于:

  • 上千臺(tái)機(jī)器中出現(xiàn)異常的機(jī)器隨機(jī)。
  • 異常發(fā)生的時(shí)間隨機(jī)。
  • 故障持續(xù)時(shí)間也只有幾秒鐘。

常規(guī)的單機(jī)診斷手段有以下不足:

  • 占用超過1%的CPU。
  • 部署復(fù)雜,可能需要安裝Python/systemtap等工具。
  • 消耗內(nèi)存和存儲(chǔ)資源。

可以說,集群范圍內(nèi)的RT偶發(fā)抖動(dòng)是一個(gè)業(yè)界難題,被全世界的運(yùn)維工程師所討厭。

在日常業(yè)務(wù)穩(wěn)定性分析的過程中,作者用內(nèi)核模塊實(shí)現(xiàn)了一些小工具,并將這些小工具集成到diagnose-tools中。為了將工具方便應(yīng)用到線上生產(chǎn)環(huán)境,作者特意使用Linux內(nèi)核模塊實(shí)現(xiàn)了diagnose-tools工具。

這些小工具解決了不少線上的穩(wěn)定性問題。特別是在2019年“雙11”壓測(cè)中,發(fā)揮了重要作用,為2019年最穩(wěn)的“雙11”貢獻(xiàn)了力量。

 

3. 用途

 ◆ load-monitor

在系統(tǒng)卡頓的時(shí)候,往往伴隨著系統(tǒng)Load指標(biāo)升高。這可以通過top/uptime等命令看到當(dāng)前系統(tǒng)的Load指標(biāo)。一旦發(fā)現(xiàn)系統(tǒng)Load升高,就可以使用load-monitor子功能找到當(dāng)前系統(tǒng)中處于D狀態(tài)和R狀態(tài)的進(jìn)程。這些狀態(tài)的進(jìn)程與系統(tǒng)Load指標(biāo)息息相關(guān)。diagnose-tools工具不但能找到這些進(jìn)程的名稱,還能打印出進(jìn)程的內(nèi)核態(tài)堆棧/用戶態(tài)堆棧/進(jìn)程組/CGROUP組等信息。最重要的是,工具還可以為此生成火焰圖,這樣就可以一目了然地找到問題原因。

當(dāng)然了,你可以運(yùn)行如下命令來看看工具的效果:

sh /usr/diagnose-tools/test.sh load-monitor

 ◆ sys-delay

在服務(wù)器Linux中,隨著系統(tǒng)負(fù)載的增加,會(huì)暴露出Linux內(nèi)核中不少有隱患的代碼。例如:過長(zhǎng)的循環(huán)、鎖競(jìng)爭(zhēng)、不合理的流程。這些代碼會(huì)導(dǎo)致系統(tǒng)調(diào)用變慢,從而引起卡頓。sys-delay功能是找到這些異常代碼的好工具。

sys-delay功能的實(shí)現(xiàn)原理,是在應(yīng)用程序進(jìn)入系統(tǒng)調(diào)用的地方,掛接一個(gè)trace-point鉤子,記錄下進(jìn)入時(shí)間,在退出系統(tǒng)調(diào)用的時(shí)候結(jié)束監(jiān)控。并且啟動(dòng)一個(gè)定時(shí)器,監(jiān)控執(zhí)行時(shí)間過長(zhǎng)的調(diào)用鏈。

這個(gè)功能找到不少異常流程,相關(guān)的工程師制作了熱補(bǔ)丁,提升了阿里混部系統(tǒng)的平滑度。

 ◆ run-trace

run-trace功能是解決應(yīng)用程序RT抖動(dòng)的利器。為至少10個(gè)業(yè)務(wù)方解決了2019年“雙11”壓測(cè)過程中的問題。可以略微夸張一點(diǎn)地講,這個(gè)功能為2019年最穩(wěn)的“雙11”發(fā)揮了不小的作用,這也間接促進(jìn)了2019 年“雙11”成功獲得國家科技進(jìn)步獎(jiǎng)。

run-trace功能的原理是在計(jì)算RT開始和結(jié)束的地方,掛接鉤子,系統(tǒng)記錄下在此期間應(yīng)用程序的所有行為。可以針對(duì)應(yīng)用程序進(jìn)行微秒級(jí)的采樣,得到應(yīng)用程序的用戶態(tài)調(diào)用鏈,找到應(yīng)用程序異常期間的所有異常事件。

 ◆ perf

與開源社區(qū)大名鼎鼎的perf工具相比,diangose-tools工具的perf功能不算強(qiáng)大,但是很有特色。特別是在運(yùn)行數(shù)十個(gè)容器的宿主機(jī)中,使用此工具可以針對(duì)部分CPU進(jìn)行采樣,并且完整輸出進(jìn)程用戶態(tài)/內(nèi)核態(tài)調(diào)用鏈,這些特色是開源perf工具所沒有的。此功能也協(xié)助分析了不少線上生產(chǎn)環(huán)境中的問題。

 ◆ 其他功能

除了這些功能外,diagnose-tools工具還有20多個(gè)小功能。包括網(wǎng)絡(luò)、I/O相關(guān)的診斷工具。限于篇幅,作者并不能在此詳細(xì)列出所有功能的介紹。有興趣的讀者可以:

1.參考源碼目錄 /documents/usage.docx里的詳細(xì)介紹。

2.參考源碼目錄SOURCE/script/test.sh,試著使用每個(gè)功能并觀察其結(jié)果。

3.添加linux-kernel微信號(hào)與作者聯(lián)系。

 

4. 效果

 

通過工具,我們最終在線上生產(chǎn)環(huán)境中,發(fā)現(xiàn)了不少內(nèi)存回收、系統(tǒng)堆疊、不合理的監(jiān)控工具引起的問題。

同時(shí)根據(jù)工具的診斷結(jié)果,產(chǎn)生了19個(gè)內(nèi)核優(yōu)化補(bǔ)丁,同時(shí)也調(diào)整線上生產(chǎn)系統(tǒng)的Linux配置參數(shù)。

最終實(shí)現(xiàn)的效果是:將混部機(jī)房的Load高告警數(shù)量降低了67%,節(jié)省了數(shù)千臺(tái)物理機(jī)。同時(shí)也將阿里云存儲(chǔ)抖動(dòng)告警降低了50倍。

 

5. 特點(diǎn)

 

要達(dá)到這樣的效果,主要在于工具輕量化的特點(diǎn)。這是本工具優(yōu)于腳本/ebpf/systemtap的地方。它的性能開銷小到何種地步呢?舉個(gè)例子,在10G網(wǎng)絡(luò)吞吐量的情況下,對(duì)每個(gè)報(bào)文進(jìn)行監(jiān)控,僅僅占用3%的CPU。

正是由于輕量化的特點(diǎn),才可以將工具常態(tài)化運(yùn)行在集群中,抓住異常信息。最終實(shí)現(xiàn)秒級(jí)系統(tǒng)資源監(jiān)控,突破了一個(gè)業(yè)界技術(shù)難題。

 

6. 適用范圍

 

除了輕量化的特點(diǎn)外,diagnose-tools工具的適用面也比較廣,不僅可以用于阿里生產(chǎn)環(huán)境的操作系統(tǒng),也可以用于標(biāo)準(zhǔn)linux 2.6 / 3.x / 4.x / 5.x版本。當(dāng)然了,還可以用于常見的Linux發(fā)行版,例如ubuntu/centos/debian,甚至也有公有云客戶將它用于定制linux中。

diagnose-tools還可以獲取用戶態(tài)應(yīng)用程序的調(diào)用鏈,而不管這些應(yīng)用程序是用JAVA / C / C++ 還是Go語言開發(fā)。甚至,作者希望業(yè)界同人對(duì)工具進(jìn)行改造,以支持python等其他開發(fā)語言編寫的應(yīng)用程序。

在實(shí)踐中,也可以基于diagnose-tools進(jìn)行二次開發(fā),與業(yè)務(wù)調(diào)度程序配合,完成更復(fù)雜的功能。實(shí)際上,已經(jīng)有業(yè)務(wù)方在這樣使用diagnose-tools工具了。

 

7. 現(xiàn)狀

 

diagnose-tools工具已經(jīng)被一些公有云客戶、友商、開源愛好者使用,并且?guī)椭鉀Q了不少Linux性能問題,特別是抖動(dòng)問題。

目前,diagnose-tools工具已經(jīng)開放源碼。更詳細(xì)的信息,請(qǐng)大家參考:

https://github.com/alibaba/diagnose-tools

有一些熱情的開源愛好者已經(jīng)為diagnose-tools提供了patch,這些patch已經(jīng)被合入到工具中,并且被作者用于線上生產(chǎn)系統(tǒng)的問題診斷中。

歡迎更多的開源愛好者參與到diagnose-tools工具的開發(fā)中來!

 

本文作者新書《自研操作系統(tǒng):DIM-SUM設(shè)計(jì)與實(shí)現(xiàn)》已上市!

分享到:
標(biāo)簽:內(nèi)核 診斷
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定