隨著互聯(lián)網(wǎng)行業(yè)的高速發(fā)展,現(xiàn)在的網(wǎng)站界面設(shè)計(jì)變得越來(lái)越酷炫。誠(chéng)然,視覺(jué)上給我們帶來(lái)的沖擊,會(huì)對(duì)網(wǎng)站流量起到很大的作用。但是,如果后端服務(wù)滿足不了突增的并發(fā)量,那么用戶體驗(yàn)就會(huì)變得極差。
眾所周知,做一個(gè)網(wǎng)站非常不容易。現(xiàn)在,Java 也是開(kāi)發(fā)者最常用的編程語(yǔ)言之一,而且很多企業(yè)級(jí)的 IT 公司對(duì) Java 的依賴程度也非常之高。太多的網(wǎng)站由于 Java 的性能問(wèn)題導(dǎo)致了商業(yè)前景破滅,聽(tīng)起來(lái)很殘酷,但這是一個(gè)不爭(zhēng)的事實(shí)。那么問(wèn)題來(lái)了,是什么原因?qū)е铝诉@些性能問(wèn)題? 如何才能快速發(fā)現(xiàn)導(dǎo)致性能問(wèn)題的根源呢?
對(duì) Java 開(kāi)發(fā)者來(lái)說(shuō),OneAPM的 application Insight 就是一款必備的Java 性能優(yōu)化工具,它可以從4個(gè)維度「1. Web 事務(wù);2. 數(shù)據(jù)庫(kù);3. 外部服務(wù);4.后臺(tái)任務(wù)」來(lái)剖析系統(tǒng)在運(yùn)行期間應(yīng)用程序的一舉一動(dòng)。比如說(shuō),用戶在訪問(wèn)應(yīng)用時(shí),每步操作都給你剖析的很清楚,耗時(shí)多少,占用多少資源,并且提供了歷史數(shù)據(jù)供你做參考對(duì)比,讓你對(duì)應(yīng)用的運(yùn)行情況一目了然,清清楚楚。
一般而言,我們對(duì)于性能的管理要經(jīng)過(guò)兩個(gè)步驟:1. 性能問(wèn)題發(fā)現(xiàn);2. 性能問(wèn)題優(yōu)化。Application Insight首先就是找到產(chǎn)生性能問(wèn)題的根源,接下來(lái)的性能優(yōu)化過(guò)程就會(huì)變的非常簡(jiǎn)單。 OneAPM 也能夠從多個(gè)維度準(zhǔn)確定位出影響性能問(wèn)題的根源,并給提供最終的解決方案。如圖所示:

我們可以在響應(yīng)時(shí)間的總覽視圖中,清晰地看到4個(gè)維度「Web 事務(wù),數(shù)據(jù)庫(kù),外部服務(wù),后臺(tái)任務(wù)」所對(duì)應(yīng)的響應(yīng)時(shí)間消耗情況,接下來(lái),我們就可以針對(duì)每個(gè)維度對(duì)時(shí)間消耗情況進(jìn)行深度分析。
1. Web 事務(wù)

我們可以從視圖中看到緩慢 Web 事務(wù)的響應(yīng)時(shí)間占比、平均響應(yīng)時(shí)間、性能指數(shù)、吞吐量等等,同時(shí),會(huì)按照耗時(shí)長(zhǎng)短給 Web 事務(wù)做一個(gè)排序,以列表的形式展示出來(lái),這樣你就可以輕松地找出哪些 Web 事務(wù)在執(zhí)行過(guò)程耗時(shí)比較長(zhǎng),并且可以看到所提供的 Top5 Web 事物響應(yīng)時(shí)間折線圖。
然后,我們根據(jù)提供 Web 事務(wù)的性能指數(shù)數(shù)據(jù)就可以初步判斷,用戶在操作時(shí)的體驗(yàn)。到底 Web 事務(wù)在執(zhí)行的過(guò)程中,時(shí)間都消耗在了什么地方。更重要的是,Application Insight 還提供了慢事務(wù)跟蹤功能,點(diǎn)擊慢事務(wù)跟蹤列表中的名稱,就可以查看詳情,如下圖:

通過(guò)這張數(shù)據(jù)視圖,展示了所跟蹤到的慢事務(wù)的「 概要,詳情,參數(shù),SQL 」4 個(gè)指標(biāo)的詳情,我們通過(guò)點(diǎn)擊詳情這個(gè)指標(biāo),整個(gè) Web 事務(wù)組件的調(diào)用關(guān)系以及每個(gè)步驟耗時(shí)的整體情況將直接展現(xiàn)在你的眼前,我們還可以看到每個(gè)步驟業(yè)務(wù)的調(diào)用關(guān)系,并以樹(shù)形結(jié)構(gòu)的方式進(jìn)行展示,同時(shí),可以展開(kāi)方法跟蹤功能,找到耗時(shí)比較嚴(yán)重的代碼行,包括 HTTP 請(qǐng)求都可以清晰的看到。在整 Web 事務(wù)執(zhí)行的過(guò)程中,我們將性能剖析結(jié)果以視圖的方式進(jìn)行展現(xiàn),看清楚每段代碼在執(zhí)行中一舉一動(dòng),以及它所占用資源的使用情況。
2. 數(shù)據(jù)庫(kù)

從數(shù)據(jù)庫(kù)的視圖中,我們會(huì)把對(duì)數(shù)據(jù)庫(kù)操作以 Table Name 和 SQL 操作類型的格式,按照響應(yīng)時(shí)間耗時(shí)長(zhǎng)短進(jìn)行排序,將耗時(shí)較長(zhǎng)的數(shù)據(jù)以列表形式展示出來(lái),并且可以看到每次數(shù)據(jù)庫(kù)操作時(shí)的平均響應(yīng)時(shí)間、總響應(yīng)時(shí)間以及吞吐量情況,這樣就可以找出排除 Web 事務(wù)的維度外,還會(huì)有哪些耗時(shí)較長(zhǎng)的 SQL,讓你盡收眼底。OneAPM 還給提供了 Top 5 數(shù)據(jù)庫(kù)操作響應(yīng)時(shí)間的視圖,如下圖所示:

通過(guò)這些圖表數(shù)據(jù),我們可以動(dòng)態(tài)的看到每次數(shù)據(jù)庫(kù)操作對(duì)應(yīng)用性能消耗的整體情況。除此之外,我們還針對(duì)慢的數(shù)據(jù)庫(kù)操作,提供了慢 SQL 的跟蹤功能,如圖:

從這張視圖列表中,我們可以看到慢 SQL 的時(shí)間戳以及耗時(shí)情況。你還可以點(diǎn)擊慢 SQL 的名稱繼續(xù)跟蹤這條 SQL 的詳細(xì)情況,如下圖:

在這里,我們就可以看到詳細(xì)的 SQL 語(yǔ)句以及其執(zhí)行的次數(shù)和范圍,有了慢 SQL 跟蹤功能提供的這些數(shù)據(jù),那么找到 SQL 緩慢原因就會(huì)變的非常容易。當(dāng)然,因?yàn)檫@些 SQL 都是跟業(yè)務(wù)建立者有關(guān)系,所以很容易判斷出是程序的問(wèn)題還是運(yùn)維的問(wèn)題。如果是程序問(wèn)題,OneAPM 提供了此次操作的 Web 事務(wù),如果是運(yùn)維問(wèn)題,也提供了慢 SQL 的跟蹤功能。總的來(lái)講,我們可以根據(jù)問(wèn)題的原因,來(lái)優(yōu)化我們的應(yīng)用程序,這樣效率必然會(huì)得到大大的提升。
3. 外部服務(wù)

通過(guò)這張圖表,我們可以看到通過(guò) WebService、Rest 等方式調(diào)用的第三方服務(wù)的平均響應(yīng)時(shí)間、吞吐量,還可以看到在調(diào)用接口時(shí)所消耗的時(shí)間,并且每個(gè)外部服務(wù)調(diào)用也會(huì)提供數(shù)據(jù)視圖,如下圖所示:

響應(yīng)時(shí)間和吞吐量圖:展示該外部服務(wù)的響應(yīng)時(shí)間和吞吐量變化情況

調(diào)用者時(shí)間占比圖:展示調(diào)用該外部服務(wù)的事務(wù)執(zhí)行時(shí)間

事務(wù)列表:展示調(diào)用該條外部服務(wù)的事務(wù)執(zhí)行時(shí)間占比、響應(yīng)時(shí)間和調(diào)用次數(shù)
從以上數(shù)據(jù),我們可以得出結(jié)論,在性能消耗的角度上,耗時(shí)是主要發(fā)生在方法的調(diào)用方面,還是發(fā)生在接口那邊。通過(guò)這些性能數(shù)據(jù),我們就能夠很快定位到導(dǎo)致應(yīng)用性能問(wèn)題的根本原因,再去解決問(wèn)題話就會(huì)變得很輕松。
4. 后臺(tái)任務(wù)

從后臺(tái)任務(wù)的視圖中,我們可以看到在應(yīng)用程序中比較耗時(shí)的任務(wù),包括每個(gè)任務(wù)的平均響應(yīng)時(shí)間、性能指數(shù)、吞吐量、響應(yīng)時(shí)間占比等等。然后,我們?cè)诤笈_(tái)任務(wù)這個(gè)維度中,就可以發(fā)現(xiàn)那些比較耗時(shí)的執(zhí)行任務(wù),并提供相應(yīng)的 Top 5 后臺(tái)任務(wù)響應(yīng)時(shí)間,吞吐量,CPU 使用率等動(dòng)態(tài)折線視圖。

從上圖中,我們可以找出非 HTTP 請(qǐng)求方法對(duì)于大量占用系統(tǒng)性能的瓶頸點(diǎn),然后根據(jù)后臺(tái)任務(wù)提供的 Top 5 響應(yīng)視圖,就能夠直觀的看到嚴(yán)重消耗性能的后臺(tái)任務(wù)以及 CPU 的使用率和內(nèi)存使用情況了。
通過(guò)后臺(tái)任務(wù)性能消耗的剖析,我們還可以找出消耗資源比較嚴(yán)重的定時(shí)任務(wù),對(duì)耗時(shí)的任務(wù)進(jìn)行合理優(yōu)化,那么應(yīng)用就會(huì)變的更加流暢。
綜合來(lái)講,
通過(guò)對(duì)「Web 事務(wù),數(shù)據(jù)庫(kù),外部服務(wù),后臺(tái)任務(wù)」 4 個(gè)維度的深度剖析,我們很容易找到影響 Java 系統(tǒng)緩慢的原因。在發(fā)現(xiàn)這些原因后,我們?cè)偃ミM(jìn)行系統(tǒng)優(yōu)化,整個(gè)處理問(wèn)題的過(guò)程就會(huì)變的簡(jiǎn)單很多。
如果你非常關(guān)心系統(tǒng)性能消耗在哪個(gè)維度,或者是現(xiàn)在你的應(yīng)用已經(jīng)發(fā)生嚴(yán)重的性能問(wèn)題,還遲遲找不到原因所在,那么趕緊注冊(cè)一個(gè)OneAPM賬號(hào),安裝Application Insight來(lái)感受一下吧! 不管你是做運(yùn)維、開(kāi)發(fā)還是測(cè)試 ,我們相信,使用 Application Insight 之后,一定會(huì)給你的工作帶來(lái)驚喜和收獲。
轉(zhuǎn)自http://news.oneapm.com/oneapm-java/
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注