Недавно я купил новый 2-ядерный 4G-сервер Tencent Cloud для создания форума scutosc, но после его загрузки обнаружил, что команда htop показывает, что памяти всего 3,3 ГБ:
Я нахожу это удивительным, потому что моя другая 4-ядерная машина Tencent Cloud 4G может использовать 3,8G после загрузки. Может быть, новая машина сжалась? ? ?
С ищущим истину и прагматичным складом ума я исследовал:
Первое использование
dmidecode -t memory
Давайте проверим информацию о памяти на материнской плате и обнаружим, что она составляет 4 ГБ и не уменьшилась.
# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.
Handle 0x1000, DMI type 16, 23 bytes
Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 4 GB
Error Information Handle: Not Provided
Number Of Devices: 1
Handle 0x1100, DMI type 17, 40 bytes
Memory Device
Array Handle: 0x1000
Error Information Handle: Not Provided
Total Width: Unknown
Data Width: Unknown
Size: 4 GB
Form Factor: DIMM
Set: None
Locator: DIMM 0
Bank Locator: Not Specified
Type: RAM
Type Detail: Other
Speed: Unknown
Manufacturer: Smdbmds
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
Rank: Unknown
Configured Memory Speed: Unknown
Minimum Voltage: Unknown
Maximum Voltage: Unknown
Configured Voltage: Unknown
Это потрясающе. Куда делась память? После поиска в Интернете я обнаружил, что это может быть вызвано резервированием пространства kdump для дампов ошибок ядра Linux, поэтому я проверил файл конфигурации grub:
sudo vim /etc/default/grub
Было обнаружено, что параметры командной строки для запуска Linux:
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 console=ttyS0,115200 console=tty0 panic=5 intel_idle.max_cstate=1 intel_pstate=disable processor.max_cstate=1 crashkernel=2G-16G:512M,16G-:768M"
Обратите внимание на последнее “crashkernel=2G-16G:512M,16G-:768M” Параметр, указывающий, что когда системная память находится в диапазоне от 2 до 16 ГБ, kdump использует память 512 МБ! Снова взглянув на свою машину с 4G, я обнаружил, что kdump не включен. Ой, оказывается, разница в памяти в 500М вот здесь!
Что такое кдамп? kdump — это функция ядра Linux, которая создает дамп ядра при возникновении ошибки ядра. При запуске kdump экспортирует образ памяти (также называемый vmcore), который можно использовать для отладки и определения причины сбоя. Образ дампа основной памяти экспортируется как объект исполняемого и связываемого формата (ELF), доступ к которому можно получить напрямую через /proc/vmcore при обработке паники ядра или автоматически сохранить в локально доступной файловой системе, на необработанном устройстве или на Доступ к удаленной системе. [1][2]
Так могу ли я уменьшить память, зарезервированную kdump? Используйте следующую команду, чтобы просмотреть количество страниц памяти, необходимых для дампа ядра:
sudo makedumpfile --mem-usage /proc/kcore
Вы можете видеть, что дамп ядра требует 100038 страниц, что составляет около 390 МБ памяти. Поэтому Tencent Cloud по умолчанию резервирует 512M, чтобы его можно было сбросить при сбое ядра, и это правильно.
но! В конце концов, нас ждет нищенская игра! kdump используется для облегчения анализа ошибок после их возникновения. Тогда давайте вообще не будем это анализировать! Тогда просто отключите функцию kdump!
С тех пор,Непосредственно измените файл /etc/default/grub.,ПучокcrashkernelУдалить параметры,Отключите kdump. Затем используйте следующую команду.,Обновите параметры grub:
sudo grub-mkconfig -o /boot/grub/grub.cfg
Затем перезапустите сервер, чтобы изменения вступили в силу.
При перепечатке просьба указывать источник:https://longjin666.cn/?p=1822