2018-06-25

解決無法使用 IIS Manager 及 AppCmd.exe 列出 Worker Processes 的 Request

最近監控 IIS 上的 application 時發現部份 server 無法列出 request queue,以我的經驗一般情況下並不會特別去看 request queue 的內容,一旦需要看就一定有 server 或是 application 警示出現,如果看不到內容對於除錯就少了可以快速定位發生原因的手段,也就增加偵錯的時間

原本以為是 IIS Manager GUI 的問題,改用 AppCmd.exe 來看內容也出現錯誤,就來看看如何解決吧

2018-06-18

WinDbg 設定 symbol file path 的四種方法

有一陣子沒用 WinDbg 來進行偵錯,再次感受到年紀的影響,指令忘得很乾淨XD 當然 WinDbg 的指令對我而言本來就沒有記得很牢,忘得快也是意料中的事,剛好最近用到的機會高一些,每次查指令也滿花時間的,所以趁著連假時間做個紀錄以利之後追查問題可以再加快速度。

首先就來看看如何設定 symbol file path ,雖然 symbol file path 沒有特別設定也可以正常使用,不過每次都重新下載 symbol file 既耗時又浪費網路頻寬,因此透過設定 symbol file path 讓已經下載過的 symbol file 可以重用讓偵錯流程可以再加快,把握時間找出真正的問題

2018-06-16

Docker Push 出現 405 Method Not Allowed 錯誤?!

之前筆記 解決 Docker build pip install fail 提到在練習 Kubernetes 過程中執行 docker build 指令時會出現 pip install fail 的 error,問題發生原因是 docker 的 DNS 解析不正確造成的,解決方式是設定 Docker 的 DNS。

完成 docker build 產生的 image 只會存在執行指令的機器上,除非手動打包 image 至其他 Kubernetes Node 上,否則在執行 Kubernetes 部署時會出現找不到 image 而出現部署失敗的錯誤訊息,但 Kubernetes Node 可以動態增減,手動複製並沒有真正解決問題,透過將 image push 至 registry 才可以一勞永逸,只是想不到一個 docker push 也讓我卡關了XD 就來看看問題發生原因及解決方式吧

解決 Docker build pip install fail

近期工作之餘將部份時間花在學習 Kubernetes 上,過程中嘗試透過 Dockerfile 建立 pyhon application 的 image 來部署至 Kubernetes 中打算用來做一些實際應用情境的演練,原以為會卡在 Kubernetes 的網路設定上,想不到我太過樂觀,連第一步的 Dockerfile 都 build fail,如果沒有 image 更不用提建立 container 及部署至 Kubernetes

因為 Kubernetes 相關知識尚未上手,非常容易踩雷碰壁,為此我還重建了好幾次 VM 來反覆驗證測試,過程中也遇到好幾次 Dockerfile pip install fail 的狀況,每次都要重新查設定方式,於是就來筆記一下囉

2018-06-10

C# 搭配 MongoDB 的連線寫法

最近有個新專案需要儲存 json 格式的資料,MongoDB 是考慮的選項之一,評估的過程中才發現我沒有 C# 連線 MongoDB 的使用筆記,雖然專案時程非常急迫需求假日額外加班處理,原本很認份地要開工但仔細想想工作畢竟是工作就算再急也不該為了工作失去熱誠,雖說我自己常常額外加班不過都是出於對程式熱誠,一旦只是為了對專案有所交待,我愈來愈說服不了自己,所以決定在休假期間放下時程的考量做自己覺得開心的事

立馬就來紀錄一下 MongoDB 的連線寫法吧

2018-06-07

C# 連線 Oracle 出現 ORA-01000: maximum open cursors exceeded

同事負責的系統在 production 環境出現異常問題:原本系統已經運作了一段時間,某天突然出現 ORA-01000: maximum open cursors exceeded 造成相關功能無法運作,經過 IIS reset 後又可以正常使用,發生頻率不定,只是出現異常的間隔有日趨縮小的現象,造成問題的程式雖然已經找到也完成了修正,但隱含在背後的真正原因還是令我相當好奇,所以多花了不少時間來進行驗證及測試,過程中學到了許多東西一定要好好紀錄才行

2018-06-06

CentOS 7 Docker 無法連線 Docker daemon?!

同事想在 VirtualBox 上建立 CentOS 7 虛擬環境,並在 VM 中使用 Docker,在安裝 Docker 時一如往常相當順利直到實際建立 container 時卻遇到無法連線:Cannot connect to the Docker daemon at unix:///var/run/docker.sock 的提示訊息,重啟 Docker service 時也失敗並得到新的錯誤:Job for docker.service failed because the control process exited with error code.

解決這個問題的過程中學到以前不知道的內容與設定,順手紀錄一下備忘

2018-06-05

如何避免多個 EntityFramework 6 instance 造成資料覆蓋問題 (DB First - Oracle)

之前筆記 如何避免多個 EntityFramework 6 instance 造成資料覆蓋問題 (DB First - SQL Server) 提到 Entity Framework 使用上的限制,也紀錄如何透過在 SQL Server 的 table 上加入 rowversion 的欄位並將 Entity Framework 上該欄位的 Concurrency Mode 改為 fixed 就可以避免修改資料後遭其他人覆寫的狀況,那相同問題當然也會發生在 Oracle 上,就來看看 Oracle 該如何解決吧

2018-05-31

不需安裝 Oracle client 使用 C# 搭配 Oracle.DataAccess 連線 Oracle

之前公司電腦因為註冊檔毀損,讓電腦上的 Oracle client 一直無法正常運作,就算是重灌多次 Oracle client 還是一樣無法正確運作就連移除功能也壞了,所以在 local 開發時我都會暫時將 Oracle.DataAccess 改為 Oracle.ManagedDataAccess,在多數情況下都可以正常運作,真的非得用到 Oracle.DataAccess 就透過 VM 來開發,實際上遇到問題的次數一隻手數得出來,加上近期已經很少用到 Oracle.DataAccess 也就沒有特別想解決 Oracle client 無法正常運作的問題,直到最近有個困擾已久的 issue 一直沒有找到真正原因,透過 LINQPad 模擬時一直搞不定,讓我有了不得不解決的動力

憑心而論,如果沒有其他考量,建議升級為 Oracle.ManagedDataAccess,原生就不需要 Oracle client,如果你還有舊系統的相依無法搞定,就來看看如何可以不安裝 Oracle client 並使用 Oracle.DataAccess 連線吧

2018-05-27

如何避免多個 EntityFramework 6 instance 造成資料覆蓋問題 (DB First - SQL Server)

前後台分離且共同存取 table 或是同時有多台機器甚至是修改資料不經由 EntityFramework 都是平常開發上很常見的情境,但這些操作卻可能因為 EntityFramework 的 cache 機制而出現資料不一致的現象,最近同事疑似遇到類似問題,雖然立馬就想到解決方式,但已經好一陣子沒用,為避免說錯就自己先測試一下並紀錄紀錄囉

要確保資料的完整及一致性,做法有好幾個包括 DB First、Code First、DB table setting 首先就從最簡單的做法:DB First + table setting + SQL Server 看起

讓 log4net 收到指定錯誤 Level 發送 mail

平常我自己本身慣用的 log 套件是 nlog,主要原因是因為設定相對較簡潔,加上多年前看過的效能比較 - Benchmarking 5 popular .NET logging libraries 結果是 nlog 效能較好,不過前陣子看到另一篇文章 - .Netcore之日誌組件Log4net、Nlog性能比較 重新比較 nlog 與 log4net 的效能則得出 log4net 效能較好的結論,所以針對兩者效能問題我想自己動手比較看看,再下結論

在取得效能比較結論前之前,因緣際會下需要調整其他同事的專案,剛好是使用 log4net,所以透過這個機會紀錄一下使用方式

BTW:原本想要大致紀錄一下 log4net 的相關設定及用法,但文件愈看愈多卻也愈搞不清楚設定細節,決定改天有需要時再另外紀錄,今天就只紀錄如何讓 log4net 發出 mail 囉

2018-05-20

從 DLL 中建立 PDB 檔

這是在追查某個 dll 可能的潛在效能問題時,延伸出的問題,一般情況下我們透過 NuGet 下載套件時大多都沒有包含 PDB - Program DataBase file 檔,讓追查錯誤時少了一個好用有效的利器,所以才興起從 dll 取得 pdb 的念頭,google 後在 stackoverflow 上看到可以透過 dotPeek 來製作 PDB,立馬動手實驗看看並紀錄一下

Windows 慣用者如何在 Red Hat Enterprise Linux 7.5 (CentOS ) 上使用 kubeadm 架設 Kubernetes (K8s)

之前筆記 Windows 慣用者如何在 Ubuntu Server 16.04 LTS 上使用 kubeadm 架設 Kubernetes (K8s) 紀錄到如何在 Ubuntu 上使用 kubeadm 建立 Kubernetes cluster,考量到公司使用的 linux 都為 CentOS (RHEL) 所以趁著印象還新鮮時趕緊紀錄一下在 CentOS 上架設 Kubernetes 的做法

2018-05-19

使用 EntityFramework Insert 大量資料

這是參加 黃忠成老師的 Entity Framework 全線開發 課程時他提出讓學員思考的問題:如何使用 EntityFramework Insert 大量資料,我當下立馬想起印象中以前同事也被這個問題困擾過,而我自己本身則沒有遇到相同困擾,剛好透過這個機會來了解其中的差異也順便嘗試看看不同解法

立馬動手模擬看看,親身體驗實際情況吧

2018-05-18

在 LINQPad 中使用 nlog

LINQPad 的便利性我想不必我多提,而我自己常常在 LINQPad 上進行主要核心流程功能的 poc 開發,或是將特定功能從原系統抽離以加速功能驗證,今天遇到的情境也是如此,希望在不改動原本程式的主架構下略過其他不必要的系統驗證授權部份,完整保留原本的 log 行為與執行流程並且順利完成程式的調整,這樣一來功能完成也可以與原系統無縫接軌了,但現實常常與理想會有些距離,就來看看如何在 LINQPad 中正常使用 nlog 吧