跨網段遠程調試vs_如何提高后臺服務應用問題的排查效率?日志 VS 遠程調試

轉眼間,距離Jerry最近一篇文章推送已經過去了一個多月的時間了。

bd2e9a87b6bed3ecc5193184f9433a5e.png

公眾號更新的頻率降低,不是因為Jerry偷懶,而是由于從春節過后,我所在的SAP成都研究院數字創新空間整個團隊,一直在忙一個5月份需要交付的項目上。

Jerry每天的工作量像下面這張圖這樣:

1f7572c587b3e137d74a1bf3025e8029.png

這個項目里Jerry負責的是后臺開發工作,我用nodejs開發了若干微服務,每個微服務實現一個特定的業務邏輯。這些微服務由Jerry另外開發的一個編排器(Orchestra)統一調度。整套后臺實現部署在亞馬遜云平臺(Amazon Web Service,以下簡稱AWS)上。

離交付日期越來越近了,我們的功能也趕得差不多了。本地測試運行得很好的場景,部署到AWS上運行后出現了一些bug。比如昨天就遇到一個棘手的bug,因此有了今天這篇文章。

2014年五一節的前一天,當時Jerry還在SAP CRM開發團隊工作,負責處理SAP CRM中間件的一個bug。這個bug和代碼執行時序有關,每執行一次只有40%的幾率能重現,花了我整整一天(8個小時)的時間調試。因為重現bug的場景太復雜,需要調試的ABAP代碼量太大,所以讓我印象深刻。那個bug處理完之后,我也對自己花了8小時才搞定該bug的效率很不滿意,因此寫了一篇博客總結這次排錯的經驗教訓:

My Tips about how to handle complex and tricky issues

https://blogs.sap.com/2014/05/01/my-tips-about-how-to-handle-complex-and-tricky-issues/

回到昨天我遇到的在AWS上出現的bug,根據問題的表象,一開始我和負責前端開發的同事,連這個問題出在前端還是后端都沒辦法判斷。當微服務部署在本地并進行測試時一切正常,只有部署在AWS上進行集成測試時才會暴露,而運行在AWS上的nodejs應用,我昨天還不知道如何調試,因此只好采用我大二剛學C語言編程時用過的最笨的排查辦法:打日志。

2001年,在結束了一年的計算機專業基礎課學習后,Jerry開始了Unix環境下C語言編程的學習。當時我對gdb這種以命令提示行方式進行的調試風格很不適應,大多數時候的排錯采用的還是在代碼里添加printf語句打印變量內容的方式來進行,被寢室的同學鄙視了好久。

5d04d3c9eb00206145c79a5aa2ac4f1e.png

于是昨天我繼續采用了這種自己18年前就曾經用過的排錯方式:

1. 在可能引起bug的相關代碼處逐一加上日志輸出語句

2. 執行會出現bug的用戶操作

3. 閱讀AWS上生成的日志語句

上述三個步驟是一個不斷迭代的過程。最開始我加了若干日志輸出語句,執行操作后閱讀生成的日志,發現沒有任何異常。于是不斷地增加新的日志打印代碼,最后導致了執行一次操作,會生成1200行的日志輸出。

669feab057f7db86c204fcb81279c162.png

我和負責前端開發的同事兩人坐在顯示器前,一行行檢查這海量的日志輸出。由于問題是用戶第二次操作后才會暴露,每次操作會生成不同的會話,我們被迫不斷的上下滑動屏幕來比較這兩次會話的uuid和相關的WebSocket uuid等變量。Jerry很快發現,眼睛一眨不眨地盯著顯示器逐條檢查日志,時間一長眼睛就痛得受不了。無奈之下,只得把這些日志用打印機打印出來,用不同顏色的筆標注出兩個會話對應的各種變量,在紙上來回比對。于是就有了下面這些紙張:

d1f915192fa99c7851a30530c4558770.png
77dda6a27a686c5501435e34cb961780.png
f21964e38ca1325bdf3c01cbfbd5f98d.png

雖然最后用這種辦法,成功排除了后臺出錯的可能性,使我們得以把精力花在前臺代碼的審查上,但是像我一個同事評價的,“這種方式太不環保了”,并且我自己也覺得,效率太低了

后來好幾位熱心的同事告訴Jerry,就算運行在SAP Cloud Platform或者AWS這些云平臺上的nodejs應用,也是可以單步調試的,Jerry Google了一下,發現遠程調試確實很簡單,就兩條命令而已。

Jerry用我們創新空間團隊另外一位同事Haytham開發并部署在AWS上的一個nodejs應用為例來嘗試如何在我的本地電腦上對其進行調試。

Haytham雖然是一個大四本科生,但是已經在SAP成都研究院Jerry所在團隊實習將近十個月的時間了,最近三個月一直在SAP德國總部參與一個項目的開發。

76a7191e0c9fc8e7512c17fe63b5101e.png
1a50517cd8763c1b0b8b573f72c7f560.png

等Haytham回到成都后,會將自己這十個月的工作感悟,從一個SAP新人的視角給大家分享出來,敬請期待。

Haytham之前寫過的文章:

SAP成都研究院許聚龍:Hello, Coresystems!

Haytham寫的這個nodejs應用實際上是Github Webhook的一部分。我們在本地進行微服務nodejs開發,本地git客戶端推送代碼到遠端github倉庫。然后需要在AWS上手動git pull把最新的代碼拉下來,再用一個開源工具pm2進行微服務部署。Haytham寫的這個nodejs應用,能實現本地git推送完畢后一切后續流程的完全自動化,節省了我們大量的部署時間。

下面就來對Haytham這個運行在AWS上的nodejs應用進行遠程調試。

1. 用node --inspect-brk在AWS上以調試模式啟動應用。

之后控制臺上的輸出表明有一個nodejs進程以WebSocket協議在127.0.0.1:9229這個地址上監聽調試客戶端的連接。

2bf7fe76bf91f66b2d3eda2a5739e292.png

2. 我在我的本地電腦上,用如下命令行將我本地電腦的端口9221映射到AWS調試進程監聽的9229端口上:

ssh -i C:甥敳獲i042416.sshKOI.pem -L 9221:localhost:9229 ubuntu@ec2-us-east-2.compute.amazonaws.com

8d57e6cb2c25cd0a0a0d16a94fceacd2.png

現在,本地電腦上Chrome瀏覽器地址欄chrome://inspect里指定監聽地址為localhost:9221,

8a1f716799a52adb84a2105050ea6188.png

通過第二步建立的SSH tunnel,

4fbba8a3aef4220577c0a53c6ee96231.png

我就可以用本地電腦連接到AWS上的nodejs應用并進行調試了。

現在終于可以在Chrome開發者工具里進行愉快的調試了:

81306cbeaa3dedc1a4fa00317396a2c8.png

因為我平時本地做nodejs開發和調試時,更喜歡用Visual Studio Code,所以下一步我準備試試用Visual Studio Code進行遠程調試。

說到Visual Studio Code,Jerry突然想起今天在網上看到的一個關于這個IDE的有意思的擴展,名為"超越鼓勵師"。

fa3fc2dbeac089213d7d8c997c47b46e.png

Jerry試著在自己的Visual Studio Code擴展安裝欄里搜索了一下,這個擴展還真的可以下載。不過擴展里出現的"楊超越",Jerry又孤陋寡聞了,咨詢了老婆后才知道她是誰。

ad35cc2d461001d14570de50e3254846.png

至于實際效果如何,Jerry不做評價,歡迎Visual Studio Code愛好者自行下載體驗。

c041ec72af6578a8e9cb2eb8862cc656.png

最后,祝各位程序猿/程序媛們每天即使沒有程序員鼓勵師的陪伴,仍然可以愉快地編程。感謝閱讀。

145d636d2b14f9091fd7aecec12b8d76.png
9b6c2f151bf586bfb7c4f0325354bdaa.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271103.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271103.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271103.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機硬件知識:BIOS、EFI與UEFI詳解!

本文估計很多小白看不懂,但是還是建議你硬著頭皮看完,這篇文章主要講解了這幾種“BIOS”的啟動方式,對電腦啟動問題判斷的理解會有益處。BIOS是個程序,存儲在BIOS芯片中,而現在的新式電腦用的基本都是UEFI啟動&#xf…

java pdf 導出下載_Java+PDF模板導出成pdf文件,并下載

1,根據前人經驗,熟悉完成基礎操作:https://www.cnblogs.com/wangpeng00700/p/8418594.html?tdsourcetags_pcqq_aiomsg2,根據鏈接中操作完成之后,在本地生成pdf文件已經沒有問題了。但如果放到,Linux服務器…

在db2數據庫上模擬死鎖場景 還是z上的

如果條件允許,起兩個線程互相搶資源就行了,但問題是,時間上還需要同步,要做到完美控制,還得加其他邏輯,忒費事,所以可以用下面的辦法: 在目標表上直接加個鎖……簡單,粗暴…

條件隨機場 python_用條件隨機場做網絡小說命名實體識別

一直想用統計學習方法來改善撥云搜索,這次先在命名實體上小小嘗試一下。線性鏈條件隨機場對于無向圖中的節點,定義一組特征函數,使其狀態僅受鄰近節點和觀測序列的影響。在標注任務中,節點只有前后兩個鄰近節點,即線性…

項目開發基礎:常用測試方法介紹

1、集成測試集成測試就是把模塊按照設計說明書的要求組合起來進行測試。1.1、集成測試方法:a、分別測試各個模塊,再把這些模塊組合起來進行整體測試,也就是非增量式集成。特點:可以對模塊進行并行測試,能充分利用人力&…

java 多數據源處理_java – 用于處理多個數據源的Spring事務管理

這可能是一個重復的問題,但我找不到(至少我無法理解)一個滿意的答案,因此再次提問.我正在使用兩個數據源(MySQL和Oracle).以下是執行流程:主方法-A調用方法-B(寫入Oracle DB)然后它(方法-A)調用方法-C(寫入mySQL DB)然后它(方法-A)調用方法-D(寫入Oracle DB) ).如果…

MyBatis Generator

1 <?xml version"1.0" encoding"UTF-8"?>2 <!DOCTYPE generatorConfiguration3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"4 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"&g…

svd奇異值分解_NCL專輯 | 奇異值分解(SVD)

奇異值分解SVD(Singular Value Decomposition)是一種矩陣分解方法&#xff0c;在氣象領域中常用來分析兩個氣象場場之間的關系。NCL的函數庫中與SVD相關的函數包括svd_lapack&#xff0c;svdcov&#xff0c;svdcov_sv&#xff0c;svdstd&#xff0c;svdstd_sv。svd_lapack&…

項目測試基礎:白盒測試相關知識筆記

1、白盒測試概念白盒測試又稱為結構測試&#xff0c;主要是根據程序的內部結構和邏輯來設計測試用例&#xff0c;然后對程序的路徑和過程進行測試&#xff0c;檢查是否滿足設計的需要。2、白盒測試常用的技術介紹白盒測試常用的技術有邏輯覆蓋、循環覆蓋、基本路徑測試。2.1 邏…

java全局變量和局部變量

分類&#xff1a; 變量按作用范圍劃分分為全局變量&#xff08;成員變量&#xff09;和局部變量 成員變量按調用方式劃分分為實例屬性與類屬性 局部變量按定義位置劃分分為形參&#xff0c;方法局部變量&#xff0c;代碼塊局部變量 成員變量&#xff1a; 直接在類中聲明的…

電腦系統知識:Windows原版系統與Ghost系統的區別,你知道嗎?

經常看到有電腦小白的朋友問原版操作系統跟Ghost的區別是什么&#xff0c;該怎么選擇安裝哪種系統&#xff1f;今天在這里就說說它們之間的聯系與區別。Windows原版系統&#xff1a;原版系統就是微軟推送給用戶的原始“干凈”的系統。系統不含第三方的軟件&#xff0c;軟件補丁…

sql server update觸發器_SQL Server 觸發器

T-SQL 觸發器觸發器分為BEFORE觸發器*(SQL Server不支持&#xff0c;Oracle支持)在事件發生時觸發。AFTER觸發器是 SQLServer生成的最初用于自動相應數據修改的機制。在 SQLServer200以前的版本中 AFTER觸發器是唯一的觸發器&#xff0c;因此不用指明 AFTER&#xff0c;也可以用…

iOS 公司開發者賬號申請

對于獨立開發者很有用,收藏起來,以備不時之需! 蘋果開發者賬號分三種。 個人賬號&#xff1a;個人申請用于開發蘋果app所使用的賬號&#xff0c;僅限于個人使用&#xff0c;申請比較容易&#xff0c;$99。 公司賬號&#xff1a;以公司的名義申請的開發者賬號&#xff0c;用于公…

php渲染視圖,Laravel 視圖渲染:Blade 模板引擎

Laravel 視圖渲染&#xff1a;Blade 模板引擎由 學院君 創建于3年前, 最后更新于 2年前版本號 #153378 views27 likes0 collectsBlade 簡介Blade 是由 Laravel 提供的非常簡單但功能強大的模板引擎&#xff0c;不同于其他流行的 PHP 模板引擎&#xff0c;Blade 在視圖中并不約束…

項目管理基礎:系統切換相關知識筆記

1、系統試運行主要任務對新系統進行初始化、補錄各種原始數據記錄記錄系統運行過程中的數據和狀況核對新舊系統輸出結果是否正確對實際系統的輸入方式進行考察主要包括是否方便、效率、可靠性、誤操作保護等方面。對系統實際運行、響應速度進行實際測試&#xff0c;確定是否滿足…

sql 分組統計_leetcode-sql面試題十七篇精講合集

這可能是全網最干貨的sql講解系列文章。全系列共十七講。做了大量的知識點的拓展&#xff0c;涵蓋了sql的方方面面。歡迎關注點贊收藏&#xff0c;正在整理三年數據分析的點點滴滴。包括Excel、python、sql、power BI、各種分析模型框架。保證輸出最干的干貨。涉及知識點包括&a…

實時數據處理插件開發flume+kafka+storm:flume

有時間了再寫。。。。轉載于:https://www.cnblogs.com/wchb/p/5786582.html