一個詭異容器內的tcp_max_tw_buckets核心引數的問題
背景
自己端午節前一直嘴瓢, 一直在絮叨
更換了底層作業系統一定要對中介軟體進行詳盡的效能測試.
結果節後第二天就遇到了非常詭異的問題.
上午以為是國產化銀河麒麟的問題.
因為CentOS7的確沒有類似的問題.
但是晚上飛機到濟南後, 感覺不太放心.
想著能夠驗證一下. 但是因為docker hub 被牆
我這邊只能使用比較簡單的映象進行驗證
驗證思路
在centos7,centos8 以及銀河麒麟, openeuler 的多種作業系統上面
執行 kylinv10sp2的 x86 映象檢視核心引數資訊.
然後驗證是否有所差異
具體基本
docker load -i kylinv10sp2_x86.tar.gz
docker run -it kylinv10sp2_x86:xxx bash
sysctl -a |grep tw
sysctl -a |grep local_port
進行簡單檢視.
測試結果
宿主機系統 |
宿主機tw_buckets |
容器內tw_buckets |
宿主機local_port |
容器內local_port |
CentOS7 |
5000 |
無引數 |
10000-65000 |
32768-60999 |
CentOS8 |
262144 |
262144 |
10000-65000 |
32768-60999 |
銀河麒麟v10sp3 |
5000 |
131072 |
9000-65500 |
32768-60999 |
OpenEuler |
262144 |
131072 |
9000-65500 |
32768-60999 |
Ubuntu2404 |
262144 |
262144 |
32768-60999 |
32768-60999 |
簡單結論
懷疑這裡兩個引數跟核心版本有著極大的關係
懷疑容器執行時內的tw和local_port range的引數是受限於特定核心版本的預設值.
centos7 使用的是 3.10的核心. 容器執行時 獲取不到這個 tw_buckets 的引數值.
centos8 使用 4.18的核心, 容器執行時 能夠獲取到 26萬的預設值.
銀河麒麟和openeuler 分別是 4.19和 5.10的核心, 獲取的是 13萬的預設值.
ubuntu採用的是 6.8的核心, 數值就是 26萬.
理論上我升級一下centos7的核心也會出現 tw_buckets 到達26/13萬的情況.
現階段看起來, 容器的執行不完全是build once run everywhere
容器執行時也收到不同核心版本的影響.
認為還是需要有一個更高層級的引數設定來影響容器的執行時.
關於測試與驗證
JDK的引數, 系統核心的引數, 容器執行時的引數
各種各種的引數不盡相同, 建議還是需要完善進行驗證.
映象大幾十兆認為並不是很嚴重的問題.
增加一下必要的debug和設定工具非常重要.
不能為了減少幾十兆的空間, 就使用精簡版.
出現問題之後, 如果不是像BATJ 那樣的大量核心高手在
很容易導致長時間的系統不可用.
理想總是很美好, 現實總是很骨感.
為了生活,不能太骨感
今天有點累, 明天繼續總結動態設定容器內的核心引數.