docker容器資源限制與容器內(nèi)的dotnet應(yīng)用線程限制
docker容器資源限制
使用docker-compose管理容器
所以yml文件配置可以 增加
deploy:
resources:
limits:
cpus: "8"
memory: 4096M
reservations:
cpus: "0.5"
memory: 500M
- limits=> cpus: “8” //cpu利用率最大限制:建議設(shè)置成實(shí)際cpu核數(shù)的一半以上,如果單核時(shí),設(shè)置0.5即可
- limits=> memory: “4096M” // 內(nèi)存分配最大限制:按實(shí)際應(yīng)用分配
另:–pids-limit 限制容器最大可用線程數(shù),用于不可控的線程造成整個(gè)服務(wù)器掛掉,Tune container pids limit (set -1 for unlimited),在docker-compose.yml文件中不同版本格式不一樣。
https://forums.docker.com/t/how-to-set-docker-compose-pids-limit/127609
- 在2.0版本中,是一個(gè)大節(jié)點(diǎn)配置,與container_name同級(jí)
在portainer2.9.3也只支持如下配置
pids_limit: 10
- 在3.0以上版本且docker-compse版本要大于1.29以上才支持
deploy:
resources:
limits:
pids: 10
dotnet程序線程限制
#應(yīng)用編譯目錄下文件設(shè)置:xxx.runtimeconfig.json
{
"runtimeOptions": {
"tfm": "net5.0",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "5.0.0"
},
"configProperties": {
"System.Threading.ThreadPool.MinThreads": 8
}
}
}
configProperties=>最小線程數(shù):因?yàn)槭褂昧巳萜?,不便修改此文?,考慮到服務(wù)器一般是8核心上,默認(rèn)寫上8核。
對(duì)性能的影響
docker官方文檔說明 :https://docs.docker.com/engine/reference/commandline/run/


1.通過容器啟動(dòng)時(shí):由于對(duì)yml文件中的配置,limits理解錯(cuò)誤,設(shè)置了0.5,以為是cpu利用率的50%,沒發(fā)現(xiàn)是針對(duì)單核需要這樣設(shè)置,導(dǎo)致dotnet后臺(tái)程序線程數(shù)多了后,redis的一個(gè)使用場(chǎng)景經(jīng)常報(bào)timeout;
2.本地調(diào)試時(shí):不會(huì)報(bào)redis的timeout,也就是線程數(shù)可用,資源可用
原因
limits-cpu設(shè)置錯(cuò)誤
代碼質(zhì)量還是有問題,導(dǎo)致大量線程產(chǎn)生
dotnet程序默認(rèn)線程數(shù)設(shè)置問題
本地未發(fā)生線程不夠的問題,是因?yàn)槲幢蝗萜鞯南拗茀?shù)影響
部分微服務(wù)在使用redis時(shí),不合理的大key和熱key及正則key,造成redis自身也有性能瓶頸,進(jìn)而影響客戶端的timeout
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker?swarm快速部署redis分布式集群的詳細(xì)過程
這篇文章主要介紹了docker?swarm快速部署redis分布式集群,只需要通過docker-compose.yml文件和一個(gè)啟動(dòng)命令就完成redis分布式部署的方式,讓其分別部署在不同機(jī)器上,并實(shí)現(xiàn)集群搭建,需要的朋友可以參考下2022-10-10
Docker?Compose搭建Wordpress服務(wù)實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Docker?Compose搭建Wordpress服務(wù)實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
聊聊kubernetes1.20用containerd替換docker(shim)的問題
這篇文章主要介紹了kubernetes1.20用containerd替換docker(shim),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
Docker compose up -d與Docker restart的區(qū)別
本文主要介紹了Docker compose up -d與Docker restart的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
docker-compose如何定義一個(gè)橋接網(wǎng)絡(luò),并為該網(wǎng)絡(luò)配置一個(gè)IP地址池
在DockerCompose中定義橋接網(wǎng)絡(luò)并配置IP地址池,可以實(shí)現(xiàn)服務(wù)的自動(dòng)IP地址分配,通過定義網(wǎng)絡(luò)、指定子網(wǎng)范圍、設(shè)置網(wǎng)關(guān)和啟用自動(dòng)分配功能,可以輕松管理服務(wù)的網(wǎng)絡(luò)配置,確保IP地址在子網(wǎng)范圍內(nèi)且不與其他網(wǎng)絡(luò)沖突,以避免網(wǎng)絡(luò)沖突2025-01-01
Docker安裝mysql主從復(fù)制的實(shí)現(xiàn)步驟
MySQL主從復(fù)制是指數(shù)據(jù)可以從一個(gè)MySQL數(shù)據(jù)庫服務(wù)器主節(jié)點(diǎn)復(fù)制到一個(gè)或多個(gè)從節(jié)點(diǎn),本文主要介紹了Docker安裝mysql主從復(fù)制的實(shí)現(xiàn)步驟,感興趣的可以了解一下2024-03-03
在Docker中利用Tomcat快速部署web應(yīng)用的方法示例
這篇文章我們就來說一下怎么在docker中快速部署一個(gè)web應(yīng)用。文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01

