新聞中心
作為Java開發(fā)者,必可避免的需要開發(fā)或使用一些中間件,對于Java開發(fā)的中間件,除了JVM參數(shù)必須調(diào)整外,Linux的一些內(nèi)核參數(shù)也必須要調(diào)整,這里幾個,僅供參考。

創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)伊吾,10多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
無非都是跟磁盤文件IO、網(wǎng)絡(luò)通信、內(nèi)存管理、線程數(shù)量有關(guān)系的,因為我們的中間件系統(tǒng)在運行的時候無非就是跟這些打交道。
vm.overcommit_memory
這個參數(shù)有三個值可以選擇,0、1、2。
如果值是0的話,在你的中間件系統(tǒng)申請內(nèi)存的時候,操作系統(tǒng)內(nèi)核會檢查可用內(nèi)存是否足夠,如果足夠的話就分配內(nèi)存給你,如果感覺剩余內(nèi)存不是太夠了,干脆就拒絕你的申請,導(dǎo)致你申請內(nèi)存失敗,進而導(dǎo)致中間件系統(tǒng)異常出錯。因此一般需要將這個參數(shù)的值調(diào)整為1,意思是把所有可用的物理內(nèi)存都允許分配給你,只要有內(nèi)存就給你來用,這樣可以避免申請內(nèi)存失敗的問題。
比如我們曾經(jīng)線上環(huán)境部署的Redis就因為這個參數(shù)是0,導(dǎo)致在save數(shù)據(jù)快照到磁盤文件的時候,需要申請大內(nèi)存的時候被拒絕了,進而導(dǎo)致了異常報錯。
可以用如下命令修改:
echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf
vm.max_map_count
這個參數(shù)的值會影響中間件系統(tǒng)可以開啟的線程的數(shù)量,同樣也是非常重要的。
如果這個參數(shù)過小,有的時候可能會導(dǎo)致有些中間件無法開啟足夠的線程,進而導(dǎo)致報錯,甚至中間件系統(tǒng)掛掉。
他的默認值是65536,但是這個值有時候是不夠的,比如我們大數(shù)據(jù)團隊的生產(chǎn)環(huán)境部署的Kafka集群曾經(jīng)有一次就報出過這個異常,說無法開啟足夠多的線程,直接導(dǎo)致Kafka宕機了。
可以用如下命令修改:
echo 'vm.max_map_count=655360' >> /etc/sysctl.conf
vm.swappiness
這個參數(shù)是用來控制進程的swap行為的,這個簡單來說就是操作系統(tǒng)會把一部分磁盤空間作為swap區(qū)域,然后如果有的進程現(xiàn)在可能不是太活躍,就會被操作系統(tǒng)把進程調(diào)整為睡眠狀態(tài),把進程中的數(shù)據(jù)放入磁盤上的swap區(qū)域,然后讓這個進程把原來占用的內(nèi)存空間騰出來,交給其他活躍運行的進程來使用。
如果這個參數(shù)的值設(shè)置為0,意思就是盡量別把任何一個進程放到磁盤swap區(qū)域去,盡量大家都用物理內(nèi)存。
如果這個參數(shù)的值是100,那么意思就是盡量把一些進程給放到磁盤swap區(qū)域去,內(nèi)存騰出來給活躍的進程使用。
默認這個參數(shù)的值是60,有點偏高了,可能會導(dǎo)致我們的中間件運行不活躍的時候被迫騰出內(nèi)存空間然后放磁盤swap區(qū)域去。因此通常在生產(chǎn)環(huán)境建議把這個參數(shù)調(diào)整小一些,比如設(shè)置為10,盡量用物理內(nèi)存,別放磁盤swap區(qū)域去。
可以用如下命令修改:
echo 'vm.swappiness=10' >> /etc/sysctl.conf
ulimit
這個是用來控制linux上的最大文件連接數(shù)的,默認值可能是1024,一般肯定是不夠的,因為你在大量頻繁的讀寫磁盤文件的時候,或者是進行網(wǎng)絡(luò)通信的時候,都會跟這個參數(shù)有關(guān)系
對于一個中間件系統(tǒng)而言肯定是不能使用默認值得,如果你采用默認值,很可能在線上會出現(xiàn)如下錯誤:
error: too many open files
因此通常建議用如下命令修改這個值:
echo 'ulimit -n 1000000' >> /etc/profile
一點小小的總結(jié)
中間件系統(tǒng)肯定要開啟大量的線程(跟vm.max_map_count有關(guān))。
而且要進行大量的網(wǎng)絡(luò)通信和磁盤IO(跟ulimit有關(guān))。
然后大量的使用內(nèi)存(跟vm.swappiness和vm.overcommit_memory有關(guān))。
所以對OS內(nèi)核參數(shù)的調(diào)整,往往也就是圍繞跟中間件系統(tǒng)運行最相關(guān)的一些東西。
新聞名稱:通過調(diào)整Linux內(nèi)核參數(shù)才能使用的Java大型中間件系統(tǒng)
URL網(wǎng)址:http://m.fisionsoft.com.cn/article/cdijcse.html


咨詢
建站咨詢
