1 回答

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果您啟動(dòng)大量線程,它們絕對(duì)會(huì)被調(diào)度到多個(gè)內(nèi)核。這個(gè)答案只是關(guān)于返回正確的值。許多“線程池”啟動(dòng)的線程數(shù)與該方法返回的線程數(shù)一樣多:它應(yīng)該返回可用的內(nèi)核數(shù)。Runtime.getRuntime().availableProcessors()
似乎有兩個(gè)主要的解決方案,兩者都不是理想的:
在任務(wù)定義中設(shè)置參數(shù)。例如,如果您有 2 個(gè)內(nèi)核,并且想要同時(shí)使用它們,則必須在任務(wù)的定義中進(jìn)行設(shè)置。這不是很方便,原因有兩個(gè):
cpu
"cpu":2048
如果選擇更大的實(shí)例,則必須確保更新此參數(shù)。
如果您希望同時(shí)運(yùn)行兩個(gè)任務(wù),這兩個(gè)任務(wù)都可以偶爾使用所有核心進(jìn)行短期活動(dòng),AWS 不會(huì)在具有 的 2 核系統(tǒng)上安排兩個(gè)任務(wù)。它說從CPU的角度來看,VM是“滿”的。這違背了分時(shí)(Unix等)的理念,即每個(gè)任務(wù)都采用它需要的東西(例如,想象一下,在臺(tái)式PC上,如果你在雙核計(jì)算機(jī)上運(yùn)行Word和Excel,而Windows不允許你啟動(dòng)任何其他任務(wù),理由是Word可能需要所有一個(gè)核心,而Excel也可能這樣做, 因此,如果另一個(gè)程序可能同時(shí)需要所有內(nèi)核,則沒有足夠的內(nèi)核。
"cpu":2048
在 JDK 10 及更高版本中使用 JVM 選項(xiàng),如此處所述。這并不方便,因?yàn)椋?code>-XX:ActiveProcessorCount=xx
如上所述,如果您更改實(shí)例類型,則必須更改該值。
我寫了一篇更長(zhǎng)的博客文章,在這里描述了我的發(fā)現(xiàn):https://www.databasesandlife.com/java-docker-aws-ecs-multicore/
添加回答
舉報(bào)