1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      不改一行代碼定位線上性能問題-創(chuàng)新互聯(lián)

      背景
      最近時運不佳,幾乎天天被線上問題騷擾。前幾天剛解決了一個 HashSet 的并發(fā)問題,周一又來了一個性能問題。

      創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,先為甘井子等服務(wù)建站,甘井子等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為甘井子企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

      大致的現(xiàn)象是:
      我們提供出去的一個 OpenAPI 反應(yīng)時快時慢,快的時候幾十毫秒,慢的時候幾秒鐘才響應(yīng)。

      嘗試解決
      由于這種也不是業(yè)務(wù)問題,不能直接定位。所以嘗試在測試環(huán)境復(fù)現(xiàn),但遺憾的測試環(huán)境賊快。

      沒辦法只能硬著頭皮上了。

      中途有抱著僥幸心里讓運維查看了 Nginx 里 OpenAPI 的響應(yīng)時間,想把鍋扔給網(wǎng)絡(luò)。結(jié)果果然打臉了;Nginx 里的日志也表明確實響應(yīng)時間確實有問題。

      為了清晰的了解這個問題,我簡單梳理了這個調(diào)用過程。
      不改一行代碼定位線上性能問題
      整個的流程算是比較常見的分層架構(gòu):

      客戶端請求到 Nginx。
      Nginx 負(fù)載了后端的 web 服務(wù)。
      web 服務(wù)通過 RPC 調(diào)用后端的 Service 服務(wù)。
      日志大法

      我們首先想到的是打日志,在可能會慢的方法或接口處記錄處理時間來判斷哪里有問題。

      但通過剛才的調(diào)用鏈來說,這個請求流程不短。加日志涉及的改動較多而且萬一加漏了還有可能定位不到問題。

      再一個是改動代碼之后還會涉及到發(fā)版上線。

      工具分析

      所以最好的方式就是不改動一行代碼把這個問題分析出來。

      這時就需要一個 agent 工具了。我們選用了阿里以前開源的 Tprofile 來使用。

      只需要在啟動參數(shù)中加入 -javaagent:/xx/tprofiler.jar 即可監(jiān)控你想要監(jiān)控的方法耗時,并且可以給你輸出報告,非常方便。對代碼沒有任何侵入性同時性能影響也較小。

      工具使用
      下面來簡單展示下如何使用這個工具。

      首先第一步自然是 clone 源碼然后打包,可以克隆我修改過的源碼。

      因為這個項目阿里多年沒有維護(hù)了,還殘留一些 bug,我在它原有的基礎(chǔ)上修復(fù)了個影響使用的 bug,同時做了一些優(yōu)化。

      執(zhí)行以下腳本即可。

      git clone https://github.com/crossoverJie/TProfiler
      mvn assembly:assembly
      到這里之后會在項目的 TProfiler/pkg/TProfiler/lib/tprofiler-1.0.1.jar 中生成好我們要使用的 jar 包。

      接下來只需要將這個 jar 包配置到啟動參數(shù)中,同時再配置一個配置文件路徑即可。

      這個配置文件我 copy 官方的解釋。

      #log file name
      logFileName = tprofiler.log
      methodFileName = tmethod.log
      samplerFileName = tsampler.log
      #basic configuration items

      開始取樣時間

      startProfTime = 1:00:00

      結(jié)束取樣時間

      endProfTime = 23:00:00

      取樣的時間長度

      eachProfUseTime = 10

      每次取樣的時間間隔

      eachProfIntervalTime = 1
      samplerIntervalTime = 20

      端口,主要不要沖突了

      port = 50000
      debugMode = false
      needNanoTime = false

      是否忽略 get set 方法

      ignoreGetSetMethod = true
      #file paths 日志路徑
      logFilePath = /data/work/logs/tprofile/${logFileName}
      methodFilePath =/data/work/logs/tprofile/${methodFileName}
      samplerFilePath =/data/work/logs/tprofile/${samplerFileName}
      #include & excludes items
      excludeClassLoader = org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader

      需要監(jiān)控的包

      includePackageStartsWith = top.crossoverjie.cicada.example.action

      不需要監(jiān)控的包

      excludePackageStartsWith = com.taobao.sketch;org.apache.velocity;com.alibaba;com.taobao.forest.domain.dataobject
      最終的啟動參數(shù)如下:
      -javaagent:/TProfiler/lib/tprofiler-1.0.1.jar
      -Dprofile.properties=/TProfiler/profile.properties
      為了模擬排查接口響應(yīng)慢的問題,我用 cicada 實現(xiàn)了一個 HTTP 接口。其中調(diào)用了兩個耗時方法:
      不改一行代碼定位線上性能問題
      這樣當(dāng)我啟動應(yīng)用時,Tprofile 就會在我配置的目錄記錄它所收集的方法信息。

      我訪問接口 http://127.0.0.1:5688/cicada-example/demoAction?name=test&id=10 幾次后它就會把每個方法的明細(xì)響應(yīng)寫入 tprofile.log。不改一行代碼定位線上性能問題
      由左到右每列分別代表為:

      線程ID、方法棧深度、方法編號、耗時(毫秒)。

      但 tmethod.log 還是空的;

      這時我們只需要執(zhí)行這個命令即可把最新的方法采樣信息刷到 tmethod.log 文件中。
      java -cp /TProfiler/tprofiler.jar com.taobao.profile.client.TProfilerClient 127.0.0.1 50000 flushmethod
      flushmethod success
      其中的端口就是配置文件中的 port。
      再打開 tmethod.log :

      不改一行代碼定位線上性能問題
      其中會記錄方法的信息。

      第一行數(shù)字為方法的編號。可以通過這個編號去 tprofile.log(明細(xì))中查詢每次的耗時情況。
      行末的數(shù)字則是這個方法在源碼中最后一行的行號。
      其實大部分的性能分析都是統(tǒng)計某個方法的平均耗時。

      所以還需要執(zhí)行下面的命令,通過 tmethod.log tprofile.log來生成每個方法的平均耗時。

      java -cp /TProfiler/tprofiler.jar com.taobao.profile.analysis.ProfilerLogAnalysis tprofiler.log tmethod.log topmethod.log topobject.log
      print result success
      打開 topmethod.log 就是所有方法的平均耗時。
      不改一行代碼定位線上性能問題
      4 為請求次數(shù)。
      205 為平均耗時。
      818 則為總耗時。
      和實際情況是相符的。

      方法的明細(xì)耗時

      這是可能還會有其他需求;比如說我想查詢某個方法所有的明細(xì)耗時怎么辦呢?

      官方?jīng)]有提供,但也是可以的,只是要麻煩一點。

      比如我想查看 selectDB() 的耗時明細(xì):

      首先得知道這個方法的編號,在 tmethod.log 中可以看查到。

      2 top/crossoverjie/cicada/example/action/DemoAction:selectDB:84

      編號為 2.

      之前我們就知道 tprofile.log 記錄的是明細(xì),所以通過下面的命令即可查看。

      grep 2 tprofiler.log
      不改一行代碼定位線上性能問題
      通過第三列方法編號為 2 的來查看每次執(zhí)行的明細(xì)。

      但這樣的方式顯然不夠友好,需要人為來過濾干擾,步驟也多;所以我也準(zhǔn)備加上這樣一個功能。

      只需要傳入一個方法名稱即可查詢采集到的所有方法耗時明細(xì)。

      總結(jié)
      回到之前的問題;線上通過這個工具分析我們得到了如下結(jié)果。

      有些方法確實執(zhí)行時快時慢,但都是和數(shù)據(jù)庫相關(guān)的。由于目前數(shù)據(jù)庫壓力較大,準(zhǔn)備在接下來進(jìn)行冷熱數(shù)據(jù)分離,以及分庫分表。
      在第一步操作還沒實施之前將部分寫數(shù)據(jù)庫的操作改為異步,減小響應(yīng)時間。
      考慮接入 pinpoint 這樣的 APM工具。
      類似于 Tprofile 的工具確實挺多的,找到適合自己的就好。

      在還沒有使用類似于 pinpoint 這樣的分布式跟蹤工具之前應(yīng)該會大量依賴于這個工具,所以后續(xù)說不定也會做一些定制,比如增加一些可視化界面等,可以提高排查效率。

      你的點贊與分享是對我大的支持

      另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


      新聞標(biāo)題:不改一行代碼定位線上性能問題-創(chuàng)新互聯(lián)
      標(biāo)題路徑:http://ef60e0e.cn/article/cdjoje.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        德惠市| 梁平县| 阳原县| 靖远县| 武鸣县| 内黄县| 兰西县| 扶沟县| 河池市| 五原县| 元朗区| 嘉禾县| 墨脱县| 白城市| 永丰县| 遵义县| 永泰县| 区。| 湄潭县| 手游| 攀枝花市| 克拉玛依市| 林周县| 乡宁县| 大丰市| 仙桃市| 连州市| 新营市| 玛沁县| 大悟县| 民乐县| 十堰市| 腾冲县| 屏山县| 城步| 确山县| 和田市| 昌邑市| 三原县| 德化县| 女性|