ref: https://lwn.net/Articles/853637/
如果對 SO_REUSEPORT 這個能夠提供網路服務吞吐量的 socket options 不陌生的話,那這篇文章強烈推薦看看。
本篇文章是從討論開啟 SO_REUSEPORT 這個選項會出現的一些行為以及可能可以怎麼做
最直得看的應該是留言區本身,有很多不同層級的討論,大家最愛講的 Google SRE 人也都出來分享自己的經驗了。
正常情況下,每個 TCP Port 只能被一個 process 給使用來聽取封包,但是對於一些網路重度使用的系統來說,就算讓該 process 將連線給分散到其他的 process 去處理,該 process 依然可能是系統的效能瓶頸。
Linux Kernel 3.9 後引入的 SO_REUSEPORT 參數就是為了解決這個效能問題而來的,這個參數允許多個 Process 同時使用一個 TCP Port,每當底層有一條新的連線請求時, Kernel 會從眾多的候選人之一中挑選一個可用來處理。
這種情況下,網路應用程式就可以專心處理連線工作,然後實務上同時執行多個 Process 即可。底層的 Kernel 會幫忙做連線的負載分配。
當眾多候選 process 其中之一掛掉了(可能是 crash,也有可能是有意的重啟), kernel 會注意到這個候選人要說掰掰,這候選人處理的所有 connection 都會被移除,比較糟糕的是其他待在 Accept-Queue 那些還沒被建立連線的連線請求也會一併被移除。
作者認為 Kernel 應該要有能力可以轉移那些 Accept-queue 中的連線到其他還工作的候選 process 下去處理,這樣使用者/Client 的連線就不會需要處理太多重連的問題。
文章後面都在探討可行的做法以及這個問題可能會導致什麼問題。
留言區滿熱鬧的,譬如說
1. 有人認為 server 重啟的情況實在太少見,有需要為這麽少見的情況導入這麼複雜的修改到 Kernel 中?
a. 有人回答使用 Let's Encrypt 你可能每幾週就要重啟一次。
b. Google SRE 回答其內部因為調整設定的緣由,幾乎無時無刻都需要重啟服務,不過這問題已經從別的層級去處理掉,所以修改 Kernel 對他們的用途不太大。
2. 有人提出 Nginx 本身有 live migration 的功能,可以將 fd 給轉移到其他的 process 去處理。
a. 有人提出這邊談的是 socket/connection 的層級,這些東西都還沒發生到 userspace process 同時也不是 userspace 應用程式可以接觸處理的。
b. 本文探討的是 bind(), accept(), listen() 這類型 function call 之間 kernel 會幫忙做的事情。
有興趣的別忘了閱讀留言區
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「linux 服務 重啟」的推薦目錄:
- 關於linux 服務 重啟 在 矽谷牛的耕田筆記 Facebook 的精選貼文
- 關於linux 服務 重啟 在 哪裡好吃哪裡去:神秘的水原誠 Facebook 的精選貼文
- 關於linux 服務 重啟 在 コバにゃんチャンネル Youtube 的最佳解答
- 關於linux 服務 重啟 在 大象中醫 Youtube 的最佳解答
- 關於linux 服務 重啟 在 大象中醫 Youtube 的最佳貼文
- 關於linux 服務 重啟 在 [問題] 想做服務監控自動重啟- 看板Linux - 批踢踢實業坊 的評價
- 關於linux 服務 重啟 在 [問題] slave DNS的named無法重啟restart - 看板Linux 的評價
- 關於linux 服務 重啟 在 Start, Stop, Restart Services (Systemd, systemctl, service, init.d ) 的評價
linux 服務 重啟 在 哪裡好吃哪裡去:神秘的水原誠 Facebook 的精選貼文
最近摸ESXi的機會還不少 不過由於之前比較少接觸...只好稍微做一下筆記, 不然很容易就忘了 以這篇來說 系統是CentOS 7, 不過相信對於多數的Linux應該差別不大吧...@@ 新增網卡的部分就不贅述了, 可以在guest OS啟動的狀態下新增, 不用重開機 首先是進入目錄找網路卡設定檔 cd /etc/sysconfig/network-scripts/ 就可以查看舊網卡編號與新網卡編號 如果檔案太多可以跟DOS一樣打dir就可以看到, ifcfg-ens開頭的就是了 輸入ip a也可以看到 下方可以看到雖然有ens33跟ens37兩張網卡, 可是只有ifcfg-ens33這個既有的網卡有設定檔 基本上, 如果你是新網卡的話, 應該是沒有設定檔的 所以要複製網卡設定檔 以這個指令為例, en192是舊的網卡新的則是ens224, 照著打就可以了 cp /etc/sysconfig/network-scripts/ifcfg-ens192 ifcfg-ens-224 因為每張網卡uuid不同, 所以要先用uuidgen產生新卡uuid uuidgen ens224 接著進新網卡設定內編輯 修改成新的網卡名稱並修改uuid vim /etc/sysconfig/network-scripts/ifcfg-ens224 改完後重啟網路服務應該就可以正常使用了 service network restart 若是覺得命令列太麻煩 也可以使用nmtui的圖形介面操作 但我發現, 這介面很難用XDDDD 自己斟酌吧...
https://mshw.info/mshw/?p=18176
linux 服務 重啟 在 コバにゃんチャンネル Youtube 的最佳解答
linux 服務 重啟 在 大象中醫 Youtube 的最佳解答
linux 服務 重啟 在 大象中醫 Youtube 的最佳貼文
linux 服務 重啟 在 [問題] slave DNS的named無法重啟restart - 看板Linux 的推薦與評價
小弟linux經驗粗淺到處碰到不少壁都拜求google大神可是這次找了又找資料實在認輸了... 重啟失敗的訊息如下[root@XXXX ~]# service named restart 正在停止named: ... ... <看更多>
linux 服務 重啟 在 Start, Stop, Restart Services (Systemd, systemctl, service, init.d ) 的推薦與評價
Find code and diagrams at: https://www.EliTheComputerGuy.comThere are 3 ways to manage services on ... ... <看更多>
linux 服務 重啟 在 [問題] 想做服務監控自動重啟- 看板Linux - 批踢踢實業坊 的推薦與評價
板上的大大們好
小弟我最近要做系統服務的死活監控
監控的項目包含
httpd snmp named nginx redis-server node mysqld mongod PM2 memcached
服務都有加上enable自動啟動
為了保險
寫了一隻script 確認運作期間的狀態
systemctl status $line | grep running && echo "$line OK" || echo "$line error
!"
但是考慮到服務hang住
或是重啟一直失敗之類的狀況
想請教除了我這種使用systemctl及service status的方式
或是telnet確認port狀態 , wget針對網頁服務測試
還有沒有別的方式呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.14.142
※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1510714119.A.9EA.html
我暫時不考慮使用
目前是有cacti 但是只有發告警mail和額外寫的簡訊傳送
沒有自動重新啟動服務
其實我有一點擔心mysql跟mongo可不可以這樣直接重啟
感覺出問題的時候要是自動重啟會導致資料完整性出問題
謝謝大大推薦一套好軟體
我覺得ansible也不錯
不過我還沒那麼熟練XD
我用root下了systemctl edit httpd之後內容是空白的這樣是正常的嗎?
這讓我很驚恐TT
我好害怕是我做了什麼把它內容全部殺光了
※ 編輯: chabaterii09 (122.116.14.142), 11/15/2017 13:57:25
等等有時間繼續弄監控項目來試試
感謝大大分享技術
自從我搞掛了好幾台ubuntu主機後 我乖乖的回歸cent了XD
※ 編輯: chabaterii09 (122.116.14.142), 11/15/2017 15:22:23
不過因爲工項吃緊
所以我還是選擇寫shell省去研讀的時間XD
真的覺得以前不好好專研套件和英文現在真的很辛苦
※ 編輯: chabaterii09 (223.136.41.162), 11/28/2017 20:50:47
... <看更多>