IT服務(wù)器運維:什么是負載?如何查看服務(wù)器的機器負載情況?
2020-03-30 17:03 作者:艾銻無限 瀏覽量:
“中國策”,為全球戰(zhàn)“疫”開出藥方

面對突如其來的新冠肺炎疫情,中國政府、中國人民不畏艱險,始終把人民生命安全和身體健康擺在第一位,按照堅定信心、同舟共濟、科學防治、精準施策的總要求,堅持全民動員、聯(lián)防聯(lián)控、公開透明,打響了一場抗擊疫情的人民戰(zhàn)爭。經(jīng)過艱苦努力,付出巨大犧牲,目前中國國內(nèi)疫情防控形勢持續(xù)向好,生產(chǎn)生活秩序加快恢復(fù),但我們?nèi)匀唤z毫不能放松警惕。
在中方最困難的時候,國際社會許多成員給予中方真誠幫助和支持,我們會始終銘記并珍視這份友誼。
重大傳染性疾病是全人類的敵人。新冠肺炎疫情正在全球蔓延,給人民生命安全和身體健康帶來巨大威脅,給全球公共衛(wèi)生安全帶來巨大挑戰(zhàn),形勢令人擔憂。當前,國際社會最需要的是堅定信心、齊心協(xié)力、團結(jié)應(yīng)對,全面加強國際合作,凝聚起戰(zhàn)勝疫情強大合力,攜手贏得這場人類同重大傳染性疾病的斗爭。
中國提出以下4點倡議。
第一,堅決打好新冠肺炎疫情防控全球阻擊戰(zhàn)。國際社會應(yīng)該加緊行動起來,堅決遏制疫情蔓延勢頭。中國愿在此提議,盡早召開二十國集團衛(wèi)生部長會議,加強信息分享,開展藥物、疫苗研發(fā)、防疫合作,有效防止疫情跨境傳播。要攜手幫助公共衛(wèi)生體系薄弱的發(fā)展中國家提高應(yīng)對能力。中國建議發(fā)起二十國集團抗疫援助倡議,在世界衛(wèi)生組織支持下加強信息溝通、政策協(xié)調(diào)、行動配合。中方秉持人類命運共同體理念,愿同各國分享防控有益做法,開展藥物和疫苗聯(lián)合研發(fā),并向出現(xiàn)疫情擴散的國家提供力所能及的援助。
第二,有效開展國際聯(lián)防聯(lián)控。病毒無國界。疫情是我們的共同敵人。各國必須攜手拉起最嚴密的聯(lián)防聯(lián)控網(wǎng)絡(luò)。中方已經(jīng)建立新冠肺炎疫情防控網(wǎng)上知識中心,向所有國家開放。要集各國之力,共同合作加快藥物、疫苗、檢測等方面科研攻關(guān),力爭早日取得惠及全人類的突破性成果。要探討建立區(qū)域公共衛(wèi)生應(yīng)急聯(lián)絡(luò)機制,提高突發(fā)公共衛(wèi)生事件應(yīng)急響應(yīng)速度。
第三,積極支持國際組織發(fā)揮作用。中方支持世界衛(wèi)生組織發(fā)揮領(lǐng)導(dǎo)作用,制定科學合理防控措施,盡力阻止疫情跨境傳播。中國建議,二十國集團依托世界衛(wèi)生組織加強疫情防控信息共享,推廣全面系統(tǒng)有效的防控指南。要發(fā)揮二十國集團的溝通協(xié)調(diào)作用,加強政策對話和交流,適時舉辦全球公共衛(wèi)生安全高級別會議。中國將同各國一道,加大對相關(guān)國際和地區(qū)組織的支持力度。
第四,加強國際宏觀經(jīng)濟政策協(xié)調(diào)。疫情對全球生產(chǎn)和需求造成全面沖擊,各國應(yīng)該聯(lián)手加大宏觀政策對沖力度,防止世界經(jīng)濟陷入衰退。要實施有力有效的財政和貨幣政策,促進各國貨幣匯率基本穩(wěn)定。要加強金融監(jiān)管協(xié)調(diào),維護全球金融市場穩(wěn)定。要共同維護全球產(chǎn)業(yè)鏈供應(yīng)鏈穩(wěn)定,中國將加大力度向國際市場供應(yīng)原料藥、生活必需品、防疫物資等產(chǎn)品。要保護婦女兒童,保護老年人、殘疾人等弱勢群體,保障人民基本生活。中國將繼續(xù)實施積極的財政政策和穩(wěn)健的貨幣政策,堅定不移擴大改革開放,放寬市場準入,持續(xù)優(yōu)化營商環(huán)境,積極擴大進口,擴大對外投資,為世界經(jīng)濟穩(wěn)定作出貢獻。
中國呼吁二十國集團成員采取共同舉措,減免關(guān)稅、取消壁壘、暢通貿(mào)易,發(fā)出有力信號,提振世界經(jīng)濟復(fù)蘇士氣。我們應(yīng)該制定二十國集團行動計劃,并就抗疫宏觀政策協(xié)調(diào)及時作出必要的機制性溝通和安排。
值此關(guān)鍵時刻,我們應(yīng)該直面挑戰(zhàn)、迅速行動。中國堅信,只要我們同舟共濟、守望相助,就一定能夠徹底戰(zhàn)勝疫情,迎來人類發(fā)展更加美好的明天!
轉(zhuǎn)載人民日報
IT服務(wù)器運維:什么是負載?如何查看服務(wù)器的機器負載情況?
平常的工作中,在衡量服務(wù)器的性能時,經(jīng)常會涉及到幾個指標,load、cpu、mem、qps、rt等。每個指標都有其獨特的意義,很多時候在線上出現(xiàn)問題時,往往會伴隨著某些指標的異常。大部分情況下,在問題發(fā)生之前,某些指標就會提前有異常顯示。
對于這些指標的理解和查看、異常解決等,是程序員們重要的必備技能。本文,主要來介紹一下一個比較重要的指標——機器負載(Load),主要涉及負載的定義、查看負載方式、負載飆高排查思路等。
什么是負載
負載(load)是linux機器的一個重要指標,直觀了反應(yīng)了機器當前的狀態(tài)。
來看下負載的定義是怎樣的:
In UNIX compu
TIng, the system load is a measure of the amount of computa
TIonal work that a computer system performs. The load average represents the average system load over a period of
TIme. It conven
TIonally appears in the form of three numbers which represent the system load during the last one-, five-, and fifteen-minute periods.(wikipedia)
簡單解釋一下:在UNIX系統(tǒng)中,系統(tǒng)負載是對當前CPU工作量的度量,被定義為特定時間間隔內(nèi)運行隊列中的平均線程數(shù)。load average 表示機器一段時間內(nèi)的平均load。這個值越低越好。負載過高會導(dǎo)致機器無法處理其他請求及操作,甚至導(dǎo)致死機。
Linux的負載高,主要是由于CPU使用、內(nèi)存使用、IO消耗三部分構(gòu)成。任意一項使用過多,都將導(dǎo)致服務(wù)器負載的急劇攀升。
查看機器負載
在Linux機器上,有多個命令都可以查看機器的負載信息。其中包括uptime、top、w等。
uptime命令
uptime命令能夠打印系統(tǒng)總共運行了多長時間和系統(tǒng)的平均負載。uptime命令可以顯示的信息顯示依次為:現(xiàn)在時間、系統(tǒng)已經(jīng)運行了多長時間、目前有多少登陸用戶、系統(tǒng)在過去的1分鐘、5分鐘和15分鐘內(nèi)的平均負載。
這行信息的后半部分,顯示“load average”,它的意思是“系統(tǒng)的平均負荷”,里面有三個數(shù)字,我們可以從中判斷系統(tǒng)負荷是大還是小。
1.74 1.87 1.97 這三個數(shù)字的意思分別是1分鐘、5分鐘、15分鐘內(nèi)系統(tǒng)的平均負荷。我們一般表示為load1、load5、load15。
w命令
w命令的主要功能其實是顯示目前登入系統(tǒng)的用戶信息。但是與who不同的是,w命令功能更加強大,w命令還可以顯示:當前時間,系統(tǒng)啟動到現(xiàn)在的時間,登錄用戶的數(shù)目,系統(tǒng)在最近1分鐘、5分鐘和15分鐘的平均負載。然后是每個用戶的各項數(shù)據(jù),項目顯示順序如下:登錄帳號、終端名稱、遠 程主機名、登錄時間、空閑時間、JCPU、PCPU、當前正在運行進程的命令行。
從上面的w命令的結(jié)果可以看到,當前系統(tǒng)時間是14:08,系統(tǒng)啟動到現(xiàn)在經(jīng)歷了23小時41分鐘,共有3個用戶登錄。系統(tǒng)在近1分鐘、5分鐘和15分鐘的平均負載分別是1.74 1.87 1.97。這和uptime得到的結(jié)果相同。 下面還打印了一些登錄的用戶的各項數(shù)據(jù),不詳細介紹了。
top命令
top命令是Linux下常用的性能分析工具,能夠?qū)崟r顯示系統(tǒng)中各個進程的資源占用狀況,類似于Windows的任務(wù)管理器。
上面的輸出結(jié)果中,Load Avg: 1.74, 1.87, 1.97顯示的就是負載信息。
機器正常負載范圍
對于機器的Load到底多少算正常的問題,一直都是很有爭議的,不同人有著不同的理解。對于單個CPU,有人認為如果Load超過0.7就算是超出正常范圍了。也有人認為只要不超過1都沒問題。也有人認為,單個CPU的負載在2以下都可以接受。
為什么會有這么多不同的理解呢,是因為不同的機器除了CPU影響之外還有其他因素的影響,運行的程序、機器內(nèi)存、甚至是機房溫度等都有可能有區(qū)別。
比如,有些機器用于定時執(zhí)行大量的跑批任務(wù),這個時間段內(nèi),Load可能會飆的比較高。而其他時間可能會比較低。那么這段飆高時間我們要不要去排查問題呢?
我的建議是,最好根據(jù)自己機器的實際情況,建立一個指標的基線(如近一個月的平均值),只要日常的load在基線上下范圍內(nèi)不太大都可以接收,如果差距太多可能就要人為介入檢查了。
但是,總要有個建議的閾值吧,關(guān)于這個值。阮一峰在自己的博客中有過以下建議:
當系統(tǒng)負荷持續(xù)大于0.7,你必須開始調(diào)查了,問題出在哪里,防止情況惡化。
當系統(tǒng)負荷持續(xù)大于1.0,你必須動手尋找解決辦法,把這個值降下來。
當系統(tǒng)負荷達到5.0,就表明你的系統(tǒng)有很嚴重的問題,長時間沒有響應(yīng),或者接近死機了。你不應(yīng)該讓系統(tǒng)達到這個值。
以上指標都是基于單CPU的,但是現(xiàn)在很多電腦都是多核的。所以,對一般的系統(tǒng)來說,是根據(jù)cpu數(shù)量去判斷系統(tǒng)是否已經(jīng)過載(Over Load)的。如果我們認為0.7算是單核機器負載的安全線的話,那么四核機器的負載最好保持在3(4*0.7 = 2.8)以下。
還有一點需要提一下,在Load Avg的指標中,有三個值,1分鐘系統(tǒng)負荷、5分鐘系統(tǒng)負荷,15分鐘系統(tǒng)負荷。我們在排查問題的時候也是可以參考這三個值的。
一般情況下,1分鐘系統(tǒng)負荷表示最近的暫時現(xiàn)象。15分鐘系統(tǒng)負荷表示是持續(xù)現(xiàn)象,并非暫時問題。如果load15較高,而load1較低,可以認為情況有所好轉(zhuǎn)。反之,情況可能在惡化。
如何降低負載
導(dǎo)致負載高的原因可能很復(fù)雜,有可能是硬件問題也可能是軟件問題。
如果是硬件問題,那么說明機器性能確實就不行了,那么解決起來很簡單,直接換機器就可以了。
前面我們提過,CPU使用、內(nèi)存使用、IO消耗都可能導(dǎo)致負載高。如果是軟件問題,有可能由于Java中的某些線程被長時間占用、大量內(nèi)存持續(xù)占用等導(dǎo)致。建議從以下幾個方面排查代碼問題:
1、是否有內(nèi)存泄露導(dǎo)致頻繁GC
2、是否有死鎖發(fā)生
3、是否有大字段的讀寫
4、會不會是數(shù)據(jù)庫操作導(dǎo)致的,排查SQL語句問題。
這里還有個建議,如果發(fā)現(xiàn)線上機器Load飆高,可以考慮先把堆棧內(nèi)存dump下來后,進行重啟,暫時解決問題,然后再考慮回滾和排查問題。
Java Web應(yīng)用Load飆高排查思路
發(fā)現(xiàn)PID為1893的進程占用CPU 181%。而且是一個Java進程,基本斷定是軟件問題。
3、使用 top命令,查看具體是哪個線程占用率較高
5、使用jstack命令查看當前線程正在執(zhí)行的方法。(Java命令學習系列(二)——Jstack)
從上面的線程的棧日志中,可以發(fā)現(xiàn),當前占用CPU較高的線程正在執(zhí)行我代碼的com.hollis.test.util.BeanValidator.validate(BeanValidator.java:30) 類。那么就可以去排查這個類是否用法有問題了。
6、還可以使用jstat(Java命令學習系列(四)——jstat)來查看GC情況,看看是否有頻繁FGC,然后再使用jmap(Java命令學習系列(三)——Jmap)來dump內(nèi)存,查看是否存在內(nèi)存泄露。