成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官: 你們生產(chǎn)環(huán)境的JVM怎么設(shè)置的?

開(kāi)發(fā) 前端
本文主要討論的是Kafka和Elasticsearch兩種分布式系統(tǒng)的線上部署情況,不是普通的Java應(yīng)用系統(tǒng)。

前言

這篇文章,給大家聊一個(gè)生產(chǎn)環(huán)境的實(shí)踐經(jīng)驗(yàn):線上系統(tǒng)部署的時(shí)候,JVM堆內(nèi)存大小是越大越好嗎

先說(shuō)明白一個(gè)前提,本文主要討論的是Kafka和Elasticsearch兩種分布式系統(tǒng)的線上部署情況,不是普通的Java應(yīng)用系統(tǒng)。

1、是否依賴Java系統(tǒng)自身內(nèi)存處理數(shù)據(jù)?

先說(shuō)明一點(diǎn),不管是我們自己開(kāi)發(fā)的Java應(yīng)用系統(tǒng),還是一些中間件系統(tǒng),在實(shí)現(xiàn)的時(shí)候都需要選擇是否基于自己Java進(jìn)程的內(nèi)存來(lái)處理數(shù)據(jù)。

大家應(yīng)該都知道,Java、Scala等編程語(yǔ)言底層依賴的都是JVM,那么只要是使用JVM,就可以考慮在JVM進(jìn)程的內(nèi)存中來(lái)放置大量的數(shù)據(jù)。

還是給大家舉個(gè)例子,大家應(yīng)該還記得之前聊過(guò)消息中間件系統(tǒng)。

比如說(shuō)系統(tǒng)A可以給系統(tǒng)B發(fā)送一條消息,那么中間需要依賴一個(gè)消息中間件,系統(tǒng)A要先把消息發(fā)送到消息中間件,然后系統(tǒng)B從這個(gè)消息中間件消費(fèi)到這條消息。

大家看下面的示意圖。


大家應(yīng)該都知道,一條消息發(fā)送到消息中間件之后,有一種處理方式,就是把這條數(shù)據(jù)先緩沖在自己的JVM內(nèi)存里。

然后過(guò)一段時(shí)間之后,再?gòu)淖约旱膬?nèi)存刷新到磁盤(pán)上去,這樣可以持久化保存這條消息,如下圖。

2、依賴Java系統(tǒng)自身內(nèi)存有什么缺陷

如果用類似上述的方式,依賴Java系統(tǒng)自身內(nèi)存處理數(shù)據(jù),比如說(shuō)設(shè)計(jì)一個(gè)內(nèi)存緩沖區(qū),來(lái)緩沖住高并發(fā)寫(xiě)入的大量消息,那么是有其缺陷的。

最大的缺陷,其實(shí)就是JVM的GC問(wèn)題,這個(gè)GC就是垃圾回收,這里簡(jiǎn)單說(shuō)一下他是怎么回事。

大家可以想一下,如果一個(gè)Java進(jìn)程里老是塞入很多的數(shù)據(jù),這些數(shù)據(jù)都是用來(lái)緩沖在內(nèi)存里的,但是過(guò)一會(huì)兒這些數(shù)據(jù)都會(huì)寫(xiě)入磁盤(pán)。

那么寫(xiě)入磁盤(pán)之后,這些數(shù)據(jù)還需要繼續(xù)放在內(nèi)存里嗎?

明顯是不需要的了,此時(shí)就會(huì)依托JVM垃圾回收機(jī)制,把內(nèi)存里那些不需要的數(shù)據(jù)給回收掉,釋放掉那些內(nèi)存空間騰出來(lái)。

但是JVM垃圾回收的時(shí)候,有一種情況叫做stop the world,就是他會(huì)停止你的工作線程,就專門讓他進(jìn)行垃圾回收。

這個(gè)時(shí)候,他在垃圾回收的時(shí)候,有可能你的這個(gè)中間件系統(tǒng)就運(yùn)行不了了。

比如你發(fā)送請(qǐng)求給他,他可能都沒(méi)法響應(yīng)給你,因?yàn)樗慕邮照?qǐng)求的工作線程都停了,現(xiàn)在人家后臺(tái)的垃圾回收線程正在回收垃圾對(duì)象。

大家看下圖。


雖然說(shuō)現(xiàn)在JVM的垃圾回收器一直在不斷的演進(jìn)和發(fā)展,從CMS到G1,盡可能的在降低垃圾回收的時(shí)候的影響,減少工作線程的停頓。

但是你要是完全依賴JVM內(nèi)存來(lái)管理大量的數(shù)據(jù),那在垃圾回收的時(shí)候,或多或少總是有影響的。

所以特別是對(duì)于一些大數(shù)據(jù)系統(tǒng),中間件系統(tǒng),這個(gè)JVM的GC(Garbage Collector,垃圾回收)問(wèn)題,真是最頭疼的一個(gè)問(wèn)題。

3、優(yōu)化為依賴OS Cache而不是JVM

所以類似Kafka、Elasticsearch等分布式中間件系統(tǒng),雖然也是基于JVM運(yùn)行的,但是他們都選擇了依賴OS Cache來(lái)管理大量的數(shù)據(jù)。

也就是說(shuō),是操作系統(tǒng)管理的內(nèi)存緩沖,而不是依賴JVM自身內(nèi)存來(lái)管理大量的數(shù)據(jù)。

具體來(lái)說(shuō),比如說(shuō)Kafka吧,如果你寫(xiě)一條數(shù)據(jù)到Kafka,他實(shí)際上會(huì)直接寫(xiě)入磁盤(pán)文件。

但是磁盤(pán)文件在寫(xiě)入之前其實(shí)會(huì)進(jìn)入os cache,也就是操作系統(tǒng)管理的內(nèi)存空間,然后過(guò)一段時(shí)間,操作系統(tǒng)自己會(huì)選擇把他的os cache的數(shù)據(jù)刷入磁盤(pán)。

然后后續(xù)在消費(fèi)數(shù)據(jù)的時(shí)候,其實(shí)也會(huì)優(yōu)先從os cache(內(nèi)存緩沖)里來(lái)讀取數(shù)據(jù)。

相當(dāng)于寫(xiě)數(shù)據(jù)和讀數(shù)據(jù)都是依托于os cache來(lái)進(jìn)行的,完全依托操作系統(tǒng)級(jí)別的內(nèi)存區(qū)域來(lái)進(jìn)行,讀寫(xiě)性能都很高。

此外,還有另外一個(gè)好處,就是不要依托自身JVM來(lái)緩沖大量的數(shù)據(jù),這樣可以避免復(fù)雜而且耗時(shí)的JVM垃圾回收操作。

大家看下面的圖,其實(shí)就是一個(gè)典型的Kafka的運(yùn)行流程。

然后比如Elasticsearch,他作為一個(gè)現(xiàn)在最流行的分布式搜索系統(tǒng),也是采用類類似的機(jī)制。

大量的依賴os cache來(lái)緩沖大量的數(shù)據(jù),然后在進(jìn)行搜索和查詢的時(shí)候,也可以優(yōu)先從os cache(內(nèi)存區(qū)域)中讀取數(shù)據(jù),這樣就可以保證非常高的讀寫(xiě)性能。

4、老司機(jī)經(jīng)驗(yàn)之談:

依賴os cache的系統(tǒng)JVM內(nèi)存越大越好?

所以現(xiàn)在就可以進(jìn)入我們的主題了,那么比如就以上述說(shuō)的kafka、elasticsearch等系統(tǒng)而言,在線上生產(chǎn)環(huán)境部署的時(shí)候,你知道他們是大量依賴于os cache來(lái)緩沖大量數(shù)據(jù)的。

那么,給他們分配JVM堆內(nèi)存大小的時(shí)候是越大越好嗎?

明顯不是的,假如說(shuō)你有一臺(tái)機(jī)器,有32GB的內(nèi)存,現(xiàn)在你如果在搞不清楚狀況的情況下,要是傻傻的認(rèn)為還是給JVM分配越大內(nèi)存越好,此時(shí)比如給了16G的堆內(nèi)存空間給JVM,那么os cache剩下的內(nèi)存,可能就不到10GB了,因?yàn)楸旧砥渌某绦蜻€要占用幾個(gè)GB的內(nèi)存。

那如果是這樣的話,就會(huì)導(dǎo)致你在寫(xiě)入磁盤(pán)的時(shí)候,os cache能容納的數(shù)據(jù)量很有限。

比如說(shuō)一共有20G的數(shù)據(jù)要寫(xiě)入磁盤(pán),現(xiàn)在就只有10GB的數(shù)據(jù)可以放在os cache里,然后另外10GB的數(shù)據(jù)就只能放在磁盤(pán)上。

此時(shí)在讀取數(shù)據(jù)的時(shí)候,那么起碼有一半的讀取請(qǐng)求,必須從磁盤(pán)上去讀了,沒(méi)法從os cache里讀,誰(shuí)讓你os cache里就只能放的下10G的一半大小的數(shù)據(jù)啊,另外一半都在磁盤(pán)里,這也是沒(méi)辦法的,如下圖。

那此時(shí)你有一半的請(qǐng)求都是從磁盤(pán)上在讀取數(shù)據(jù),必然會(huì)導(dǎo)致性能很差。

所以很多人在用Elasticsearch的時(shí)候就是這樣的一個(gè)問(wèn)題,老是覺(jué)得ES讀取速度慢,幾個(gè)億的數(shù)據(jù)寫(xiě)入ES,讀取的時(shí)候要好幾秒。

那能不花費(fèi)好幾秒嗎?你要是ES集群部署的時(shí)候,給JVM內(nèi)存過(guò)大,給os cache留了幾個(gè)GB的內(nèi)存,導(dǎo)致幾億條數(shù)據(jù)大部分都在磁盤(pán)上,不在os cache里,最后讀取的時(shí)候大量讀磁盤(pán),耗費(fèi)個(gè)幾秒鐘是很正常的。

5、正確的做法:

針對(duì)場(chǎng)景合理給os cache更大內(nèi)存

所以說(shuō),針對(duì)類似Kafka、Elasticsearch這種生產(chǎn)系統(tǒng)部署的時(shí)候,應(yīng)該要給JVM比如6GB或者幾個(gè)GB的內(nèi)存就可以了。

因?yàn)樗麄兛赡懿恍枰馁M(fèi)過(guò)大的內(nèi)存空間,不依賴JVM內(nèi)存管理數(shù)據(jù),當(dāng)然具體是設(shè)置多少,需要你精準(zhǔn)的壓測(cè)和優(yōu)化。

但是對(duì)于這類系統(tǒng),應(yīng)該給os cache留出來(lái)足夠的內(nèi)存空間,比如32GB內(nèi)存的機(jī)器,完全可以給os cache留出來(lái)20多G的內(nèi)存空間,那么此時(shí)假設(shè)你這臺(tái)機(jī)器總共就寫(xiě)入了20GB的數(shù)據(jù),就可以全部駐留在os cache里了。

然后后續(xù)在查詢數(shù)據(jù)的時(shí)候,不就可以全部從os cache里讀取數(shù)據(jù)了,完全依托內(nèi)存來(lái)走,那你的性能必然是毫秒級(jí)的,不可能出現(xiàn)幾秒鐘才完成一個(gè)查詢的情況。

整個(gè)過(guò)程,如下圖所示:

所以說(shuō),建議大家在線上生產(chǎn)系統(tǒng)引入任何技術(shù)的時(shí)候,都應(yīng)該先對(duì)這個(gè)技術(shù)的原理,甚至源碼進(jìn)行深入的理解,知道他具體的工作流程是什么,然后針對(duì)性的合理設(shè)計(jì)生產(chǎn)環(huán)境的部署方案,保證最佳的生產(chǎn)性能。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2021-04-12 21:34:29

Redis故障數(shù)據(jù)

2024-07-10 10:08:36

項(xiàng)目多表關(guān)聯(lián)哈希

2024-03-07 17:21:12

HotSpotJVMHot Code

2025-03-05 08:04:31

2025-06-13 02:10:00

MySQL大表業(yè)務(wù)場(chǎng)景

2015-08-13 10:29:12

面試面試官

2023-10-08 15:23:12

2023-02-16 07:30:38

引用計(jì)數(shù)算法

2023-02-08 07:04:20

死鎖面試官單元

2025-04-14 11:41:12

RocketMQ長(zhǎng)輪詢配置

2024-01-02 10:31:14

JVM內(nèi)存整體

2010-08-12 16:28:35

面試官

2021-07-09 10:11:34

Redis云數(shù)據(jù)技術(shù)

2024-07-23 08:21:19

2021-11-08 09:18:01

CAS面試場(chǎng)景

2024-06-13 08:01:19

2025-04-08 00:00:00

@AsyncSpring異步

2021-12-25 22:31:10

MarkWord面試synchronize

2025-03-10 11:40:00

前端開(kāi)發(fā)HTML

2025-03-10 00:00:00

property?attributeHTML
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产综合久久 | 国产亚洲一区二区三区在线 | 色婷婷综合久久久中字幕精品久久 | 手机看黄av免费网址 | 91在线综合| 国产精品久久久久一区二区三区 | 一区二区三区日韩 | 亚洲精品日韩综合观看成人91 | 天天天操操操 | 男人天堂午夜 | 欧美一级久久 | h片免费在线观看 | 99在线资源| 日本午夜精品一区二区三区 | 日韩一区二区三区在线播放 | 国产1区在线 | 视频三区| 天天夜夜操 | 中文字幕日韩欧美一区二区三区 | 日本中文字幕视频 | 老牛嫩草一区二区三区av | 亚洲网站在线 | 国产麻豆一区二区三区 | 99热热精品 | 亚洲欧洲视频 | 久久伊人一区 | 国产99久久精品一区二区永久免费 | 亚洲专区在线 | 中文字幕日韩欧美一区二区三区 | 成人在线观看免费视频 | 欧美一级久久 | 精品欧美乱码久久久久久1区2区 | 我要看免费一级毛片 | 青娱乐av | 孰女乱色一区二区三区 | 国产精品国产三级国产aⅴ中文 | 国产视频一区二区三区四区五区 | 午夜影院中文字幕 | 国产精华一区 | 国产高清久久久 | 欧美视频三区 |