溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MongoDB啟動Linux內(nèi)存大頁(Huge Page)告警關(guān)閉

發(fā)布時(shí)間:2020-08-09 13:19:00 來源:ITPUB博客 閱讀:249 作者:realkid4 欄目:關(guān)系型數(shù)據(jù)庫

 

 

Linux環(huán)境中,默認(rèn)情況下啟動MongoDB會有很多提示告警信息的。如果我們安裝數(shù)據(jù)庫只是為了簡單的測試、學(xué)習(xí),也不會有太多的問題。但是,如果我們是搭建正式的生產(chǎn)環(huán)境,或者系統(tǒng)可能會有比較高的性能要求的時(shí)候,我們就盡可能的需要減少這些隱患,獲取更好的配置內(nèi)容。

 

1、環(huán)境說明

 

我們使用紅帽6.5進(jìn)行測試。

 

 

[root@oracle-test ~]# uname -a

Linux oracle-test 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64 x86_64 x86_64 GNU/Linux

[root@oracle-test ~]# cat /etc/redhat-release

Red Hat Enterprise Linux Server release 6.5 (Santiago)

 

 

默認(rèn)啟動模式下,會有若干幾個(gè)Warning信息,如下:

 

 

[mongodb@oracle-test ~]$ mongod

2017-07-13T22:50:24.098+0800 I CONTROL  [initandlisten] MongoDB starting : pid=19087 port=27017 dbpath=/data/db 64-bit host=oracle-test

(篇幅原因,有省略……

2017-07-13T22:50:24.138+0800 I STORAGE  [initandlisten]

2017-07-13T22:50:24.138+0800 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine

2017-07-13T22:50:24.138+0800 I STORAGE  [initandlisten] **          See _manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),

2017-07-13T22:50:24.212+0800 I CONTROL  [initandlisten]

2017-07-13T22:50:24.212+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.

(篇幅原因,有省略……

2017-07-13T22:50:24.213+0800 I CONTROL  [initandlisten]

2017-07-13T22:50:24.213+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.

2017-07-13T22:50:24.213+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'

2017-07-13T22:50:24.213+0800 I CONTROL  [initandlisten]

2017-07-13T22:50:24.213+0800 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.

2017-07-13T22:50:24.213+0800 I CONTROL  [initandlisten] **        We suggest setting it to 'never'

2017-07-13T22:50:24.213+0800 I CONTROL  [initandlisten]

(篇幅原因,有省略……

 

 

這四條信息,分別提示了當(dāng)前信息所存在的四個(gè)潛在風(fēng)險(xiǎn)點(diǎn)。

ü  Using the XFS filesystemMongoDBMySQL一樣,都是支持存儲引擎(Storage Engine)系統(tǒng)架構(gòu)模式。WiredTiger是目前MongoDB支持的主要引擎;

ü  Access control:訪問控制。在不使用—auth為參數(shù)啟動服務(wù)器的情況下,MongoDB對于訪問是沒有權(quán)限控制的。所以會有所提示;

ü  另外兩個(gè)就是關(guān)于HugePage管理策略的提示。HugePage,中文翻譯為大頁,是Linux操作系統(tǒng)一種管理內(nèi)存的方式。和通常方式相比,HugePage模式下內(nèi)存分配管理會有所差異。從提示信息看,MongoDB顯然是不希望這個(gè)特性被啟用;

 

本篇集中在處理HugePage特性關(guān)閉上。

 

2、Online操作配置

 

根據(jù)提示內(nèi)容,在/sys/kernel/mm/transparent_hugepage目錄下,保存著配置狀態(tài)文件。

 

 

[root@oracle-test /]# cd /sys/kernel/mm/transparent_hugepage

[root@oracle-test transparent_hugepage]# ls -l

total 0

-rw-r--r--. 1 root root 4096 Jun 21 20:26 defrag

-rw-r--r--. 1 root root 4096 Jun 21 20:26 enabled

drwxr-xr-x. 2 root root    0 Jul 13 22:52 khugepaged

[root@oracle-test transparent_hugepage]# cat enabled

[always] madvise never

[root@oracle-test transparent_hugepage]# cat defrag

[always] madvise never

 

 

取值always是不被接受的。我們需要設(shè)置為Never。

 

 

[root@oracle-test transparent_hugepage]# echo never >> /sys/kernel/mm/transparent_hugepage/enabled

[root@oracle-test transparent_hugepage]# echo never >> /sys/kernel/mm/transparent_hugepage/defrag

[root@oracle-test transparent_hugepage]# cat enabled

always madvise [never]

[root@oracle-test transparent_hugepage]# cat defrag

always madvise [never]

 

 

操作之后,重啟MongoDB可以發(fā)現(xiàn)提示消失。由于篇幅原因,內(nèi)容省略。但是,這種方式如果重啟服務(wù)器,進(jìn)行的配置內(nèi)容就恢復(fù)原狀。

 

 

[root@oracle-test ~]# cat /sys/kernel/mm/transparent_hugepage/enabled

[always] madvise never

[root@oracle-test ~]# cat /sys/kernel/mm/transparent_hugepage/defrag

[always] madvise never

 

 

如果可能,我們還是期望尋找一種永久解決問題的方法。

 

3、兩種網(wǎng)傳的解決之道

 

在網(wǎng)絡(luò)上,流傳著兩種解決永久關(guān)閉的方案。筆者均進(jìn)行了嘗試。

 

方法1:修改grub.conf配置文件,添加Never項(xiàng)目。

 

 

root@oracle-test ~]# cd /etc

[root@oracle-test etc]# ls -l | grep grub

lrwxrwxrwx.  1 root root     22 Jul 27  2015 grub.conf -> ../boot/grub/grub.conf

[root@oracle-test etc]# vi grub.conf

 

r-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=vg_linux6proser/lv_root SYSFONT=latarcyrheb-sun16 crashkernel=128M rd_LVM_LV=vg_linux6proser/lv_swap  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

        initrd /initramfs-2.6.32-431.el6.x86_64.img

transparent_hugepage=never  --新增加行

~

"grub.conf" 19L, 893C written

 

 

重啟系統(tǒng)后,查看參數(shù)。

 

 

[root@oracle-test ~]# cat /sys/kernel/mm/transparent_hugepage/enabled

[always] madvise never

[root@oracle-test ~]# cat /sys/kernel/mm/transparent_hugepage/defrag

[always] madvise never

 

 

并沒有效果,起碼在筆者的環(huán)境下是失效的。

 

方法2:修改rc.local文件,啟動階段自動執(zhí)行。在/etc/rc.local文件中,增加對應(yīng)內(nèi)容。

 

 

[root@oracle-test ~]# vi /etc/rc.local

touch /var/lock/subsys/local

 

if test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; then

   echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled

fi

if test -f /sys/kernel/mm/redhat_transparent_hugepage/defrag; then

   echo never > /sys/kernel/mm/redhat_transparent_hugepage/defrag

fi

~

 

 

重啟之后,查看HugePage狀態(tài)。

 

 

[root@oracle-test ~]#  cat /sys/kernel/mm/transparent_hugepage/enabled

always madvise [never]

[root@oracle-test ~]#  cat /sys/kernel/mm/transparent_hugepage/defrag

always madvise [never]

 

 

設(shè)置成功。

 

4、結(jié)論

 

本文介紹了處理HugePage告警日志的方法和策略,雖然不是很完美,但至少是經(jīng)過驗(yàn)證的方案。筆者猜想從Linux的角度,應(yīng)該有對于這個(gè)功能關(guān)閉的完整方案,留待我們繼續(xù)研究。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI