成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

容器隔離性帶來的問題--容器化Java應(yīng)用比虛機(jī)啟動速度慢

王陸寬 / 1415人閱讀

摘要:查看了容器和虛機(jī)所在主機(jī)的頻率后,進(jìn)一步證實了濤哥的猜想,頻率確實有將近一倍的差異。在懷疑是隔離引起的問題后,對比了虛機(jī)和容器中進(jìn)程的線程數(shù),發(fā)現(xiàn)確實有比較大的差異。

引發(fā)的問題

同等配置下,虛機(jī)中的java 服務(wù)的啟動速度,要比容器快很多(將近兩倍)

實測數(shù)據(jù)

在同是1c1g的虛機(jī)和容器中,虛機(jī)啟動時間大概在1min20s,容器啟動時間大概在2min40s。

排查思路 懷疑網(wǎng)絡(luò)

最開始懷疑是網(wǎng)絡(luò)問題,因為業(yè)務(wù)依賴外部數(shù)據(jù)庫,在容器和虛機(jī)中ping、telnet外部數(shù)據(jù)庫,能通而且延遲差不多。

咨詢熟悉java的小伙伴,說 spingboot可能有潛在的外部網(wǎng)絡(luò)請求延遲(如請求Spring官網(wǎng)等),請求可能多次失敗超時,不影響服務(wù)啟動,但會影響啟動時間。通過在虛機(jī)和容器中抓包,抓到了一個外部域名,但是虛機(jī)容器中都可以正常聯(lián)通。包括修改域名服務(wù)器,都沒有效果

硬件差異

排查問題陷入僵局后,咨詢小伙伴的建議,濤哥提出是不是因為硬件差異導(dǎo)致的?這是個新的思路,之前只關(guān)注了軟件層面的。

google了下,確實有人遇到了因為cpu頻率的差異,導(dǎo)致虛機(jī)和容器中業(yè)務(wù)性能的差異。查看了容器和虛機(jī)所在主機(jī)的cpu頻率后,進(jìn)一步證實了濤哥的猜想,cpu頻率確實有將近一倍的差異。根據(jù)文章中提供的解決辦法,通過修改cpu的工作模式,從
powersave到performance,來提高cpu的工作頻率。命令如下:

# 查看cpu頻率
# lscpu    
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                48
On-line CPU(s) list:   0-47
Thread(s) per core:    2
Core(s) per socket:    12
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 79
Model name:            Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
Stepping:              1
CPU MHz:               2494.133
CPU max MHz:           2900.0000
CPU min MHz:           1200.0000
BogoMIPS:              4389.67
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
···
# 查看cpu工作模式
# cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
powersave
powersave
...

# 修改cpu工作模式
# cpupower -c all frequency-set -g performance
# 查看每個cpu的頻率
# grep -i mhz /proc/cpuinfo
cpu MHz        : 1870.495
cpu MHz        : 2348.156
cpu MHz        : 2160.900
cpu MHz        : 1918.896
··· 

在修改完cpu工作模式后,cpu MHz確實有很大的提高,但是實測容器中業(yè)務(wù)啟動時間并沒有預(yù)期的和虛機(jī)中的速度一樣,只有一點優(yōu)化??磥韈pu MHz不是決定的影響因素。

后來詳細(xì)查了一下,cpu MHz是個不斷浮動的素質(zhì),cpu性能要看CPU max MHz和工作模式。兩臺宿主機(jī)的cpu型號是一致的,改動cpu工作模式影響有限

容器對java的隔離缺陷

在之前容器化java業(yè)務(wù)的時候就遇到了OOMKilled,以及Runtime.getRuntime().availableProcessors()獲取的cpu核數(shù)問題。當(dāng)時通過引入了lxcfs,以及替換jvm libnumcpus.so文件,通過環(huán)境變量注入cpu核數(shù)來解決這個問題。

在懷疑是隔離引起的問題后,對比了虛機(jī)和容器中java進(jìn)程的線程數(shù),發(fā)現(xiàn)確實有比較大的差異。命令如下:

# 虛機(jī)中
···
[root@data-message-b69c847c7-sjlrx /]# cat /proc/136/status |grep Threads
Threads:    42
[root@data-message-b69c847c7-sjlrx /]# cat /proc/136/status |grep Threads
Threads:    42
[root@data-message-b69c847c7-sjlrx /]# cat /proc/136/status |grep Threads
Threads:    42
[root@data-message-b69c847c7-sjlrx /]# cat /proc/136/status |grep Threads
Threads:    42
[root@data-message-b69c847c7-sjlrx /]# cat /proc/136/status |grep Threads
Threads:    42
[root@data-message-b69c847c7-sjlrx /]# cat /proc/136/status |grep Threads
Threads:    42
···


# 容器中
···
[root@data-message-79bb65797d-ffsfb /]# cat /proc/42/status |grep Threads
Threads:    74
[root@data-message-79bb65797d-ffsfb /]# cat /proc/42/status |grep Threads
Threads:    74
[root@data-message-79bb65797d-ffsfb /]# cat /proc/42/status |grep Threads
Threads:    76
[root@data-message-79bb65797d-ffsfb /]# cat /proc/42/status |grep Threads
Threads:    76
[root@data-message-79bb65797d-ffsfb /]# cat /proc/42/status |grep Threads
Threads:    76
···
解決辦法

使用包含了cpu-online /sys/devices/system/cpu/online的lxcfs(我們之前引入的lxcfs還未支持cpu-online)

在引入新版lxcfs cpu-online后,線程數(shù)下降明顯,啟動速度有明顯的改善,達(dá)到和虛機(jī)同等水平。

LXCFS 3.1.2 has been released

Virtualize /sys/devices/system/cpu/online

LXCFS now also partially virtualizes sysfs. The first file to virtualize is /sys/devices/system/cpu/online per container.

結(jié)論

容器java進(jìn)程啟動慢的最終原因,還是容器的隔離性不夠,導(dǎo)致jvm啟動過多的線程,線程頻繁切換帶來的性能下降。目前使用包含cpu-online的lxcfs能解決這個問題。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75961.html

相關(guān)文章

  • 有贊容器實踐

    摘要:有贊容器化方案我們的容器化方案基于和,下面介紹一下我們在各個方面遇到的問題以及解決方案。不過對于上線來說,需要整個運維體系來適配容器化,比如監(jiān)控發(fā)布日志等等。 前言 容器化已經(jīng)成為一種趨勢,它可以解決很多運維中的痛點,比如效率、成本、穩(wěn)定性等問題,而接入容器的過程中往往也會碰到很多問題和不便。在有贊最開始做容器化是為了快速交付開發(fā)測試環(huán)境,在容器化的過程中,我們碰到過容器技術(shù)、運維體系...

    songze 評論0 收藏0
  • 有贊容器實踐

    摘要:有贊容器化方案我們的容器化方案基于和,下面介紹一下我們在各個方面遇到的問題以及解決方案。不過對于上線來說,需要整個運維體系來適配容器化,比如監(jiān)控發(fā)布日志等等。 前言 容器化已經(jīng)成為一種趨勢,它可以解決很多運維中的痛點,比如效率、成本、穩(wěn)定性等問題,而接入容器的過程中往往也會碰到很多問題和不便。在有贊最開始做容器化是為了快速交付開發(fā)測試環(huán)境,在容器化的過程中,我們碰到過容器技術(shù)、運維體系...

    EscapedDog 評論0 收藏0
  • 容器-Docker介紹

    摘要:容器作為一類操作系統(tǒng)層面的虛擬化技術(shù),其目標(biāo)是在單一主機(jī)交付多套隔離性環(huán)境,容器共享同一套主機(jī)操作系統(tǒng)內(nèi)核。與其它容器平臺不同,引入了一整套與容器管理相關(guān)的生態(tài)系統(tǒng)。每個容器都是相互隔離的保證安全的平臺。 導(dǎo)讀:本文章對Docker技術(shù)進(jìn)行了介紹,闡述了Docker的技術(shù)發(fā)展歷程、容器與虛擬機(jī)的差異、Docker原理、特點、Docker三組件和Docker帶來的影響,為我們進(jìn)一步理解D...

    李增田 評論0 收藏0
  • 容器還是虛擬機(jī)?企業(yè)云建設(shè)路線選擇難題

    摘要:所以,無論是容器還是虛擬機(jī),都可以實現(xiàn)彈性伸縮,其核心就是要注意狀態(tài)和數(shù)據(jù)的分離和共享問題。通常來說,穩(wěn)態(tài)的應(yīng)用適合虛擬機(jī),敏態(tài)的應(yīng)用容器更勝一籌,但也不完全都是這樣。筆者案前陣子與行業(yè)內(nèi)的朋友聊到企業(yè)云的建設(shè)路線選擇事宜,在涉及到虛擬化和容器技術(shù)的選擇議題上討論的比較多,基于當(dāng)前容器技術(shù)在某些場景中有替代虛擬化的趨勢,市場上也聽到一些聲稱容器可能會完全取代虛擬化的聲音。我個人也在思考,這兩...

    JerryZou 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<