發表文章

使用WinDbg偵錯CPU使用率過高原因

圖片
昨天同事回報,主機上IIS 的CPU不定時衝高50~99%。本想說dump w3wp.exe回來使用WinDbg偵錯。但它間歇性的衝高,一下子就回復了,所以很難dump到在CPU衝高的狀態。幸好微軟提供了針對此狀況的dump工具「Procdump」,用來監控特定的process,當超過CPU設定值後自動dump。
Procdump Download & Setup 下載路徑 教學文章 安裝後,在開始功能列會看到32及64位元的ICON 使用管理者執行cmd -ma 包含所有ram、thread的信息 -r 讓目前的w3wp可以在不用暫停的情況下dump,缺點是會花費較長的時間dump 17488 為w3wp.exe的Process Id -c 50 cpu超過50% -s 3  持續超過3秒 -n 工具退出前要抓取多少個dump文件,例:設-n 2 代表會等觸發了2次dump文件後關閉監控
D:\Downloads\Procdump\procdump.exe -ma -r -c 50 -s 3 -n 1 17488 -o D:\dumpfile

WinDbg Download & Setup Dump的檔案,可以透過WinDbg分析除錯 下載路徑 教學文章
只勾選一個Debugging Tools for Windows
WinDbg Command
1.先載入dumpfile
2.設定路徑,由微軟網站下載分析需要的Symbol檔
.sympath srv*D:\Temp\debug\RTX64_SYMBOLS*https://msdl.microsoft.com/download/symbols

3. 指定顯示完整Symbol下載資訊 !sym noisy
4. 載入 CLR 偵錯相關模組 .cordll -ve -u  -l
5. 找出佔用 CPU 最多的 Thread,本案例中,Thread 29為使用最長的時間 !runaway
將偵錯對象切換成 Thread 29, ~29s

6.  使用 !clrstack 列出 Thread 29 的 Callstack,紅框為cpu 會衝高的測試程式。 !clrstack

其他 以上1~5每次偵錯dumpfile都要執行一次。 dumpfile 觸發時,所有的執行緒將被暫停10~50秒,直到 dump完成。 -r 參數可以不用暫停…

Jenkins-更新Slack 2.1.5後無法發送

圖片
昨天更新Slack Plugin後,無法收到通知,原因為2.1.5後,設定要重新輸入,並且原本的Integration Token已移除,如下圖


修改方式
1.到Credentials 加入驗證資訊 Kind : Secret text Sercet : 輸入 Slack 提供的Token
2.在Configure/Global Slack Notifier Settings 選擇剛建立的Credential 

IIS網站更新後第一次執行異常緩慢

測試主機的網站,最近只要程式有更新,第一次執行會異常得緩慢.....要花費約10分鐘之久!真是有夠誇張。將Pooling回收測試,只要20秒。研判應該是跟程式在第一次執行時編譯有關。
為先証明程式本身是沒有問題的下,我又在IIS建立另一個網站來試,測試結果只要30秒.....昏,同一份程式在同一主機下的不同Site,會有不同的結果。在查詢相關文章後,才知道是IIS Temporary ASP.NET Files目錄過大的問題。
解決方式 刪除暫存目錄。一開始在檔案總管要刪除,但目錄太大,進度視窗跑不完。所以改用如下的PowerShell刪除,並使用強制刪除及忽略參數(太久沒清,執行50分鐘)。此方式可以不用在停止IIS的狀況下刪除檔案。
Get-ChildItem "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET  Files\" -Recurse | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
ps:為避免日後再發生,將它設定到排程在假日時執行,一勞永逸。
參考連結 https://www.itread01.com/content/1501827610.html

Jenkins - Android安裝建置環境

圖片
最近開發第二個Android專案,第一個手動建置混過了,第二個再這樣就太混了=.=,還是得乖乖上Jenkins去建置才對。以下為安裝及初步成功建置的記錄
JAVA SDK (Koltin需要) Java SE Development Kit 8u191 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html jdk-8u191-windows-x64.exe Android SDK Tools 安裝 SDK Tools https://developer.android.com/studio/ sdk-tools-windows-4333796.zip 解壓到:C:\AndroidSdk 使用command 安裝所需要的plaform 切換路徑:C:\AndroidSdk\tools\bin sdkmanager "platforms;android-20" Jenkins 設定 Global Tool Configuration/ 安裝Gradle Configure / 設定 Android Home SDK位置 此位置為上方Android SDK Tool解壓縮的位置 建置apk:Invoke Grdle Scrpt 只建置 Release clean assembleRelease  加上Flavor=assemblePrdRelease  or assembleQasRelease  使用Pipleine 
stage ('Build') { steps { bat 'gradlew clean assembleRelease'   } } 安裝外掛:File Operation 複製apk到部署主機
建置錯誤排解 Lint found errors in the project; aborting build. 解決方式:在grdle設定加入 lintOptions {     abortOnError false }
相關參考 https://www.jianshu.com/p/38b2e17ced73
https://www.jianshu.com/p/1d6a63276db4
https://blog…

git SSH學習

圖片
大部份的Git Server都有提供SSH Clone(透過命令Clone)專案的方式,先決條件是本地要先建位好SSH Key,以下為使用github帳號建立
如何建立SSH 1.使用Git bash ssh-keygen -t rsa -b 4096 -C "kimxinfo@gmail.com" 此步驟會要求你輸入2次密碼,保持空值也可以 (目前使用kimxxx) 另外要求你儲存的位置:保持空值的話,預設:C:\Users\Kim\.ssh\id_rsa
2.加入代理 eval $(ssh-agent -s) ssh-add ~/.ssh/id_rsa
將SSH Key 加到Github上
1.將產生的key複製到剪貼簿 clip < ~/.ssh/id_rsa.pub
2.新增SSH到Github https://github.com/settings/keys

2.1 若用的Azure DevOps(VSO),到個人帳號/Security/SSH public keys
測試用SSH Clone的方式 到Github任一個Public的專案,在右方的Clone or download切換到SSH
開啟Command,輸入如下,即可以將程式Clone回來 git clone git@github.com:kimx/SqlLiteLab.git
若你的key有輸入密碼,這裡會提示你要輸入
多組SSH Key 應用情境,例如:Github及AzureOps各建立了一組,當你在Clone時預設會用第一個建立的id_rsa,若要用對應不同的SSH Key,參考如下: 第一個為github.com,第二個則是AzureOps Host github.com     HostName github.com     User kimxinfo@gmail.com     IdentityFile ~/.ssh/id_rsa Host ssh.dev.azure.com     HostName ssh.dev.azure.com     User kim@bud4.net     IdentityFile ~/.ssh/bud4net 將以上內容複製,存成檔案:C:\Users\[user]\.ssh\config

參考連姞 https://blog.ala…

Jenkins - AzureDevOps簽入後觸發工作-git

圖片
闗於在Azure DevOps簽入即觸發建置,之前有寫過一篇是使用TFS的方式。最近公司要改成使用git的方式,所以再來演練記錄一下。
Azure DevOps設定 1.Clone repository 取得https的網址
2.建立Personal Access Token 此Token為Jenkins checkout 所使用
3.新增Service hook-簽入及建置工作 Project Settings>Service hooks 
選擇要Trigger的Repository及Branch
這邊的User Name 及API Token 使用的是在Jenkins上建立的 ps:Integration Level 要選 Build-in Jenkins API,這應該是自架Jenkins的選項
Jenkins設定
原始檔控制,選擇git並輸入網址及加入剛建立的git Credentials的帳號密碼
參考來源 https://docs.microsoft.com/en-us/azure/devops/service-hooks/services/jenkins?view=vsts

將舊版 .NET Framework 應用程式移轉至 Windows 容器

圖片
昨天去Azure Tech day聽完課,回來試玩一下,將現有的.Net framework專案移轉到Docker.
Setup 1.安裝Dock for Window https://www.docker.com/products/docker-desktop
2.切換完後,在功能圖示按右換,切換至Window Container

移轉至Window Container 在目標專案加入Container支援


加入後即可看到產生的Dockfile及Dock compose
按F5測試後,原本IIS Express 的localhost,變成Run在Docker上的ip http://172.25.228.209/