原创 linux服務器性能調優(udp爲主)

udp的好處很明顯,效率高,減少了建立連接的流程,減少了報文頭的佔比,也減少了維護連接的開銷。缺點就是不穩定,會丟包。還有就是由於udp的高效,導致用於udp的一些應用開發,併發都比較大,更容易丟包。 io複用 SO_REUSEADDR S

原创 向進程發送信號

如果我們寫了一個程序,監聽特定信號,完成某些動作,如何向進程發送這個系統信號呢。 kill -SIGUSR1 1234 向進程id是1234的發送SIGUSR1信號 kill並不是殺死某個進程,只不過默認會發送一些中斷信號,也可以通過它發

原创 golang 傳遞編譯參數

有時候想根據不同的參數編譯不同的內容,可以在編譯命令中增加參數。 go build -ldflags -X main.mytest=abc 在程序main函數前定義對應的變量 var mytest = "" 就可以直接使用拿到abc

原创 golang println與fmt.Println性能差距

具體原因和底層細節沒有仔細看,不做描述,只說一下結果。循環獲取UDP的socket數據,滿速情況下(每個數據包獲取後輸出一下當前接收數據包總數),println比fmt.Println慢了1倍。比如發送10萬個包,fmt.Println可以

原创 golang io複用端口監聽

開發高性能server的時候,不可避免的需要接觸到io複用——多個線程或者進程,可以創建一個或多個監聽程序(監聽同一個地址和端口),並且可以多個線程接收數據,讓系統進行負載均衡。不同系統下有不同的模型:windows的iocp,linux的

原创 goland打開配置golang工程

有一個golang工程,沒有go.mod,用goland打開,配置編譯,會提示沒有go.mod,但是增加了go.mod,又提示工程目錄下引用的包找不到。 去掉go.mod 先把go.mod關閉 把工程目錄加入GOPATH並且去掉系統的GO

原创 go.mod exists but should not

這是因爲配置的GOPATH路徑下有go.mod,也就是這兩個不能在同一個目錄下

原创 warning: GOPATH set to GOROOT has no effect

因爲配置GOPATH與GOROOT目錄相同,所以報警,可以專門創建一個目錄設置GOPATH。 GOROOT是下載安裝go的目錄,然後在環境變量PATH中配置好安裝go目錄下的bin目錄,再創建一個目錄配置爲GOPATH即可

原创 golang struct interface 方法

有一個結構體 type mystruct struct { a int } 如果想爲這個結構體增加一個方法,就類似於C++或者Java的類一樣,有成員變量,也有成員函數,怎麼實現呢?由於go沒有類的概念,所以提供了一種方案。 func

原创 sFlow sampled flow協議解析

sflow是一種用來統計網絡流量的採樣方案。 採樣方式 按照包數採樣 比如採樣率是1000,每經過一個包,計數器減一,如果計數器爲0,採樣當前的數據包,然後計數器重置。 隨機採樣 由於按照固定包數採樣,有可能會採到有規律的包,影響採樣有效性

原创 PostgreSQL協議解析

在訪問pg數據庫時,需要客戶端按照規定的協議訪問。所有的數據庫都有一套自己的協議,所以可以開發各種語言對應的鏈接庫,也可以根據協議自己開發一套。 startup 啓動階段 建立連接(三次握手)之後,肯定需要一個認證階段,用來確保客戶端有訪問

原创 git cherry-pick 是一個合併提交但未提供 -m 選項

git cherry-pick時,如果指定的是一個合併結點,會報這個錯誤,因爲git也不知道你想要合併過來哪些內容,需要指定-m參數,告訴git合併多少。 這個參數從1開始,向下排序,正常我們指向cherry-pick一個,所以寫成git

原创 linux開啓vmware混雜模式

混雜模式是指宿主機上開啓網卡的混雜模式,如果虛擬機安裝了流量監控軟件,想要監控到宿主機,需要開啓網卡混雜模式。 chmod a+rw /dev/vmnet0 就是給你當前運行vmware的用戶增加vmnet0的讀寫權限,也可以爲所有用戶增

原创 opensuse卸載依賴包

zypper rm --clean-deps <package name>

原创 python bytes.fromhex()

如果我們想把'abcdef'轉成b'\xab\xcd\xef',可以使用bytes.fromhex() bytes.fromhex('abcdef')